IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

comparaison et agrégation (macro-excel)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut comparaison et agrégation (macro-excel)
    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.(1500 lignes)
    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
     
    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

  2. #2
    Membre expérimenté
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Par défaut
    bonjour

    j'ai testé sur le fichier joint. Ceci devrait répondre à ton problème
    http://http://cjoint.com/?eipO4TJm7C
    contacte moi si tu souhaites des éclaircissements
    à plus

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Et ceci ? (pas testé, et j'ai pas l'habitude de travailler avec des Range, mais bon...)
    Par contre attention, il faut que la colonne "commune" ait des identifiants uniques, sinon... ça se complique.

    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
     
    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 = ws1.Range("A" & k).Value 
       '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).Value = z Then 
             'i3 = Macolonne (ligne inutile)
             'on écrit les données correspondantes 
             For i2 = 2 To Macolonne2 
                'i3 = i3 + 1 (ligne inutile)
                ws1.Cells(k, i2).Value = ws2.Cells(kk, i2).Value 
             Next 
             Exit for 'inutile de continuer à boucler quand la correspondance a été trouvée
          End If 
       Next 
    Next 
    End With 
    End Sub

    Edit :
    Je ne comprends pas bien ce que tu voulais faire avec la ligne :
    Tu voulais rajouter les données de la feuille 2 à la suite de celles de la feuille 1 ? Ou tu préfèrerais les écraser (ce que fait mon code) ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    Citation Envoyé par neupont Voir le message
    Edit :
    Je ne comprends pas bien ce que tu voulais faire avec la ligne :
    Tu voulais rajouter les données de la feuille 2 à la suite de celles de la feuille 1 ? Ou tu préfèrerais les écraser ?
    Bien vu, en fait je veux rajouter les données de la feuille 2 à la suite de la feuille 1. Les données de la première colonne sont des codes de commune d'une région(il y'en a 1500 et des brouettes) et la ligne que tu ne comprends pas en fait je réinitialise i3 pour me retrouvé à chaque fois à rajouter les données dans la même colonne. Je vais tester ta macro Le Pierre et je vous tiens au courant.
    Merci pour vos réponse rapide

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    Arf ca ne marche pas, en fait sa donne le même résultat que ma macro, il copie juste la première ligne à la suite dans la feuille1 et il s'arrête la.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Un truc tout con, il faudrait sans doute mettre Next k et next kk, plutôt que next tout court. A part ça ta macro a l'air bien.

    Edit : sans oublier next i2.
    Tu devrais indenter ton code, quand on fait des boucles imbriquées c'est quand même plus clair.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 6
    Par défaut
    Et bien nan j'ai rajouté les next k, kk et i2 et ta sortie de boucle. et toujours pareil il me copie que la première ligne, j'avoue que je comprends pas vu que sa marche sur un plus petit fichier... C'est à se tirer une balle...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] comparaison des cellules VBA (MAcro Excel)
    Par developpeur82 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/08/2012, 13h20
  2. Macro Excel : Comparaison de 2 feuilles
    Par michaeljeru dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/10/2010, 18h21
  3. [macro Excel]
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/09/2005, 10h54
  4. débutant en VBA je n'arrive pas à finir ma macro excel
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/01/2005, 13h20
  5. Porter une macro Excel vers OpenOffice
    Par totofweb dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 13/07/2004, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo