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 recherchev + rechercheh


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut VBA recherchev + rechercheh
    Bonjour à tous,

    Comme intitulé, j'ai 2 listes. Je recherche les valeurs de la liste 1 (feuille "Historique") dans la liste 2 (feuille "Plan"). Une fois trouvé en vertical, je souhaite chercher en horizontal, la valeur de la 1ère colonne non-vide (colonne V à AK). Le but final est un copier-coller classique.

    Voici mon code, qui ne marche pas evidemment
    Il est lourd je pense, mais faut bien commencer !

    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
    Sub date_départ_promo_par_magasin()
     
    Call annule_filtre
     
    Dim i, j, t As Integer
     
    i = 3
    j = 2
    t = 22
     
    While Sheets("Historique Etat 60").Cells(i, 3) <> ""
     
         If Sheets("PLAN").Cells(j, 1).Value = Sheets("Historique Etat 60").Cells(i, 3).Value Then
     
            For k = 1 To 16
     
              If Sheets("PLAN").Cells(j, t) <> "" Then
     
                Sheets("Historique Etat 60").Cells(i, 8) = Sheets("PLAN").Cells(1, t).Value
     
                Exit For
     
               Else: t = t + 1
     
              End If
     
            Next k
     
          t = 22
     
         Else: j = j + 1
     
         End If
     
      i = i + 1
      j = 2
    Wend
    Merci d'avance pour toute aide !
    Ci-joint le fichier
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    À quoi sert la boucle
    k n'est utilisé à nulle part...(?)

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Bonjour,

    La boucle For devait répéter le test en horizontal, sur les 16 colonnes à partir de V

    En fin de compte, en 1er je recherche ma valeur dans chaque ligne
    Quand je l'ai trouvé, je recherche la 1ère colonne non-vide de cette ligne, à partir de V jusqu'à AK. Donc sur 16 colonnes, ce qui donne la boucle For de 1 à 16.

    Pensez-vous que cette approche est viable ?

  4. #4
    Membre Expert Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    1 671
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 671
    Par défaut
    Ne pouvez-vous pas combiner les 2 lookup en un seul ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =HLOOKUP(VLOOKUP(x;myAtrea1;step;FALSE);myArea2;step;FALSE)
    Utiliser le résultat du Vlookup pour lancer le Hlookup; vous éviterez ainsi la complexité des boucles en vba!

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    L'idée des HLookup et VLookup imbriqués pourrait peut-être faire l'affaire, mais si on continue avec ton idée, tu pourrait utiliser le k
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            For k = 0 To 15 
                If Sheets("PLAN").Cells(j, t + k) <> "" Then
                    Sheets("Historique Etat 60").Cells(i, 8) = Sheets("PLAN").Cells(1, t + k).Value
                    Exit For
                End If
            Next k

  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Juillet 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2017
    Messages : 7
    Par défaut
    Merci pour vos réponses.

    Je glisse ci-joint un exemple pour mieux illustrer ma demande
    Je souhaite donc que la macro vienne remplir la feuille 1 avec chaque valeur correspondante en feuille 2

    Merci pour tout aide
    Fichiers attachés Fichiers attachés

  7. #7
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    A mon avis, la RechercheV Find + un Range.End(xlToRight), devrait suffire, si c'est pour trouver la 1è valeur non vide
    … puis après un copier-coller …

    Edit :
    Une fois trouvé en vertical, je souhaite chercher en horizontal, la valeur de la 1ère colonne non-vide (colonne V à AK)
    Y at-il des valeurs après la colonne AK ?

    Sinon avec le Find (Sans la déclaration pour le Find => façon inhabituel de faire ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Exemple()
    Dim DLF1&, DLF2&
        With Feuil1
            DLF1 = .Cells(Rows.Count, 1).End(xlUp).Row
            DLF2 = Feuil2.Cells(Rows.Count, 1).End(xlUp).Row
            For i = 2 To DLF1
                    On Error Resume Next
               .Cells(i, 2).Value = Feuil2.Range("A2:A" & DLF2).Find(.Cells(i, 1).Value, , xlValues).Offset(, 20).End(xlToRight).Value
                    On Error GoTo 0
            Next
        End With
    End Sub
    Le Find dans les règles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Exemple2()
    Dim Rg As Range, DLF1&, DLF2&
        With Feuil1
            DLF1 = .Cells(Rows.Count, 1).End(xlUp).Row
            DLF2 = Feuil2.Cells(Rows.Count, 1).End(xlUp).Row
            For i = 2 To DLF1
                Set Rg = Feuil2.Range("A2:A" & DLF2).Find(What:=.Cells(i, 1).Value, LookIn:=xlValues)
                If Not Rg Is Nothing Then
                    .Cells(i, 2).Value = Rg.Offset(, 20).End(xlToRight).Value
                End If
            Next
        End With
        Set Rg = Nothing
    End Sub
    A adapter bien sûr
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. Vlookup VBA / RECHERCHEV
    Par JimJames23 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/04/2011, 11h27
  2. vba recherchev à faire
    Par pepsister dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/08/2010, 16h27
  3. [XL-2003] RechercheV RechercheH Index/Equiv
    Par kev24gones dans le forum Excel
    Réponses: 5
    Dernier message: 23/02/2010, 09h57
  4. rechercheV, rechercheH, Equiv, index ?
    Par ericdev67 dans le forum Excel
    Réponses: 6
    Dernier message: 11/12/2008, 20h20
  5. Réponses: 5
    Dernier message: 05/02/2008, 12h27

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