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 en VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut Recherchev en VBA
    Bonjour à tous !

    J'ai créé un formulaire qui demande à un étudiant son numéro d'étudiant et qui s'affiche ensuite sur une feuille en L3. Cependant, dans ce même formulaire, doivent apparaitre automatiquement le nom et prénom de l'étudiant. Sachant que j'ai créé un tableau dans la même feuille où sont renseignés à la fois le numéro étudiant, le nom et le prénom.
    Je me suis dit qu'il était peut-être plus simple si je commençais par faire inscrire le nom et prénom dans la feuille pour ensuite les mettre dans le formulaire. (Ce raisonnement est-il vraiment plus simple ou est-ce que je me complique la tâche pour rien ?). J'ai utilisé la fonction Evaluate pour cela. J'ai pu arriver à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim NumeroEtudiant As Long
    Dim NomEtudiant As String
    Dim PrenomEtudiant As String
     
    NumeroEtudiant = L3
    NomEtudiant = Evaluate("VLOOKUP(" & NumeroEtudiant & ", Plage_Donnees, MATCH (""Nom"", Plage_Intitules,0))")
    PrenomEtudiant = Evaluate("VLOOKUP(" & NumeroEtudiant & ", Plage_Donnees, MATCH (""Prenom"", Plage_Intitules,0))")
    Range("Recapitulatif!L3").Value = NomEtudiant
    Range("Recapitulatif!L4").Value = PrenomEtudiant
    Mais le nom et prénom de l'étudiant ne s'affichent pas du tout...
    Ai-je fait une erreur ? Oublié quelque chose ?

    Merci d'avance pour votre aide !

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    Salut,

    là tu utilises des formules, le mieux reste de les manipuler en tant que telle en VBA

    D'autre part L3 n'est initialisé nulle part, fais attention

    de plus, tu fais une erreur de boucle (L3 pointe sur L3 de façon indirecte, ce n'est pas possible)


    corrige toutes ces petites erreurs avant de pouvoir faire tourner le code correctement
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    Merci beaucoup !

    Effectivement, j'ai fait plein d'erreurs !

    Par contre, je ne comprends pas bien ce que tu entends par :

    Citation Envoyé par jpcheck Voir le message
    là tu utilises des formules, le mieux reste de les manipuler en tant que telle en VBA

    Désolée, je débute en VBA...

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 684
    Par défaut
    Pour l'instant tu passes par un Evaluate, mais ce n'est pas la bonne fonction à utiliser. Ici il faut mieux partir sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range().Formula = "=VLOOKUP(...)"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel (3e édition)
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre chevronné
    Avatar de bifconsult
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 189
    Par défaut
    Le dernier exemple permet d'insérer une formule Excel dans une cellule.

    Pour avoir le résultat directement dans le code, on peut aussi utiliser:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheetfunction.Vlookup(...)

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    Bon, ça ne marche toujours pas... Les données que je cherche n'apparaissent toujours pas en L3 et L4...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim NumeroEtudiant As Long
    Dim NomEtudiant As String
    Dim PrenomEtudiant As String
     
    NumeroEtudiant = L2
    Range("Recapitulatif!L3").Formula = " = VLOOKUP(" & NumeroEtudiant & ", Plage_Donnees, MATCH (""Nom"", Plage_Intitules,0))"
    Range("Recapitulatif!L4").Formula = " = VLOOKUP(" & NumeroEtudiant & ", Plage_Donnees, MATCH (""Prenom"", Plage_Intitules,0))"
    Mon objectif étant aussi de faire apparaitre ces données dans 2 labels du UserForm demandant le numéro étudiant, est-il possible (ou plus simple) de les faire apparaitre directement dans ces labels ?

    Merci par avance !

    Je continue de me creuser la tête !

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut la methode find et find next
    bonjour

    en vba il y a la methode find et find next qui fait ca tres bien

    tape sur "F1"!!! tu a un exemple plus que parlant

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    Bonsoir,

    Merci pour votre réponse, mais la méthode find ne permet-elle pas juste de trouver si la donnée qu'on recherche est présente ? Je n'arrive pas à appliquer cette méthode à mon problème.

    Je cherche à vérifier qu'un numéro en particulier est bien présent dans un tableau et à ce que ce numéro me renvoie un nom et un prénom qui lui sont associés...

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je pense avec ton L2 tu essaies d'écrire la cellule L2

    Essaies ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Worksheets("Recapitulatif")
        NumeroEtudiant = .Range("L2")
        .Range("L3").Formula = "=VLOOKUP(" & NumeroEtudiant & ",Plage_Donnees,MATCH(""Nom"",Plage_Intitules,0))"
        .Range("L4").Formula = "=VLOOKUP(" & NumeroEtudiant & ",Plage_Donnees,MATCH(""Prenom"",Plage_Intitules,0))"
    End With
    PS, dans tes formules, comme tu les as écrites, tu as plusieurs espaces superflus

  10. #10
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir à tou(te)s, Boucledor99
    En reprenant la proposition de patricktoulon
    en vba il y a la methode find et find next qui fait ca tres bien
    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
    Sub rch_etud()
    Dim NumeroEtudiant As String
    Dim Etudiant As Range
    Dim NomEtudiant As String
    Dim PrenomEtudiant As String
    Dim Plage_Donnees As Range
    Dim derlg As Long
    NumeroEtudiant = InputBox("SAISIR NUMERO ETUDIANT")
    With Sheets("feuil1") 'à changer par nom de ta feuille
      derlg = .Range("L" & .Rows.Count).End(xlUp).Row 'trouve ta derniere cellule
      Set Plage_Donnees = .Range("L2:L" & derlg) 'si tes numéros commencent en L2
      Set Etudiant = Plage_Donnees.Find(NumeroEtudiant, .Range("L" & derlg))
      'si tes noms sont en M et les prénoms en N
      If Not Etudiant Is Nothing Then
        NomEtudiant = .Range("M" & Etudiant.Row) 'à adapter à tes besoins
        PrenomEtudiant = .Range("N" & Etudiant.Row) 'à adapter à tes besoins
        MsgBox NomEtudiant & " " & PrenomEtudiant 'à adapter à tes besoins
      End If
    End With
    End Sub
    Tu n'as qu'à adapter ce code en remplaçant par les bonnes plages et insérer le résultat ou tu veux

    PS: j'ai fait le code à main levée sans vérifications, donc oublis possibles
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour a tou(s/tes)

    l'exemple de casefayere est exactement ce que je voulais dire
    maintenant
    il y a plusieur facon d'ecrire
    on peu utiliser le row de la celulle trouvée comme l'exemple de casefayere
    ou tout simplement utiliser le "offset " de la celule trouvée
    exemple pour le code "L2"
    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
    Sub trucmachin()
    'exemple si le nom est en "M" et le prenom en "N" et les codes en "L"
    Dim nom As String, prenom As String
    Dim code_etudiant As String
    code_etudiant = "L2"
    With Sheets(1).Range("L2:L" & Rows.Count)
    Set c = .Find(code_etudiant, LookIn:=xlValues)
        If Not c Is Nothing Then
     nom = c.Offset(0, 1).Value
    prenom = c.Offset(0, 2).Value
    End If
    End With
    'on affiche le resultat dans un message
    MsgBox code_etudiant & vbCrLf & nom & "  " & prenom
     
    End Sub
    Voila maintenant la methode "find " a moins de secret pour toi


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    Bonjour !

    Merci beaucoup pour toutes ces réponses, c'est gentil de passer du temps sur mon problème ! J'ai ENFIN réussi
    Enfin juste un dernier souci : j'ai l'impression que cela ne marche que pour un numéro étudiant en particulier et pas pour les autres...

    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
    Private Sub Tb_NumEtudiant_Change()
    'le numéro étudiant écrit dans le 2e formulaire s'inscrit dans la feuille "Recapitulatif" en L2
    Range("L3").ClearContents
    Range("L4").ClearContents
    Range("Recapitulatif!L2") = Tb_NumEtudiant
     
    Dim Nom As String
    Dim Prenom As String
    Dim code_etudiant As Integer
    With Worksheets("Recapitulatif")
    code_etudiant = L2
    With Sheets(3).Range("F2:F" & Rows.Count)
    Set c = .Find(code_etudiant, LookIn:=xlValues)
        If Not c Is Nothing Then
    Nom = c.Offset(0, -5).Value
    Prenom = c.Offset(0, -4).Value
    Range("Recapitulatif!L3").Value = Nom
    Range("Recapitulatif!L4").Value = Prenom
    End If
    End With
    End With
    End Sub

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re et encore re


    je vois tu a un peu compris la méthode

    maintenant pour rechercher un autre nom il te suffit de changer le texte dans ton((("Tb_NumEtudiant"))) si je ne me trompe pas

    maintenant ça n'est pas la meilleure façon de traiter la recherche en utilisant l'évènement change du textbox car a chaque caractère soit chaque fois que tu tape une lettre ou autre la recherche se met en route

    je serais toi je prendrais un autre évènement !!!!!!

    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    J'ai créé un bouton de commande mise à jour
    Cependant, toujours le même souci : j'ai beau changer le numéro étudiant, effacer les données inscrites en L2, L3 et L4, ce sont toujours les mêmes noms et prénoms qui reviennent, alors que le numéro étudiant change bien... :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
    Private Sub CmdMAJ_Click()
    'le numéro étudiant écrit dans le 2e formulaire s'inscrit dans la feuille "Recapitulatif" en L2
    Range("Recapitulatif!L2").ClearContents
    Range("Recapitulatif!L3").ClearContents
    Range("Recapitulatif!L4").ClearContents
    Range("Recapitulatif!L2") = Tb_NumEtudiant
     
    Dim Nom As String
    Dim Prenom As String
    Dim code_etudiant As Integer
    With Worksheets("Recapitulatif")
    code_etudiant = L2
    With Sheets(3).Range("F2:F" & Rows.Count)
    Set c = .Find(code_etudiant, LookIn:=xlValues)
        If Not c Is Nothing Then
    Nom = c.Offset(0, -5).Value
    Prenom = c.Offset(0, -4).Value
    Range("Recapitulatif!L3").Value = Nom
    Range("Recapitulatif!L4").Value = Prenom

  15. #15
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je l'avais pourtant indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    code_etudiant = .Range("L2")
    Ci-après proposition
    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
    Private Sub CmdMAJ_Click()
    Dim c As Range
     
    If Me.Tb_NumEtudiant <> "" Then
        With Worksheets("Recapitulatif")
            .Range("L2") = Me.Tb_NumEtudiant
            Set c = Sheets(3).Range("F:F").Find(Me.Tb_NumEtudiant, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                .Range("L3").Value = c.Offset(0, -5).Value
                .Range("L4").Value = c.Offset(0, -4).Value
                'ou bien remplace les 2 lignes ci-hauts par celle ci
                '.Range("L3:L4").Value = c.Offset(0, -5).Resize(1, 2).Value
                Set c = Nothing
            End If
        End With
    End If
    End Sub
    PS, adapte Sheets(3) par la feuille dans laquelle s'opère la recherche (ici tu as mis la 3ème feuille, si elle est déplacé, le recherche se fera toujours dans la 3ème feuille du classeur)

  16. #16
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    Cela marche parfaitement

    Merci à vous tous !

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

Discussions similaires

  1. [Toutes versions] Problème pour Coder la fonction vlookup/recherchev en VBA
    Par alexandra1989 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/02/2012, 20h54
  2. [XL-2007] Recherchev en Vba
    Par XceSs dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/10/2011, 12h30
  3. [XL-2002] Probleme sur la RechercheV en VBA
    Par beber_le_stagiaire dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 12/06/2009, 15h00
  4. recherchev en VBA
    Par TheRealMike dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/10/2008, 21h06
  5. Recherchev en vba sur plusieur vlaleur
    Par Dream Master dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/06/2007, 16h44

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