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 de données sous Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut Comparaison de données sous Excel
    Bonjour,

    Je cherche quel est la meilleure solution pour effectuer une comparaison entre les données d'une colonne précise dans 2 fichiers distinct.

    Je m'explique :

    - J'ai un fichier 1 possédant une colonne A et une colonne B
    - J'ai un fichier 2 possédant une colonne Y et une colonne Z
    - Les données des colonnes A et Y sont des données de format texte de même type mais rangées de façon aléatoire dans les 2 fichiers. Ce sont ces données que je veux comparer entre elle.
    - Les données de la colonne Z sont les valeurs finales que je souhaite récupérer lorsque A = Y
    - La colonne B est vide et est réserver à stocker les données de la colonne Z lorsque A = Y

    je cherche donc à vérifier si les données de chaque cellule de la colonne A sont présentes dans l'une des cellules de la colonne Y. Si oui à chaque données A trouvée en Y je récupère la valeur Z (même ligne que Y) et la stocke en colonne B (même ligne que A)

    Je précise qu'il faut bien chercher la valeur A1 dans les cellules Y1 à Yz, la valeur A2 dans Y1 à Yz ....

    Je précise également que je cherche à écrire ça en VBA et ne veux pas utiliser de recherchev.

    Merci d'avance pour votre aide.

    Olivier

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    En considérant que les deux classeurs sont ouverts, cela devrait ressembler à un truc du style :
    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
    Sub test()
    Dim i As Integer, j As Integer
    Dim WS1 As Worksheet, WS2 As Worksheet
     
    Set WS1 = Workbooks("classeurAB.xls").Sheets("feuilleAB")
    Set WS2 = Workbooks("classeurXY.xls").Sheets("feuilleXY")
     
    For i = 2 To WS1.Range("A65535").End(xlUp).Row
        Set C = WS2.Range("A:A").Find(what:=WS1.Cells(i, 1), lookat:=xlWhole)
            If Not C Is Nothing Then
                WS1.Cells(i, 2) = WS2.Cells(C.Row, 2)
            End If
    Next
     
    End Sub
    YFO bien sur adapter tout ça selon le nom des classeurs et des feuilles, la position des colonnes (colonnes A et B dans les deux classeurs), le début de la boucle qui commence ici à la ligne 2

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

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    ok merci pour ce code.

    j'ai un peu de mal avec la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set C = WS2.Range("A:A").Find(what:=WS1.Cells(i, 1), lookat:=xlWhole)
    Je ne connaissais pas ce type de code.

    Voici ce que j'ai écrit de mon côté :

    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
    35
    36
    37
    Sub documenter_fichier_propagation()
     
        Dim fichier_librairie As String
        Dim ch_class As Variant
        Dim ch_fichier_propagation() As String
        Dim fichier_propagation As String
        Dim A, B, X, Y As String
        Dim lg, i, j As Integer
     
        fichier_librairie = ActiveWorkbook.Name
     
        ch_class = Application.GetOpenFilename("Fichiers Microsoft Excel, *.xls", , "Choisir le fichier de propagation", , False)
        If ch_class = "" Or ch_class = False Then Exit Sub
        ch_fichier_propagation() = Split(ch_class, "\")
        lg = UBound(ch_fichier_propagation)
        fichier_propagation = ch_fichier_propagation(lg)
        Workbooks.Open fichier_propagation
     
        i = 2
        While Workbooks(fichier_propagation).Worksheets("CECILIA x VIR").Cells(i, 6) <> ""
            A = Workbooks(fichier_propagation).Worksheets("CECILIA x VIR").Cells(i, 6)
            j = 1
            While Workbooks(fichier_librairie).Worksheets("propagation").Range("mode_degrade").Offset(j, 0) <> ""
                X = Workbooks(fichier_librairie).Worksheets("propagation").Range("mode_degrade").Offset(j, 0)
                Y = Workbooks(fichier_librairie).Worksheets("propagation").Range("fail_safe_mode").Offset(j, 0)
                If A = X Then
                    B = Y
                    Workbooks(fichier_propagation).Worksheets("CECILIA x VIR").Cells(i, 7) = B
                    GoTo suite
                End If
                j = j + 1
            Wend
    suite:
            i = i + 1
        Wend
     
    End Sub
    Mon fichier fichier_librairie correspond à ton fichier AB.
    Mon fichier fichier_propagation correspond à ton fichier XY.

    Le code avant les boucles permet d'ouvrir un exploreur pour aller chercher le fichier_propagation et l'ouvrir.

    Mes tableau font chacun environ 5000 lignes.

    La macro est très longue, elle prend environ 4 minutes avant de retourner le résultat.

    Qu'en penses tu ?

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Oui c'est normal, pour ça que pour ce genre d'opération, il vaut mieux utiliser la méthode "Find" qui est bcp plus rapide

    Je n'ai pas épluché ton code mais un premier petit truc, si tu déclares les variables comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim A, B, X, Y As String
    Cela correspond à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim A As Variant, B As Variant, X As Variant, Y As String
    Si A, B, X et Y doivent être de type String, il faut alors le préciser pour chaque variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim A As String, B As String, X As String, Y As String

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 170
    Par défaut
    Je change de suite mes déclérations.

    je vais essayer de comprendre le .find mais c'est pas gagné.

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

Discussions similaires

  1. base de donnée sous excel: effacer les données
    Par eseb777 dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 03/05/2007, 09h32
  2. [VBA] comparaison de tableau sous excel
    Par Bertrand28 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/03/2007, 14h02
  3. Données sous Excel - Appli sous Access
    Par Invité dans le forum Access
    Réponses: 5
    Dernier message: 13/12/2006, 15h38
  4. Dépendance de données sous Excel
    Par Sami Xite dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2006, 10h24

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