Copier et répéter une donnée en fonction de valeurs [Résolu/Fermé]

Signaler
Messages postés
3
Date d'inscription
jeudi 14 janvier 2016
Statut
Membre
Dernière intervention
14 janvier 2016
-
Messages postés
3
Date d'inscription
jeudi 14 janvier 2016
Statut
Membre
Dernière intervention
14 janvier 2016
-
Bonjour à tous,

Je suis débutant sur la création de macro excel.
j'aurais besoin de vos lumières car là je sais pas du tout comment faire et je suis bloqué en essayant avec des formules (pas assez flexible et pas assez facile à maintenir).

Dans le fichier joint, j'aimerai travailler sur deux onglets:
- Users rollout : source des données
- GroupConsolidated.csv : cible où copier les données

Il faudrait que la valeur de la colonne B du premier onglet (ex: ARB12345) soit recopiée et répétée dans la colonne A du dernier onglet en fonction des 'X' dans la plage de valeur (S3:AH3) du premier onglet. Si 3 'x', répéter 3 fois la valeur. Si 2 'x", répéter 2 fois la valeur, etc...
En plus de ça, les en-têtes de colonne de cette plage (S3:AH3) où des 'x' sont présents doivent être aussi copiés, mais dans la colonne C du dernier onglet.

Informations additionnelles:
Il faudrait que la macro lise toute la colonne B du premier onglet et s'arrête quand il n'y a plus de valeur (mais bon j'imagine que vous vous en doutiez déjà).
La plage (S3:AH3) pourrait varier. Elle commencera toujours à la colonne S mais pourrait se terminer avant ou après la colonne AH.

Je vous joins le fichier en question avec deux exemples.

https://www.cjoint.com/c/FAok5qmHGvh

J'espère avoir été suffisamment clair.

Merci d'avance pour votre aide.

Antoine

2 réponses

Messages postés
12477
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
7 août 2020
1 961
Bonjour

Voilà la macro à mettre dans un module (ALT+F11 pour ouvrir Editeur VBA puis Insertion - Module - copier coller-coller la macro dans la page et fermer éditeur)
Sub transfert()
a = "Users Rollout"
b = "GroupConsolidated.csv"
With Sheets(a)
Dim Ligne As Long
'dernière ligne remplie 1ere feuille
Ligne = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
Dim DernCol As Integer
' derniere colonne remplie 1ere feuille
DernCol = .Cells(2, .Cells.Columns.Count).End(xlToLeft).Column
' boucle sur les colonnes depuis S jusqu'à la dernière
For n = 19 To DernCol
' si titre en ligne 2 commence par Group on relève le n° de colonne
' le dernier n° relevé sera donc celui de la dernière colonne pouvant avoir un x
If Left(.Cells(2, n).Value, 5) = "Group" Then Col = n
Next n
End With
'ligne de titre dans 2eme feuille
lg = 2
'Boucle sur lignes de 1ere feuille de la 3° à dernière
For x = 3 To Ligne
' Boucle sur les colonnes Group (de S à la dernière)
For y = 19 To Col
' Si cellule contient x
If Sheets(a).Cells(x, y) = "x" Then
' on incremente la ligne de recopie de 1
lg = lg + 1
' copie des données dans feuille 2 en A et C
With Sheets(b)
Range("A" & lg) = Sheets(a).Range("B" & x)
Range("C" & lg) = Sheets(a).Cells(2, y)
End With
End If
Next y
Next x
End Sub


La macro peut ensuite être lancée à partir de n'importe quelle feuille Depuis Developpeur dans le Ruban puis Macros - Selectionner la macro transfert et Exécuter

Cdlmnt
Via

"L'imagination est plus importante que le savoir."    A. Einstein
Messages postés
3
Date d'inscription
jeudi 14 janvier 2016
Statut
Membre
Dernière intervention
14 janvier 2016

Bonjour Via,

Merci beaucoup pour ton retour rapide, tu m'enlèves un grosse épine du pied.

La macro fonctionne très bien, mais il y a juste un hic.
Les valeurs ne sont pas copiées dans la feuille "GroupConsolidated.csv" mais dans la feuille originale "Users Rollout".
J'ai essayé de corriger moi-même mais je ne trouve pas d'où cela peut venir.


Merci de ton aide
Messages postés
3
Date d'inscription
jeudi 14 janvier 2016
Statut
Membre
Dernière intervention
14 janvier 2016

My bad, ça fonctionne très bien.
Il fallait juste que j'active mon cerveau et que je me positionne sur la bonne feuille.

Encore merci pour tout
@+