Recherche Nom (VBA Variable)

Mjgreg67

XLDnaute Junior
Bonjour tout le monde,

Je suis un grand débutant du VBA (j'ai débuté hier soir).

Voici mon problème : Je souhaiterai qu'une fenêtre s'ouvre indiquant le nom, prénom et âge de la personne.
Pour cela il faudra écrire le nom de la personne dans une case (ici F5) et cliquer sur le bouton pour que la boite de dialogue s'ouvre.

Excel me démontre une erreur dans le code... Je n'arrive pas à la trouver...
Ce code fonctionne lorsque je met un numéro de ligne (si on change Nom_ligne as String par Nom_Ligne as integer)...

Ci-joint le document Excel 2010 dont je vous parle.

Pourriez-vous m'aider s'il vous plait ? :)

Bonne journée à tous !
 

Pièces jointes

  • Recherche nom.xls
    43.5 KB · Affichages: 58
  • Recherche nom.xls
    43.5 KB · Affichages: 62
  • Recherche nom.xls
    43.5 KB · Affichages: 57

MJ13

XLDnaute Barbatruc
Re : Recherche Nom (VBA Variable)

Bonjour Mjgreg67

Comme tu débutes, voici un code à tester.

Code:
Sub variables()
           
   'Valeurs des variables
   Nom_A_trouver = Range("F5").Value
   Nom_Row = ActiveSheet.Range("A:A").Find(Nom_A_trouver).Row
   prenom = Cells(Nom_Row, 2)
   age = Cells(Nom_Row, 3)
    
   'Boîte de dialogue
   MsgBox Nom_A_trouver & " " & prenom & ", " & age & " ans"
End Sub
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Recherche Nom (VBA Variable)

Bonjour Mj Greg , Mj13 mes salutations

Bien que la version de Mj13 est de loin plus perfo que l'originale ,

je te propose une correction de ton code, car tu étais si prêt du but

Bon attention dans les 2 codes , en cas de nom inconnu la macro plante ....

Code:
Sub variables()
'Déclaration des variables
   Dim nom As String, prenom As String, age As Integer, nom_ligne As String
        
   'Valeurs des variables
   nom_ligne = Range("A:A").Find(Range("F5")).Row
   
   nom = Cells(nom_ligne, 1)
   prenom = Cells(nom_ligne, 2)
   age = Cells(nom_ligne, 3)
    
   'Boîte de dialogue
   MsgBox nom & " " & prenom & ", " & age & " ans"

End Sub
 

Mjgreg67

XLDnaute Junior
Re : Recherche Nom (VBA Variable)

Bonjour MJ 13,

merci pour ton aide ! Malheureusement lorsque je rentre ton code, celui ci ne prend pas en compte le nom que je met en F5 :/ Je vais essayé, de mon côté, de chercher ce qui serait à changer.

Si d'autres personnes s'y connaissent surtout n'hésitez point ^^
 

Mjgreg67

XLDnaute Junior
Re : Recherche Nom (VBA Variable)

Merci énormément Camarchepas,

Je ne connais pas encore tous les codes du VBA et de ce fait le ".find" et ".row" était encore inconnu pour moi ! (J'apprend tout seul...)

Néanmoins petite question : Dans mon tableur j'ai plusieurs fois le nom "Smith". Si je met en mot de recherche "Smith" il me sort seulement le premier.

Est ce complexe de mettre en place un code qui permettrait d'afficher tous les Smith.

Grand merci pour ton aide :)
 

camarchepas

XLDnaute Barbatruc
Re : Recherche Nom (VBA Variable)

Voici pour les résultats multiples :

Une sécurité est désormais présente en cas de non présence dans la liste du nom cherché

Code:
Sub variables()
'Déclaration des variables
  Dim nom As String, prenom As String, age As Integer, nom_ligne As String
  Dim Trouve As Range
  Dim PremiereAdresse as long 
  'Valeurs des variables
   With Range("A:A")
    Set Trouve = .Find(Range("F5"))
    'Passe uniquement si l'on trouve une valeur
    If Not Trouve Is Nothing Then
        PremiereAdresse = Trouve.Address
        'Boucle de recherche
        Do
         'Détermine le numéro de la ligne
          nom_ligne = Trouve.Row
         'Charge les différentes variables
          nom = Cells(nom_ligne, 1)
          prenom = Cells(nom_ligne, 2)
          age = Cells(nom_ligne, 3)
         'Boîte de dialogue
          MsgBox nom & " " & prenom & ", " & age & " ans"
         'Recherche le suivant
          Set Trouve = .FindNext(Trouve)
         'Si suivant différent de premier et pas vide alors on boucle
        Loop While Not Trouve Is Nothing And Trouve.Address <> PremiereAdresse 
    End If
   End With
