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 :

Comparer 2 tables sans boucle


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut Comparer 2 tables sans boucle
    Bonjour,

    existe-t-il une instruction pour pouvoir comparer en 1 passage 2 tables dynamiques ayant le même nombre d'élements du même type ?

    On peut rêver

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    Salut,

    qaund tu parles de comparer, ca serait en terme de contenu, de structure, les deux mon capitaine ?

    Le plus efficace serait eventuellement une requete SQL sous Access

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Juste le contenu mon capitaine.

    Je fais sous excel un tri totalement variable de mes données avec un nombre de colonnes de tri variable aussi.

    Ensuite je veux tester les ruptures sur mes zones de matching qui sont là aussi variable.

    D'où mon utilisation de tables pour comparer les valeurs.

    Je ne suis pas très disposé à faire un sql pour si peu, alors qu'une boucle est vachement plus courte à mettre en oeuvre.

    J'ai besoin de ce tester pour générer une nouvelle clé pour ma DB en cas de rupture.

    Voici l'extrait de mon code, avec boucle
    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
     
            'Init Old Matching Values
            For off = 0 To UBound(TMatch)
                OVmatch(off) = Mysh.Range(TMatch(off) & lrow)
            Next off
     
            'init Event Nbr
            EventNbr = 1
     
           'Loop on data lines
            For lrow = Xls_File_First_Line To Mysh.Range("A65535").End(xlUp).Row
     
                'Init Current Matching values and compare with old
                Rupt = False
                For off = 0 To UBound(TMatch)
                    CVMatch(off) = Mysh.Range(TMatch(off) & lrow)
                    If CVMatch(off) <> OVmatch(off) Then
                        Rupt = True
                    End If
                    If Rupt Then
                        OVmatch(off) = CVMatch(off)
                    End If
                Next off
     
                'If rupture in matching Increment EventNbr
                If Rupt Then
                    EventNbr = EventNbr + 1
                End If
     
                'Store EventCode in
                Mysh.Range(Xls_File_Reference_Key & lrow) = Xls_Importing_Event_Prefix & Format(EventNbr, "0000")

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 656
    Points : 34 368
    Points
    34 368
    Par défaut
    Hum, en faisant une formule match sur la concatenation de tous tes champs de la table 1 vers la table 2 et vice versa ferait-elle l'affaire ?

  5. #5
    Membre actif
    Inscrit en
    Février 2008
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 208
    Points : 246
    Points
    246
    Par défaut
    Bonjour
    En transformant les tableaux en variable "texte" avec Join, on peut les comparer avec InStr :
    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
    Sub Compare_deux_tableaux()
        FlagId = 0
        Dim laliste1(10000)
        Dim laliste2(10000)
     
        For i = 1 To 10000
            laliste1(i) = "essai de comparaison de contenu de tableaux" & i
            laliste2(i) = "essai de comparaison de contenu de tableaux" & i
        Next i
     
        'laliste2(5) = "erreur" ' pour tester la comparaison
     
        liste1 = Join(laliste1, ",")
        liste2 = Join(laliste2, ",")
     
        If InStr(liste1, liste2) <> 0 Then FlagId = 1
        If FlagId = 1 Then Msg = "Listes identiques" Else Msg = "Listes différentes"
        MsgBox Msg
    End Sub
    à plus

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    merci à tous les 2.

    J'avais pensé à une solution de ce genre, mais je pense qu'elle ne fonctionnera pas si un des éléments du tableau est vide pour une entrée.

    je m'explique :

    Tableau 1 : AAA BBB C
    Tableau 2 : AAA BBBC

    Je crois qu'ici le join puis instr ne va trouver de différence.
    Alors dans ce cas, il faut trouver la longueur max de chaque éléments et générer des entrées de string à space de la longueur max pour les chaines vide pour forcer la comparaison globale correcte.

    Mais, cela devient un peu

    -----------Edit--------
    Je suis idiot. ca marche très bien gâce à ,.

    Mais j'ai quand même un problème.
    Quand je veux refaire split du résultat du join pour le remettre dans 1 des tables, ca calle avec "Type mismatch" (ligne en gras).

    Les 2 tables sont variant, CVM et OVM sont string. j'ai essayé tout en variant, ca plante aussi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
               'If rupture in matching Increment EventNbr and set old to currentr
                CVM = Join(CVMatch, "|")
                OVM = Join(OVmatch, "|")
                If InStr(CVM, OVM) = 0 Then    'Difference car pas trouvé
                    Rupt = True
                    OVmatch = Split(CVM, "|")  'Set old to current
                    EventNbr = EventNbr + 1
                End If
    Cela ne fonctionne qu'avec tout en String. J'aurais voulu garder mes tables en variant.

Discussions similaires

  1. "Comparer" un vecteur à une matrice sans boucle for
    Par nawellee dans le forum MATLAB
    Réponses: 2
    Dernier message: 27/04/2013, 20h55
  2. Comparer 2 tables sans checker chaque row
    Par BoOom dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 04/05/2006, 13h21
  3. [C#][VS2k5]Comparer 2 tables sans checker chaque row?
    Par BoOom dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/04/2006, 15h27
  4. exporter une table sans le nom de colonnes ?
    Par vuldos dans le forum Access
    Réponses: 13
    Dernier message: 11/10/2004, 19h56
  5. Lister le contenu d'une table sans connaitre ses champs
    Par Google.be dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 30/03/2004, 15h23

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