bonjour,
je me permet de vous solliciter, dans la cadre d'un projet, je dois rassembler 20 projets sur 5 ans (1829 lignes) et trois données sont rapatriées : la date de mise en production, la valeur et le projet (fichier en copie).
pour se faire, j'ai modifier un code vba que j'ai trouvé :
Sub Regroupe()
Dim i%, j%, dl%, y%, n%
dl = 4 '1ère ligne du tableau chiffre
dy = 4 '1ère ligne du tableau pour date
dn = 4 '1ère ligne du tableau pour date
Range("p4:p5000") = "" 'vide ancienne valeur
Range("q4:q5000") = "" 'vide ancienne valeur
Range("r4:r5000") = "" 'vide ancienne valeur
For i = 10 To 14 Step 4 'boucle une colonne sur 4
For j = 4 To 1829 'boucle ligne'si la cellule n'est pas vide
If Cells(j, i).Value <> "" Then 'si la cellule n'est pas vide
Cells(dl, 17).Value = Cells(j, i).Value 'je rempli la colonne Q
dl = dl + 1 ' je déclare la Dl avec une ligne de plus
End If
For y = 1 To 1
If Cells(j, i).Value <> "" Then 'si la cellule n'est pas vide
Cells(dy, 16).Value = Cells(j, y).Value 'je rempli la colonne P
dy = dy + 1 ' je déclare la Dl avec une ligne de plus
End If
Next y
For n = 3 To 3 'boucle une colonne sur 4
If Cells(j, i).Value <> "" Then 'si la cellule n'est pas vide
Cells(dn, 18).Value = Cells(n, i).Value 'je rempli la colonne q
dn = dn + 1 ' je déclare la Dl avec une ligne de plus
End If
Next n
Next j
Next i
End Sub
la procédure est très longue d'exécution, plus de 2-3mn.
j'ai vu sur le forum un code proposé par h2so4 qui permet de copier les colonnes très rapidement mais exclue les doublons (ce qui dans mon cas n'est pas souhaitable).
Private Sub regrouper()
With Sheets("Feuil1")
dl = .Cells(1829, 10).Row '.Cells(Rows.Count, 3).End(xlUp).Row '' permet de prendre toutes les lignes du bas de la feuille vers le haut
dc = .Cells(4, 14).Column '.Cells(43, Columns.Count).End(xlToLeft).Column '' permet de prendre toutes les cololnnes de la droite de la feuille vers la gauche
Set dict = CreateObject("scripting.dictionary")
For i = 4 To dl
For j = 10 To dc Step 4
v = .Cells(i, j).Value
If v <> "" Then dict(v) = 1
Next j
Next i
Cells(4, 19).Resize(dict.Count) = Application.Transpose(dict.keys)
'Cells(4, 19).Resize(dict.Count) = Application.Transpose(dict.keys)
End With
End Sub
Edit modo : Merci de mettre les codes entre balises </>
après recherche,
dictionary = supprime les doublons
Auriez vous une idée, pour gagner du temps sur la première ou permettre les doublons sur la seconde ?
d'avance merci de votre aide et de votre expérience
(je suis débutant en vba, mais avec une certaine compréhension des codes (je peux adapter, comprendre le cheminement, mais pour l'instant, je n'en crée pas ou des très simple)