End Sub
 

Mjgreg67

XLDnaute Junior
Re : Recherche Nom (VBA Variable)

Voici pour les résultats multiples :

Une sécurité est désormais présente en cas de non présence dans la liste du nom cherché

Code:
Sub variables()
'Déclaration des variables
  Dim nom As String, prenom As String, age As Integer, nom_ligne As String
  Dim Trouve As Range
  Dim PremiereAdresse as long 
  'Valeurs des variables
   With Range("A:A")
    Set Trouve = .Find(Range("F5"))
    'Passe uniquement si l'on trouve une valeur
    If Not Trouve Is Nothing Then
        PremiereAdresse = Trouve.Address
        'Boucle de recherche
        Do
         'Détermine le numéro de la ligne
          nom_ligne = Trouve.Row
         'Charge les différentes variables
          nom = Cells(nom_ligne, 1)
          prenom = Cells(nom_ligne, 2)
          age = Cells(nom_ligne, 3)
         'Boîte de dialogue
          MsgBox nom & " " & prenom & ", " & age & " ans"
         'Recherche le suivant
          Set Trouve = .FindNext(Trouve)
         'Si suivant différent de premier et pas vide alors on boucle
        Loop While Not Trouve Is Nothing And Trouve.Address <> PremiereAdresse 
    End If
   End With
End Sub

Merci pour vous prendre la peine d'écrire le code ! J'espère qu'un jour j'aurais aussi la capacité d'en écrire un tel en si peu de temps ...
Lorsque je copie/colle votre code et que je met "Smith" en recherche, le message d'erreur suivant s'affiche :
"Erreur d'exécution '13' : incompatibilité de type.

Lorsque je clic que débogage il me surligne : PremiereAdresse = Trouve.Address

Qu'est ce que cela signifie ? :s
 

camarchepas

XLDnaute Barbatruc
Re : Recherche Nom (VBA Variable)

Oups , une coquille lors du copier coller :

en fait la ligne de déclaration :

Dim PremiereAdresse as long est fausse , il faut écrire :

Dim PremiereAdresse as string car c'est un type chaine qui est rendu comme adresse
 

Mjgreg67

XLDnaute Junior
Re : Recherche Nom (VBA Variable)

Yes maintenant ça marche !
Effectivement je vais me le garder en modèle :) En tout cas mille merci pour ton aide !

Mon objectif pour cet exercice sera de réussir à ce que Excel affiche tout dans une seule boite de dialogue :)

Bonne journée à vous.

Greg.
 

camarchepas

XLDnaute Barbatruc
Re : Recherche Nom (VBA Variable)

Toute petite modif alors , voici :

Code:
Sub variables()
'Déclaration des variables
  Dim nom As String, prenom As String, age As Integer, nom_ligne As String
  Dim Trouve As Range
  Dim PremiereAdresse As String
  Dim Phrase As String
  'Valeurs des variables
   With Range("A:A")
    Set Trouve = .Find(Range("F5"))
    'Passe uniquement si l'on trouve une valeur
    If Not Trouve Is Nothing Then
        PremiereAdresse = Trouve.Address
        'Boucle de recherche
        Do
         'Détermine le numéro de la ligne
          nom_ligne = Trouve.Row
         'Charge les différentes variables
          nom = Cells(nom_ligne, 1)
          prenom = Cells(nom_ligne, 2)
          age = Cells(nom_ligne, 3)
         'Fabrication de la phrase réponse
          Phrase = Phrase & nom & " " & prenom & ", " & age & " ans" & vbLf
         'Recherche le suivant
          Set Trouve = .FindNext(Trouve)
         'Si suivant différent de premier et pas vide alors on boucle
        Loop While Not Trouve Is Nothing And Trouve.Address <> PremiereAdresse
        
        'Boîte de dialogue
         MsgBox Phrase
    End If
   End With
End Sub
 

Statistiques des forums

Discussions
312 344
Messages
2 087 447
Membres
103 546
dernier inscrit
mohamed tano