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 :

RechercheV par macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut RechercheV par macro
    Bonjour, j'ai un problème lorsque j'exécute ma recherche V par macro.

    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
     
     
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     Dim Ws1, Ws2 As Worksheet
     Dim m, p, t As Integer
     
     Set Ws1 = ThisWorkbook.Worksheets("contrats resp. tarifé")
        Set D = Nothing
            'je recherche la valeur sur la ligne des entêtes
            Set D = Ws1.Rows(1).Find("SIREN_MAITRE_RPR", , xlValues, xlWhole)
            'Je récupère ici dans p le numéro de la colonne si la valeur existe bien
            If Not D Is Nothing Then p = D.Column
            'denomcol = Left$(Cells(1, p).Address(0, 0), (p < 27) + 2)
     
     Set Ws2 = ThisWorkbook.Worksheets("en cours liste complète réseau")
    'Nbl compte le nombre de lignes total
            Nbl = Ws2.Range("A1").CurrentRegion.Rows.Count
            Set C = Nothing
           'je recherche la valeur sur la ligne des entêtes
            Set C = Ws2.Rows(1).Find("Siren", , xlValues, xlWhole)
             'Je récupère ici dans p le numéro de la colonne si la valeur existe bien
            t = C.Column
           'j'insère une colonne avant la colonne trouvée
           If Not C Is Nothing Then Ws2.Columns(t).Select
            Selection.EntireColumn.Insert
         'je nomme l'entête de la nouvelle colonne insérée
         Ws2.Cells(1, C.Column - 1).Value = "Recherche_v"
         'j'initialise m qui correspond à la différence entre p et t pour pouvoir faire ma recherche v (m correspond à 17)
     
         m = p - t
         MsgBox m
         Ws2.Cells(2, C.Column - 1).Select
         ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[1],'contrats resp. tarifé'!C[m],1,FALSE)"
         Selection.AutoFill Destination:=Range(Cells(2, t), Cells(Nbl, t))
     
    End Sub
    je procède de cette manière parce que d'autres colonnes pourraient être ajouter plutard dans le fichier, ainsi utiliser le nom d'une colonne ou un numéro fixe dans ma formule forcerait un jour ou l'autre le résultat. Le problème viendrait peut être du fait que j'utilise "m" dans la formule. Mais que Pourrais je faire d'autre pour obtenir mon résultat ?


    Merci d'avance pour vos réponses

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Sans répondre totalement je pense à votre question, vous pouvez utiliser le MATCH (Excel anglais) pour trouver la position relative d'une cellule et ainsi, l'utiliser dans un VLOOKUP: ça vous permet par exemple d'utiliser le label de la colonne que vous voulez afficher, sans craindre un changement. Et vous pouvez utiliser les mêmes fonctions en VBA

    Nom : Capture.JPG
Affichages : 142
Taille : 79,8 Ko

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Merci pour votre réponse

    J'ai l'impression que vous n'avez pas bien compris mon problème !

    Je vois bien la fonction MATCH et je ne vois pas trop comment l'utiliser parce que j'ai besoin du numéro de la colonne qui se trouve dans un autre onglet. Lorsque je fais la rechercheV dans la feuille où je me trouve trouve, je dois donc soustraire les deux numéros de colonne pour être la bonne position. Comprenez-vous ?

    Cordialement

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Je vous ai écrit le formule en dur dans l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =VLOOKUP(I29,B29:F35,MATCH(I30, B29:F29,0), FALSE)
    Si vous voulez plus d'aide, pourriez-vous fournir un bout d'exemple?

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 345
    Par défaut
    Bonjour, Merci pour votre aide, désolé de ne répondre que maintenant, j'espère que vous serez toujours disponible pour m'aider ! Disons qu'en gros pour résoudre mon problème, j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[1],'contrats resp. tarifé'!C[17],1,FALSE)"
           Selection.AutoFill Destination:=Range(Cells(2, t), Cells(Nbl, t))
    Alors que j'aimerais avoir un entier qui est recalculé à chaque fois en fonction des positions des colonnes, de manière à ce que la rechercheV soit toujours faite sur la bonne colonne même si les positions des colonnes changes (ps : la feuille où je fais la rechercheV est différente de la feuille où se trouve la plage de données) que dans mon code j'ai appelé m, donc ça :

    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
    'je prends le numéro de la colonne où se trouve la plage de données dans la feuille Ws1
    Set D = Ws1.Rows(1).Find("SIREN_MAITRE_RPR", , xlValues, xlWhole)
            If Not D Is Nothing Then p = D.Column
     
    'je prends le numéro de la colonne où je fais la rechercheV dans la feuille Ws2
    Set C = Ws2.Rows(1).Find("Siren", , xlValues, xlWhole)
            If Not C Is Nothing Then t = C.Column
     
      Selection.EntireColumn.Insert
         Ws2.Cells(1, t).Value = "Recherche_v"
    'je calcule la différence entre les deux colonnes avec m de manière à toujours renvoyer la bonne position de la plage de données.
         m = p - t
     
     Ws2.Cells(2, C.Column - 1).Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[1],'contrats resp. tarifé'!C[m],1,FALSE)"
           Selection.AutoFill Destination:=Range(Cells(2, t), Cells(Nbl, t))
    Le problème est que VBA n'accepte pas cela, je suppose que c'est à cause du m, que dois-je utiliser pour que le "m" fonctionne dans la formule de RechercheV ?

    Cordialement

  6. #6
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    Bonjour,

    je n'ai pas tout regardé en détails mais si l'idée est de mettre une variable dans une chaine de caractère, alors il faut proceder comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[1],'contrats resp. tarifé'!C[" & m & "],1,FALSE)"

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

Discussions similaires

  1. Recherchev par macro.
    Par jose.carreira dans le forum Excel
    Réponses: 1
    Dernier message: 20/09/2014, 08h31
  2. [XL-2003] Difficultés attribution besoins (Concatenation et recherchev par macro)
    Par ivanG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/07/2014, 09h32
  3. [XL-2010] RechercheV par macro
    Par illight dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/10/2013, 14h42
  4. [VBA-E] Problème pour enregistrer en csv (; et non ,) par macro
    Par bounette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/12/2005, 09h34
  5. Excel:probleme pour transformer du texte en nombre par macro
    Par pcheval dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/11/2005, 22h18

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