Comparaison et agrégation (macro-excel)

Fermé
noobynoob - 8 avril 2008 à 14:38
 noobynoob - 8 avril 2008 à 15:32
Bonjour,
Je vous explique mon problème. Je travaille donc sous excel, en fait j'ai deux fichiers de données dans deux feuilles différentes avec une colonne commune. Ce que je souhaite réalisé c'est comparer ces deux colonnes et lorsque elle sont identiques copier les données de la deuxième feuille sur la première bien évidemment sur la ligne qu'elles ont en communes. J'ai réalisé une macro qui fonctionne sur quelques lignes mais pas sur mes données réelles.

Sub Comparer()
Dim ws1 As Worksheet, ws2 As Worksheet, Maligne As Variant, Maligne2 As Variant, Macolonne As Variant, Macolonne2 As Variant, i2, i3, k, kk, z
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
Set ws3 = Worksheets(3)
Maligne = ws1.Range("A1").End(xlDown).Address
Maligne = ws1.Range(Maligne).Row
Maligne2 = ws2.Range("A1").End(xlDown).Address
Maligne2 = ws2.Range(Maligne2).Row
Macolonne = ws1.Range("A1").End(xlToRight).Address
Macolonne = ws1.Range(Macolonne).Column
Macolonne2 = ws2.Range("A1").End(xlToRight).Address
Macolonne2 = ws2.Range(Macolonne2).Column
With ws1
'on parcours la colonne dans la première feuille
For k = 1 To Maligne
z = .Range("A" & k)
'on parcours la colonne dans la deuxième feuille
For kk = 1 To Maligne2
'on compare avec la valeur de la première feuille
If ws2.Range("A" & kk) = z Then
i3 = Macolonne
'on écrit les données correspondante
For i2 = 2 To Macolonne2
i3 = i3 + 1
ws1.Cells(k, i3).Value = ws2.Cells(kk, i2).Value
Next
End If
Next
Next
End With
End Sub

Je pense que ce sont surement les 3 boucles imbriquées qui posent problème. En vous remerciant ;)
Bonne journée
A voir également:

1 réponse

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
8 avril 2008 à 15:03
Bonjour,
Je simplifierais d'abord comme ceci..
MaLigne  = ws1.Range("A65536").End(XlUp) . Row
MaLigne2  = ws2.Range("A65536").End(XlUp) . Row
'Si le nombre de colonne est identique dans tout le tableau...
MaColonne = ws1.Range("A1").SpecialCells(xlCellTypeLastCell).Column
MaColonne2 = ws2.Range("A1").SpecialCells(xlCellTypeLastCell).Column
dim Cell as range
    Range(A1:A" & MaLigne).select
    For each cell in selection
        For i=1 to MaLigne2
            if cell.value = ws2.cell(1,i).value then
                'Ici faire le transfert, j'ai pas bien compris ce que tu transfère.
            end if
        Next i
    next cell

Possible erreur de frappe, j'ai pas testé.
A+
0
En fait la colonne en commun, c'est une colonne avec les codes des communes d'une région. A chaque fois que l'on retrouve une commune dans la deuxième feuille je veux copier les données sur l'autre feuille pour complété le tableau, il y a aussi des communes où rien ne sera complété car pas présente dans la feuille 2.
Pas tout piger à ce que tu as écrit. Mais en gros tu fait comme moi ? sauf que tu sélectionne toute la première colonne de la première feuille et derrière tu compare ta sélection à la colonne de la seconde feuille c'est bien sa ? Je test ton code mais je commence à avoir la tête qui fume :D . Le fait que les données représentent 1500 lignes pour la première feuille et 500-600 pour la deuxième sa aide pas non plus je pense !? Merci pour ton aide en tout cas
0