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 :

Probleme dans une boucle multiple


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 71
    Par défaut Probleme dans une boucle multiple
    Hello everyone,
    J'ai encore un challenge pour vous messieurs/dames. Tout d'abord merci à ce site et aux personnes qui y participent. J'ai bcp apris grace à vous...
    Voici mon soucis:

    J'ai une valeur dans une cellule. C'est du text et c'est un nom. J'ai pour le moment créé une macro qui cherche dans une liste de nom (qui se trouve dans une autre feuille) cette mm valeur. Une fois le nom trouvé, elle me "copie" des données associées à cette valeur dans la feuille originelle. Le pb que je rencontre est que la macro s'arrete à la première fois qu'elle trouve le nom. Disons que dans ma liste de donnée, ce nom apparait 10 fois et la macro ne le trouve qu'une fois. Voici mon code:


    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
     
    Code :
     
    Sub Recherche()
     
    Dim i As Integer
    Dim j As Integer
    Dim wsB As Worksheet   
    Dim wsK As Worksheet    
    Dim Valeur As String
    Dim wb As Workbook
    Dim nbre As Double
     
    Set wsB = ThisWorkbook.Worksheets("Graph")
    Set wsK = ThisWorkbook.Worksheets("A")
    Valeur = wsB.Range("AliResearch").Value
     
    Cb = wsK.Range("Date_de_dénouementA").Column
    nbre = wsK.Cells(Rows.Count, Cb).End(xlUp).Row
     
    If Valeur <> "" Then
        For i = wsK.Cells.Find("Date1", lookat:=xlWhole).Column To nbre
            For j = wsB.Cells.Find("Date2", lookat:=xlWhole).Row + 1 To 15
                If wsK.Cells(i, 4).Value = Valeur Then
     
                        wsB.Cells(j, 7).Value = wsK.Cells(i, 2).Value
                        wsB.Cells(j, 8).Value = wsK.Cells(i, 4).Value
                        wsB.Cells(j, 9).Value = wsK.Cells(i, 5).Value
                        wsB.Cells(j, 10).Value = wsK.Cells(i, 7).Value
                End If
            Next j
        Next i
    End If
    End Sub
    Je ne sais pas si c'est très clair sans le fichier mais je tente le coup.

    Aussi, j'ai un autre pb mais peut etre que l'on pourra en discuter après...est il possible de faire la mm recherche avec un nom approximatif?

    Merci d'avance

    Cordialement

    NY

  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,

    Il faudrait que tu définisse ta plage de recherche ensuite, tu la parcour avec Find et Findnext à la recherche des noms puis tu défini la ligne ou tu veux coller les données correspondantes en l'incrémentant à chaque occurence du nom. Je te mets un exemple mais je ne me suis pas cassé la tête à recréer ton classeur donc, voilà un début de piste à adapter (pas testé).
    Pour la recherche avec une partie du nom en début, tu fait Valeur & "*", pour une partie du nom à la fin tu inverse "*" & Valeur et pour le milieu "*" & Valeur & "*" (voir aussi avec Like) :
    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
     
    Sub Recherche()
     
    Dim wsB As Worksheet
    Dim wsK As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Valeur As String
    Dim Cb As Integer
    Dim Adr As String
    Dim J As Integer
     
        Valeur = wsB.Range("AliResearch").Value
     
        Cb = wsK.Range("Date_de_dénouementA").Column
     
        Set Plage = wsK.Range(Cells(1, 1), Cells(Rows.Count, Cb).End(xlUp))
     
        Set Cel = Plage.Find(Valeur & "*", , xlValues)
     
        If Not Cel Is Nothing Then
     
            Adr = Cel.Address
     
            Do
                'ici, à partir de la 1ère ligne
                J = J + 1
     
                wsB.Cells(J, 7).Value = Cel.Offset(0, 2).Value
                wsB.Cells(J, 8).Value = Cel.Offset(0, 4).Value
                wsB.Cells(J, 9).Value = Cel.Offset(0, 5).Value
                wsB.Cells(J, 10).Value = Cel.Offset(0, 7).Value
     
                Set Cel = Plage.FindNext(Cel)
     
            Loop While Adr <> Cel.Address
     
        End If
     
    End Sub

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

Discussions similaires

  1. probleme dans une boucle
    Par youhibadelphi dans le forum Débuter
    Réponses: 30
    Dernier message: 20/12/2009, 12h11
  2. probleme dans une boucle
    Par moinegourmand dans le forum Débuter
    Réponses: 6
    Dernier message: 17/01/2009, 08h54
  3. probleme dans une boucle do while
    Par oldscrout dans le forum Débuter
    Réponses: 2
    Dernier message: 30/12/2008, 17h02
  4. Probleme dans une boucle while pour remplir une JTable
    Par sky88 dans le forum Composants
    Réponses: 3
    Dernier message: 27/03/2008, 14h01
  5. Probleme dans une boucle
    Par Baya44 dans le forum VBA Access
    Réponses: 19
    Dernier message: 13/03/2007, 12h31

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