Bonjour à tous,
Je suis nouveau sur le forum, jusqu'ici j'essaie toujours de trouver mes réponses sur les sujets déjà traités, mais là ça ne fonctionne pas.
Je suis débutant en VBA, je précise, donc désolé d'avance si mon code vous pique les yeux;..![]()
Donc voilà, ma macro pour le moment convertit un fichier .csv en .xlsm, elle me créé trois feuilles où les données sont triés en fonction d'une de leur caractéristiques.
Mon problème maintenant est qu'il faut que je trie chacune de mes feuilles.
En gros, il y a un identifiant et un nom pour chaque entité, et c'est comme ça que je les différencie car c'est un identifiant + un nom par ligne. Néanmoins, il existe dans mon fichier des groupes, qui fait que sur une même ligne, il y a plusieurs identifiants et noms.
Ma macro donc, cherche dans la première ligne le "Marque 2" qui représente le second identifiant.
On connait donc la colonne dans laquelle il peut y avoir des groupes avec plusieurs identifiants. Je regarde donc si chacune des cellules de cette colonne est vide, si elle ne l'est pas, alors c'est donc un groupe avec plusieurs identifiants, je copie donc la ligne, je l'insers en dessous, et je coupe l'identifiant et le nom pour les coller là ou il y a le premier identifiant et le premier nom.
Tout ça pour dire que ça ne fonctionne pas, si quelqu'un à une idée pour la faire fonctionner, je vous remercie
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 Sub duplication() Dim nb_lignes_tableau As Integer Dim col_marque2 As String Dim i As Integer Dim j As Integer Sheets("Base Auto").Select 'on cherche le numéro de colonne du texte marque 2 For i = 1 To 50 '50 est un chiffre aléatoire, sachant que mon tableau est forcément plus petit If Cells(1, i).Value Like "Marque 2" Then col_marque2 = i End If Next nb_lignes_tableau = Application.WorksheetFunction.CountA(Range("A1:A" & Range("A65536").End(xlUp).Row)) ' calcul du nb de lignes du tableau For j = 2 To nb_lignes_tableau 'on part de la seconde ligne car la première est remplie des entêtes (marque 2 par exemple) If Cells(ii, col_marque2).Value <> "" Then Rows(ii).Copy ' on copie toute la ligne de la cellule non vide de la colonne marque 2 Selection.Insert Shift:=xlDown 'on insère la même ligne en dessous Range(Cells(ii, col_marque2), Cells(ii, col_marque2 + 1)).Cut Destination:=Cells(ii, col_marque - 2) 'maintenant qu'on a dupliqué la ligne, on coupe la cellule non vide et celle à sa droite, qu'on colle deux cellules à gauche End If Next j End Sub
Partager