Copier et répéter une donnée en fonction de valeurs
Résolu
EnSabahNur79
Messages postés
3
Statut
Membre
-
EnSabahNur79 Messages postés 3 Statut Membre -
EnSabahNur79 Messages postés 3 Statut Membre -
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
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
A voir également:
- Copier et répéter une donnée en fonction de valeurs
- Fonction si et - Guide
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Historique copier coller - Guide
- Copier-coller - Accueil - Informatique
2 réponses
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)
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
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
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
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