Comparaison et agrégation (macro-excel)

noobynoob -  
 noobynoob -
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
Configuration: Windows XP
Internet Explorer 6.0

1 réponse

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. noobynoob
       
      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