VBA - Copie de données entre deux feuilles et restructuration
Bonsoir,
Je suis débutante sous VBA et ne trouve pas de solution.
Je dois récupérer des données excel de la feuille "donnees" et en copier certaines dans la feuille "resultat".
Une des données (Mag1, Mag2…) est en-tête de colonnes et les autres en lignes.
La donnée présente dans l’en-tête doit être mise en ligne, dupliquée pour chaque ligne copiée.
Les données des colonnes (sauf en-tête colonne) Mag 1, Mag 2.. doivent être dans la même colonne Mag.
Les mentions d'en-tête : Mag1, Mag 2 dans la colonne «*A*» face aux lignes copiées
Cette action est à faire pour 70 colonnes
Au final on a plus de lignes dans la feuille "resultat" et le nom des Mag sont présent en face de chaque ligne copiée.
Mes problèmes:
1. dupliquer la donnée Mag 1, Mag 2... dans la colonne «*A*» car le nombre de lignes est variable
2. traiter les 70 colonnes consécutivement car la colonne de référence dans la feuille "donnees" change (+ une colonne) y compris pour le filtre.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| 'Recuperation des données Mag1
'Récupération du premier nom de Mag
Sheets("donnees").Select
Range("W1").Select
Selection.Copy
Sheets("resultat").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
nom = ActiveCell.Value
m = ActiveCell.Row
'Filtre sur premier nom de Mag pour enlever les lignes vides
Sheets("donnees").Select
Range("W1").Select
ActiveSheet.Range("$A$1:$P$10000").AutoFilter Field:=23, Criteria1:="<>"
'Récupération des données filtrées et copie dans la feuille "resultat"
Range("A65536").End(xlUp).Select
n = ActiveCell.Row
Range("A2:A" & n).Copy Worksheets("resultat").Range("B2")
Range("C2:D" & n).Copy Worksheets("resultat").Range("C2")
Range("F2:L" & n).Copy Worksheets("resultat").Range("E2")
Range("N2:O" & n).Copy Worksheets("resultat").Range("L2")
Range("T2:T" & n).Copy Worksheets("resultat").Range("N2")
Range("W2:W" & n).Copy Worksheets("resultat").Range("O2")
'Ajouter le nom dans la colonne A sur les lignes copiées
Sheets("resultat").Select
Dim Cell As Range
'rechercher dernière ligne renseignée dans colonne B et ajouter nom dans la colonne "A"
Range("B65536").End(xlUp).Select
ActiveCell.Offset(0, -1).Select
ActiveCell.Value = nom
n = ActiveCell.Row
For Each Cell In Range("A" & n - 1)
If Cell.Value = "" Then
ActiveCell.Value = nom
End If
Next Cell
'Recuperation des données Mag 2
'Traitement du deuxième Mag. Rechercher dernière ligne vide
Sheets("donnees").Select
Rows("1:1").Select
ActiveSheet.ShowAllData
'Il faudrait ajouter une colonne automatiquement
Range("X1").Select
Selection.Copy
Sheets("resultat").Select
Range("A65536").End(xlUp).Select
p = ActiveCell.Row
ActiveCell.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("donnees").Select
Range("X1").Select
'Il faut décaler le filtre d'une colonne
ActiveSheet.Range("$A$1:$CJ$10000").AutoFilter Field:=24, Criteria1:="<>"
'Récupération des données filtrées et copie dans la feuille "resultat"
Range("A65536").End(xlUp).Select
n = ActiveCell.Row
Range("A2:A" & n).Copy Worksheets("resultat").Range("B" & p + 1)
Range("C2:D" & n).Copy Worksheets("resultat").Range("C" & p + 1)
Range("F2:L" & n).Copy Worksheets("resultat").Range("E" & p + 1)
Range("N2:O" & n).Copy Worksheets("resultat").Range("L" & p + 1)
Range("T2:T" & n).Copy Worksheets("resultat").Range("N" & p + 1)
Range("X2:X" & n).Copy Worksheets("resultat").Range("O" & p + 1)
'Il faudrait ne pas noter X mais faire W+1 colonne
'Ajouter le nom dans la colonne A sur les lignes copiées
'rechercher dernière ligne renseignée dans colonne B
Range("B65536").End(xlUp).Select
e = ActiveCell.Row
'A continuer dans la colonne "A" ajouter nom du Mag
Range("A" & e).Select
ActiveCell.FormulaR1C1 = "Name" |
Je vous remercie pour votre aide.
Copie de données entre deux feuilles et restructuration
Bonjour,
Merci de donner un exemple réduit de la feuille donnée et de la feuille résultat attendu pour une meilleure compréhension.
Penser à mettre le code entre balise : voir la balise # ci-dessus
Cordialement.
1 pièce(s) jointe(s)
[XL-2007] VBA - Copie de données entre deux feuilles et restructuration
Bonsoir,
Je vous remercie pour vos retours et les conseils.
J'ai joint un fichier"Test" avec plusieurs feuilles, format xls, j'espere qu'il sera bien present et exploitable.
Cordialement
[XL-2007] VBA - Copie de données entre deux feuilles et restructuration
Bonjour,
Je vous remercie pour votre retour et tous vos conseils.
Votre analyse de ma demande est exacte.
J'ai regardé votre tutoriel sur les filtres avancés et élaborés et la réponse indiquée.
Je vais essayer de transcrire ceci pour ma demande mais il y encore des zones obscures pour moi avec toutes les variables présentes, sachant que je suis novice en écriture de boucles.
Je vais faire un essai ce jour.
Cordialement