[Résolu] [Calc] Copier coller colonnes selon conditions

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
tomasi
Membre prOOscrit
Messages : 17
Inscription : 14 mars 2019 13:34

[Résolu] [Calc] Copier coller colonnes selon conditions

Message par tomasi »

Bonjour,

Voilà que je me retrouve à devoir mettre en place une macro car pas le choix (enfin je pense...).
Sur le fichier joint il faudrait que se colle (en affectant une macro à un bouton) les colonnes AD, AE, AF à partir de la ligne 3 dans les colonnes AL, AM, AN aussi à partir de la ligne 3 si la référence (colonne AF) est "Tx Avancement 1" et dans le cas où la référence est "Tx Avancement 2" le copié collé devra se faire sur les colonnes AO, AP, AQ.
Si la référence est sur Tx de réussite le copié collé concerne cette fois les colonnes AC, AE, AF qui vont se coller en AU, AV, AW.
Si la référence est sur Tx de collecte le copié collé concerne cette fois les colonnes Z, AE, AF qui vont se coller en AR, AS, AT.

Autre chose il faut à tout prix que les données se collent à la suite sans supprimer les anciens copié-collé de façon à conserver l'ensemble des données et pouvoir y appliquer une rechercheV.

Un grand merci d'avance à l'âme charitable qui prendra un peu de son temps pour me faire cette petite macro :D

Solution retenue : macro de Noonours
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par tomasi le 19 janv. 2024 10:18, modifié 4 fois.
libO 5.4
windows 7 professionnel
Obligation de version
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12231
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc] Copier coller colonnes selon conditions

Message par Bidouille »

Bonjour,

Je vois que 30 jours plus tard, vous n'avez obtenu aucune réponse.

Voici quelques pistes à suivre pour essayer d'avancer :
Simplifiez votre question (sans doute trop vague ou trop générale) en l'éclatant en tâches plus simple.
Vous pouvez commencer avec l'enregistreur de macro par exemple.
Ensuite fouillez un peu, il y a certainement un bout de code à récupérer et qui s'approche de chaque problème.

N'hésitez pas à revenir si vous étiez bloqué sur un point précis.
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 501
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: [Calc] Copier coller colonnes selon conditions

Message par Noonours »

Bonjour,

Tu peux tester le code ci-dessous que tu pourras rattacher à un bouton.
j'ai créé 4 cas, en fonction de ta cellule C1, puisque c'est son contenu qui va déterminer quelles plages de cellules vont être copiées-collées.

Code : Tout sélectionner

Sub CopierColler_aLaSuite()

 oDoc = ThisComponent
 oFeuil = oDoc.sheets.getByName("Feuille1")
 oCellReference = oFeuil.getCellRangeByName("C1")

 Select Case oCellReference.String

	Case "Tx Avancement 1"
		ColACopier = Array(29, 30, 31) 'colonnes AD, AE et AF
		ColDest = Array(37, 38, 39) 'AL, AM, AN
		
	Case "Tx Avancement 2"
		ColACopier = Array(29, 30, 31) 'colonnes AD, AE et AF
		ColDest = Array(40, 41, 42) 'AO, AP, AQ

	Case "Tx de réussite"
		ColACopier = Array(28, 30, 31) 'colonnes AC, AE et AF
		ColDest = Array(46, 47, 48) 'AU, AV, AW

	Case "Tx de collecte"
		ColACopier = Array(25, 30, 31) 'colonnes Z, AE et AF
		ColDest = Array(43, 44, 45) 'AR, AS, AT

	Case Else
		Exit Sub

 End Select

For i = 0 to 2

'détermination de la zone à copier
 oZonesVides = oFeuil.Columns(ColACopier(i)).queryEmptyCells.RangeAddresses
 DerLign = oZonesVides(Ubound(oZonesVides)).StartRow
 ZoneACopier = oFeuil.getCellRangeByPosition(ColACopier(i),2,ColACopier(i),DerLign)

'détermination de la zone cible où seront collées les données
 oZonesVides = oFeuil.Columns(ColDest(i)).queryEmptyCells.RangeAddresses  
 LigneCible = oZonesVides(Ubound(oZonesVides)).StartRow
 ZoneCible = oFeuil.getCellRangeByPosition(ColDest(i),LigneCible,ColDest(i),LigneCible + ZoneACopier.rows.Count -1) ' la zone cible doit être de même dimension (taille) que la zone d'origine

'copier-coller des données
ZoneCible.DataArray = ZoneACopier.DataArray
 
next i

End Sub
 Ajout : j'ai modifié la fin du script avec un transfert de DataArray pour ne recopier que les valeurs et non le format ( mon premier jet était avec la méthode copyRange, et les références à C1 continuaient d'être actives et liées à la modification des cellules du classeur :?
Cordialement,
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
tomasi
Membre prOOscrit
Messages : 17
Inscription : 14 mars 2019 13:34

Re: [Résolu] Copier coller colonnes selon conditions

Message par tomasi »

merci pour cette réponse
libO 5.4
windows 7 professionnel
Obligation de version