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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.