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 :

[VBA-E]Methode pour trouver une valeur qui apparait plusieur fois


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut [VBA-E]Methode pour trouver une valeur qui apparait plusieur fois
    hello,

    désolé pour le titre si ce n'est pas tres clair

    je cherche une methode pour faire ca :

    j'ai 2 colonnes et je veux trouver les elements de la colonne 1 qui ne sont pas dans la 2 (là c'est simple). Les elements de la colonne 1 se repetent (15 elements pour environ 1000 lignes) donc si dès qu'un element n'est pas trouvé je le stock, il y aura beaucoup de repetition et je voudrai ne voir qu'une fois les elements repetés.

    je pense aussi qu'il doit etre possible de gagner du temps de traitement si quand un element de la colonne 1 a deja ete trouvé dans la 2, eviter de faire à nouveau la recherche... mais je ne voit pas trop comment

    voilà j'ai des idées pour faire ca mais bon c'est tres moche alors je prefere pas les expliquer


    merci d'avance de vos reponses

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Citation Envoyé par ouskel'n'or
    N'empêche qu'en créant un tableau des éléments à trouver... tu pourrais passer de l'un au suivant dès qu'il a été trouvé et recommencer la recherche depuis la première ligne avec le suivant... N'empêche
    oue à la base jpensai sois stocker les données sur une feuille puis les effacer ou soit creer un tableau.

    jpige pas ton premier poste ouskel, tavai envie de te défouler? pourquoi un tel acharnement?

    donc pour toi le mieux est un tableau ya pas plus efficace?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    hm,

    j'ai fait ce code et je pense que ca ressemble assez à ta solution, non?

    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
     
    ' on initialise la valeur à false
    TrouveOk = False
    ' On ne s'occupe pas de la premiere ligne on commence à i=2
    j = 2
    ' on initialise k à 1
    k = 1
     
    ' On vérifie que les temps (priority, colonne L) sont connus
    For i = 2 To NombreDeLignesAComparer
     
      ' on regarde pour chaque valeur connue
      Do While (TrouveOk = False And j <= NombreDeLignes)
        If (Sheets("feuil1").Cells(i, 12) = Sheets("conversion_temps").Cells(j, 2)) Then
          TrouveOk = True
        ElseIf j = NombreDeLignes Then 
          TabTemp(k) = Sheets("feuil1").Cells(i, 12)
          k = k + 1
        End If
        j = j + 1
      Loop
      TrouveOk = False
      j = 2
    Next
     
    For i = 0 To k
      MsgBox TabTemp(i)
    Next
    j'ai un souci 'l'indice n'appartient pas à la selection' là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TabTemp(k) = Sheets("feuil1").Cells(i, 12)
    je comprend pas pourquoi ! ca vient du " TabTemp(k) = " car si je met = 1 par exemple, j'ai toujours l'erreur

    ptet que je declare mal mon tableau (mais je pense pas) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim TabTemp(1 To 100) As Variant
    à la base j'avais mis de type String mais bon rien n'y change

    Par la suite je vais essayer de faire un talbeau que je redimensionne, je sais pas trop comment mais j'ai deja vu qu'on pouvais (pour l'instant j'essaye la methode 'simple')

    Sinon, ça t'apprendra à dire des méchanceries au plus gentil de tes supporters
    Je vois pas DU TOUT de quoi tu parles !

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    hmmm c'est bon pour mon erreur (je suis trop nul )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      If (Sheets("feuil1").Cells(i, 12) = Sheets("conversion_temps").Cells(j, 2))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If (Sheets("feuil1").Cells(i, 12) = Sheets("conversion_temps").Cells(j, 1))
    le nombre à trouver etait dans la colonne 1 et comme il trouvait jamais alors il l'ecrivait dans le tableau et comme mon tableau eait de taille 100 et que j'ai beaucoup plus de lignes alors il etait trop petit d'où l'erreur

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    hm juste une petite question...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    k = k + 1
    Redim preserve LeTableau(k)
    TabTemp(k) = Sheets("feuil1").Cells(i, 12)
    j'initialise mon k à 0 alors ?

    Désolé mais j'ai jamais utilisé ces tableaux

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    ok ca roule j'aurai juste besoin d'un dernier coup de pouce

    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
     
    'on initialise les valeurs à false
        TrouveOk = False
        AjouterOk = False
        'On ne s'occupe pas de la premiere ligne on commence à i=2
        j = 2
        'on initialise k à 0
        k = 0
     
        'On vérifie que les temps (priority, colonne L) sont connus
        For i = 2 To NombreDeLignesAComparer
     
            'on regarde pour chaque valeur connue
            Do While (TrouveOk = False And j <= NombreDeLignes)
                If (Sheets("feuil1").Cells(i, 12) = Sheets("conversion_temps").Cells(j, 1)) Then
                    TrouveOk = True
                ElseIf j = NombreDeLignes Then 
                  For Each x In TabTemp
                      If (TabTemp(x) = Sheets("feuil1").Cells(i, 12)) Then
                          AjouterOk = True
                      End If
                  Next
                    'si la valeur n'y etait pas on l'ajoute
                    If AjouterOk = True Then
                        k = k + 1
                        ReDim Preserve TabTemp(k)
                        TabTemp(k) = Sheets("feuil1").Cells(i, 12)
                    End If
                End If
                j = j + 1
            Loop
            TrouveOk = False
            AjouterOk = False
            j = 2
        Next
        For i = 1 To k
            MsgBox TabTemp(i)
        Next
    le code mis en gras ne fonctionne pas 'boucle for non initialisée' ou une erreur de ce genre... à la base j'avais mis for x=1 to k mais ca rentrait jamais dedans car k vaut 0 et si je met x à 0 il me dit que l'element tabtemp(0) n'existe pas..

    cette boucle sert à verifier si l'element est deja dans le tableau. Si il ne l'est pas on l'ajoute...

    une idée pour ecrire ca? (meme completement différente de la mienne)

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

Discussions similaires

  1. Réponses: 22
    Dernier message: 13/09/2013, 14h20
  2. [XL-2010] Somme à effectuer pour trouver une valeur
    Par dark_sidious dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/05/2013, 15h39
  3. Réponses: 1
    Dernier message: 10/11/2012, 19h28
  4. Réponses: 4
    Dernier message: 03/12/2009, 11h50
  5. Trouver une valeur qui n'est pas dans un champ
    Par eric41 dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/05/2006, 16h48

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