Petit proble de compréhension !

  • Initiateur de la discussion spouli
  • Date de début
S

spouli

Guest
Bonjour,
Pour mon travail j'éssai d'ecrire une macros dans Visual Basic, mais j'ai un petit probleme de compréhension.


Dans une liste qui va de 1 a 20 (dans la colonne A de la feuil1)
je veux trouver le n°10.
Donc j'ai écris ca :
Private Sub CommandButton1_Click()

numerorecherche = Range("C1").Value

Range("a:a").Find(numerorecherche).Select

End Sub

Ce que ca fait :
Quand j'écris dans la cellule "C1" une valeur "< ou = 20" il me la trouve dans la collone A. Ca marche!
Quand j'écris dans la cellule "C1" le chiffre 21, Visual basic s'ouvre avec le message d'erreur de débogage.
Et surtout je ne comprend pas pourquoi ca le géne que je lui demande un chiffre qu'il ne connait pas dans la liste.

Si quelqu'un peut m'expliquer tous ca. Merci.
 
P

Pascal76

Guest
Salut

Avec la fonction Find de vba il faut qu'il trouve exactement la valeur cherchée sinon ça bug.

Il faut peut-être travailler avec une gestion d'ereur du genre si errreur alors message "la valeur n'existe pas"

Bon courage

Pascal
 
P

Pascal76

Guest
Re

Essaies ce code

Private Sub CommandButton1_Click()
On Error GoTo Message 'Si erreur va au message
numerorecherche = Range("C1").Value 'Valeur cherchée en C1
Range("a:a").Find(numerorecherche).Select 'Cherche en colonne A
Exit Sub 'Si nombre trouvé sortir macro
Message: 'Si erreur affiché le message MsgBox "Ce nombre n'existe pas dans la liste"
End Sub

Bon courage

Pascal
 
B

Bernard

Guest
Bonsoir Spouli et Pascal76

Je pense que la fonction find cherche un caractère correspondant à la demande. Si on lui demande de chercher 1 dans une suite décroissante de 30 à 1, elle va s'arrêter sur 21 car dans la cellule, la valeur 1 existe bien dans 21.

Je propose la macro suivante :

Private Sub CommandButton1_Click()

'Recherche dans la plage ("A1:A30")
For Each C In Range("A1:A30")
' Comparaison de la valeur des cellules de la plage à la valeur de la cellule C1 et selection de la première trouvée sinon message d'erreur
If C.Value = [C1].Value Then
C.Select
Exit Sub
End If
Next
MsgBox (" La valeur cherchée est absente de la liste ! ")
End Sub

Cordialement

Bernard
 
P

Pascal76

Guest
Salut Bernard

Tu as raison j'ai tellement l'habitude d'utiliser la fonction Find pour du texte et non pour des chiffres que j'ai oublié cette précision.

M'enfin il aura la précision et un petit truc sur les erreurs.

Pascal
 
S

spouli

Guest
Merci Pascal76 et Bernard pour votre aide.

Je ne suis pas encore capable d'écrire des macros comme celle-ci mais je vais pouvoir l'utiliser.
Il faut que j'arrive à comprendre les boucles !

Merci encore à tout les deux.
 

Discussions similaires

Statistiques des forums

Discussions
312 502
Messages
2 089 033
Membres
104 010
dernier inscrit
Freba