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 :

Combiner une boucle FOR + .FIND + VLOOKUP [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Par défaut Combiner une boucle FOR + .FIND + VLOOKUP
    Bonjour à tous et à toutes,

    C'est désespéré que je viens requérir votre aide. J'ai longuement cherché la réponse à ma question mais ne l'ai pas trouvé. Je m'excuse par avance si ce sujet existe déjà et a déjà été résolu.

    Mon fichier excel contient deux onglets, un "suivi" et un "visites". Le fichier visite contient des adresses mails en C et des dates en D. Le fichier suivi contient des mails en D. Les mail "suivi" sont forcément présents dans "visites".

    Je souhaite afficher dans l'onglet suivi la date correspondant au même mail dans l'onglet visites.

    Voici mon code 1 : Il fonctionne correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub macro1()
     
     Dim T As Variant
     T = Worksheets("visites").Cells(3, 3).Value
     
           Worksheets("Suivi").Cells.Find(What:=T, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Select
     
                 Selection.Offset(0, 1).Value = Application.WorksheetFunction.VLookup(T, Worksheets("visites").Range("D1:C20"), 2, faux)
     
    End Sub
    Voici le code que j'utilise pour automatiser cela pour que la recherche se fasse sur chaque mail de l'onglet visite :
    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 macro1()
     
     Sub macro1()
     
     Dim T As Variant 
     Dim K As Variant 
     
     For K = 2 To 15
     
     T = Worksheets("visites").Cells(K, 3).Value
     
            Worksheets("Suivi").Cells.Find(What:=T, After:=ActiveCell, LookIn:=xlValue, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Select
     
            Selection.Offset(0, 1).Value = Application.WorksheetFunction.VLookup(T, Worksheets("visites").Range("D1:C20"), 2, faux)
     
        Next K
     
    End Sub
    Malheureusement ce dernier ne fonctionne pas correctement et j'ignore pourquoi. le message suivant s'affiche : "erreur d'execution 9, L'indice n'appartient pas à la sélection".

    Pouvez-vous m'aider ?

    Merci par avance !

  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,

    Malheureusement ce dernier ne fonctionne pas correctement et j'ignore pourquoi. le message suivant s'affiche : "erreur d'execution 9, L'indice n'appartient pas à la sélection".
    tout simplement parce que la valeur n'est pas trouvée et que tu fais un Select alors que Find retourne Nothing ! Il te faut d'abords tester si un Range est retourné pour ensuite travailler avec (dans ton cas c'est "Select")
    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
     
    Dim Cel As Range
     
    Set Cel = Worksheets("Suivi").Cells.Find(What:=T, After:=ActiveCell, LookIn:=xlValue, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False)
    If Cel Is Nothing Then
     
        MsgBox "Valeur pas trouvée !"
        Exit For
     
    End If
     
    'ici la suite de ton code si valeur trouvée...
    '...
    '...

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Par défaut
    Bonjour Theze,

    Merci beaucoup pour ta réponse et pour ta réactivité ! Je ne comprends pas ta réponse, j'ai surement mal du insérer ton bout de code... Peux tu me préciser ou l'insérer exactement stp ?

  4. #4
    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
    Re,

    J'ai eu un peu de peine à trouver d'où venait l'erreur, c'est la constante qui était mal orthographiée : "Find(T, , xlValues, xlPart)" et non "xlValue" (manquait le "s")
    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
     
    Sub macro1()
     
        Dim Cel As Range
        Dim T
        Dim K As Integer
     
        For K = 2 To 15
     
            T = Worksheets("visites").Cells(K, 3).Value
     
            Set Cel = Worksheets("Suivi").Cells.Find(T, , xlValues, xlPart)
     
            If Not Cel Is Nothing Then
     
                Cel.Offset(0, 1).Value = Application.VLookup(T, Worksheets("visites").Range("C1:D20"), 2, False)
     
            End If
     
        Next K
     
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2016
    Messages : 3
    Par défaut
    Impeccable, vraiment super, merci beaucoup !!

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

Discussions similaires

  1. Shell - Erreur dans une boucle for
    Par claralavraie dans le forum Linux
    Réponses: 4
    Dernier message: 11/01/2006, 14h45
  2. : remplir des zones de texte avec une boucle For
    Par Haro_GSD dans le forum Access
    Réponses: 3
    Dernier message: 20/09/2005, 22h23
  3. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 13h22
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 21h05
  5. Réponses: 3
    Dernier message: 06/07/2004, 11h21

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