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 :

Recherche sur deux tableau: algo ou fonction [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut Recherche sur deux tableau: algo ou fonction
    Chères amies, chers amis du forum

    Je dois verifier les occurrence manquante sur un vecteur de string vs un autre vecteurs, existe il une fonction dans VBA qui fais cela?

    Sinon j'ai penser a un algo avec recherche avec un flag.

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Un fichier exemple peut-être ?

    Hervé.

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    Bonjour,

    avant le fichier, déjà une présentation claire & exhaustive sans recourir à un décodeur ! …


  4. #4
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    C'est vrai j'ai été un peu sec:

    soit deux tableaux, un tableau de référence

    tab1:

    1
    2
    3

    et un que l'on doit tester:

    1
    2
    3
    4
    5

    Ma macro doit m'afficher 4 & 5 c-à-d les valeurs manquantes dans tableau de référence qui existe dans le tableau a tester.

    Alors j'ai codé ceci:

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    Sub checkmissingcode()
     
    Dim flag As Boolean
    Dim Testab() As String
    Dim Testab2() As String
    Dim i, j, k, intRow, intRow2 As Long
     
     
    intRow = Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Count - 1
    intRow2 = Range(Cells(1, 3), Cells(1, 3).End(xlDown)).Count - 1
     
    ReDim Testab(intRow)  'Tableau de référence
    ReDim Testab2(intRow2)  'Tableau à verifier
     
    'Initialisation du tableau de référence
    For i = 0 To intRow
        Testab(i) = Cells(i + 1, 2).Value
    Next i
     
    'Initialisation du tableau à tester
    For i = 0 To intRow2
        Testab2(i) = Cells(i + 1, 3).Value
    Next i
     
    'recherche des éléments manquants du tableau de référence dans le tableau à tester
    k = 0
    For i = 0 To intRow2
        flag = False
        j = 0
    'tant que le drapeau est bas et que je n'ai pas parcouru le tableau de référence
        While (flag = False And j < intRow)
    'si la valeur testé apparait dans le tableau de référence
    'on léve le drapeaux tableaux pour sortir de la boucle
            If Testab2(i) = Testab(j) Then
                flag = True
            End If
            j = j + 1
        Wend
     
    'si la valeur n'est pas apparue c-à-d que le drapeau est rester bas
    'la valeur n'existe pas dans le tableau de référence
    'puis je j'ajoute la valeurs trouver à la derniere ligne de mon tab de ref
    'pour eviter les doublons
     
        If flag = False And j = intRow Then
            Cells(1, 2).End(xlDown).Offset(1, 0).Value = Testab2(i)
            Cells(1, 2).Select
            intRow = intRow + 1
            ReDim Preserve Testab(intRow)
            Testab(intRow) = Testab2(i)
        End If
     
    Next i
     
    End Sub
    Ce code est plutot rapide (sur une colonne a tester de 56000 ligne et une colonne de ref 250 environ une seconde a vue de nez) et fonctionne bien, cepandant j'aurais aimé savoir si il n'ya pas moyen d'avoir mieux en faisant appel a des fonction interne a VBA, ou si vous avez un algo plus sympa que celui là a me proposer.

    Enfin j'ai un petit souci certaine valeurs apparaissent deux fois dans le résultats final par exemple:

    tabref:

    1
    2
    3

    et tabtest:

    1
    2
    3
    4
    4
    5
    5
    5

    mon algo me retourne un tableau de 3 ligne avec 4,5 & 5. Ce n'est pas aléatoire car ce sont toujours les meme valeurs qui s'affiche en double ( et pas en triple).

    Merci

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Utiliser des variables tableaux est préconisé pour gagner du temps mais l'alimenter via une boucle en fait perdre !
    Et c'est inutile car une plage de cellules peut être directement affectée à une variable tableau …

    Deux méthodes possibles :
    soit utiliser les fonctions de feuille de calculs EQUIV (Match en VBA) et INDEX entre les variables tableaux
    soit utiliser des dictionnaires (objet Dictionary à consulter dans l'aide VBA intégrée) …
    La seconde est peut-être la plus technique mais a des chances d'être la plus rapide.

    Parmi tant d'autres sur le forum, exemple dans cette discussion d'utilisation d'un dictionnaire …

  6. #6
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci je vais étudier les solution proposé, cependant pour l'affectation des tableaux j'ai un souci:

    Si je reste sur une boucle pour alimenter mon tableaux je me retrouve avec un vecteur a une seule coordonnée par valeur:
    Nom : sans_t10.png
Affichages : 176
Taille : 45,3 Ko


    Si j'affecte directement le tableau via:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Testab() As Variant
    Testab = Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Value
    Là j'ai deux problème je n'arrive pas a déclarer un tableaux autre que variant (je souhaites ici declarer un tableau string) car j'ai une incompatibilité de type, et pour accéder a mes valeurs j'ai besoin de deux coordonné (l'abscisse est toujours egal à 1):

    Nom : sans_t11.png
Affichages : 220
Taille : 53,5 Ko

    Est ce que cela impact ma macro, comment faire pour declarer un tableau de string?

    Merci

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

Discussions similaires

  1. Jointure et Recherche sur deux tables
    Par fefe69 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/09/2009, 14h11
  2. utiliser la recherche sur deux matrices
    Par mjihanne dans le forum Excel
    Réponses: 2
    Dernier message: 24/07/2009, 12h36
  3. Recherche sur deux tables simultanément
    Par neojick dans le forum Requêtes
    Réponses: 5
    Dernier message: 05/11/2008, 11h55
  4. Une Recherche sur deux champs
    Par souminet dans le forum Débuter
    Réponses: 8
    Dernier message: 04/11/2008, 13h56
  5. Recherche sur deux tables
    Par Kanagawa dans le forum Débuter
    Réponses: 6
    Dernier message: 03/11/2008, 19h35

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