VBA : problème recherche avec des chiffres
Résolu/Fermé
Benleq
Messages postés
8
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
2 novembre 2014
-
30 juin 2011 à 13:57
Benleq Messages postés 8 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 2 novembre 2014 - 1 juil. 2011 à 11:10
Benleq Messages postés 8 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 2 novembre 2014 - 1 juil. 2011 à 11:10
A voir également:
- VBA : problème recherche avec des chiffres
- Incompatibilité de type vba ✓ - Forum Programmation
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba dernière colonne non vide ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
7 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
30 juin 2011 à 14:32
30 juin 2011 à 14:32
Bpnjour,
en regardant en diagonale
l'opérateur LIKE concerne des string "toto1" par exemple
si tu as un nombre il faut utilser "#####" le nbre de # et le nombre de chiffres (si tu en a 4 ou 6 ) l'instruction renvoie False
si tu veux début du nombre =7 écris "7###" ==> 7 suivi de 3 chiffres
maintenant tu peux feinter en convertissant le nombre en string
tavar=cstr(ta var) et en gardant "7***"
en regardant en diagonale
l'opérateur LIKE concerne des string "toto1" par exemple
si tu as un nombre il faut utilser "#####" le nbre de # et le nombre de chiffres (si tu en a 4 ou 6 ) l'instruction renvoie False
si tu veux début du nombre =7 écris "7###" ==> 7 suivi de 3 chiffres
maintenant tu peux feinter en convertissant le nombre en string
tavar=cstr(ta var) et en gardant "7***"
Benleq
Messages postés
8
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
2 novembre 2014
3
30 juin 2011 à 14:59
30 juin 2011 à 14:59
Bonjour Michel_m,
Je ne pense pas que le problème vienne de là. En effet, cette étape est indépendante de la recherche et permet de colorier les cellules correspondant à l'ensemble des emplacements sur le palettier afin de tout remettre en blanc (Ces emplacements sont de la forme 7C01).
Je pense que le problème se situe dans la procédure recherche et plus particulièrement ici :
La variable mot correspond à ce qui est rentrer par l'utilisateur dans le inputbox.
Est ce le "Value" qui pose problème ou la variable mot ?
Voici une version simplifiée du code qui présente le même problème :
Procédure recherche :
Fonction principal :
Je ne pense pas que le problème vienne de là. En effet, cette étape est indépendante de la recherche et permet de colorier les cellules correspondant à l'ensemble des emplacements sur le palettier afin de tout remettre en blanc (Ces emplacements sont de la forme 7C01).
Je pense que le problème se situe dans la procédure recherche et plus particulièrement ici :
If Worksheets("BDD").Cells(i, 1).Value = mot Then
La variable mot correspond à ce qui est rentrer par l'utilisateur dans le inputbox.
Est ce le "Value" qui pose problème ou la variable mot ?
Voici une version simplifiée du code qui présente le même problème :
Procédure recherche :
Option Compare Text Sub recherche(mot) LaDerniere = Worksheets("BDD").Cells(65536, 1).End(xlUp).Row k = 9 For i = 1 To LaDerniere If Worksheets("BDD").Cells(i, 1).Value = mot Then Worksheets("BDD").Range("A" & i & ":C" & i & "").Copy Worksheets("page d'ouverture").Range("A" & k & "").Select ActiveSheet.Paste k = k + 1 End If Next i End Sub
Fonction principal :
Private Sub CommandButton1_Click() reponse = Application.InputBox("Veuillez rentrer la référence du produit") Call recherche(reponse) End Sub
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
30 juin 2011 à 15:13
30 juin 2011 à 15:13
Bin continue de penser alors
eriiic
Messages postés
24570
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 avril 2024
7 215
Modifié par eriiic le 30/06/2011 à 23:32
Modifié par eriiic le 30/06/2011 à 23:32
Bonjour,
Sans trop lire le code (même pas du tout) je pense que la réponse de michel aurait pu t'aiguiller lorsque tu donnes ton analyse :
Je pense que le problème se situe dans la procédure recherche et plus particulièrement ici :
If Worksheets("BDD").Cells(i, 1).Value = mot Then
La variable mot correspond à ce qui est rentrer par l'utilisateur dans le inputbox.
Un inputbox retourne une chaine , et ça ne marche pas lorsque tu recherches une valeur numérique
Tu confirmes sur une autre ligne de code le problème détecté par michel : convertir en chaine toutes les valeurs susceptibles d'être numériques.
(partout où c'est nécessaire... ta ligne, celle signalée par michel, et peut-être ailleurs aussi...)
Sans oublier qu'un nombre positif converti commence par un espace et qu'un trim() en plus du str() serait le bienvenu
eric
PS: tu es nouveau sur le forum, en général (nul ne se trompe jamais) tu peux faire confiance aux remarques de michel ;-)
Sans trop lire le code (même pas du tout) je pense que la réponse de michel aurait pu t'aiguiller lorsque tu donnes ton analyse :
Je pense que le problème se situe dans la procédure recherche et plus particulièrement ici :
If Worksheets("BDD").Cells(i, 1).Value = mot Then
La variable mot correspond à ce qui est rentrer par l'utilisateur dans le inputbox.
Un inputbox retourne une chaine , et ça ne marche pas lorsque tu recherches une valeur numérique
Tu confirmes sur une autre ligne de code le problème détecté par michel : convertir en chaine toutes les valeurs susceptibles d'être numériques.
(partout où c'est nécessaire... ta ligne, celle signalée par michel, et peut-être ailleurs aussi...)
Sans oublier qu'un nombre positif converti commence par un espace et qu'un trim() en plus du str() serait le bienvenu
eric
PS: tu es nouveau sur le forum, en général (nul ne se trompe jamais) tu peux faire confiance aux remarques de michel ;-)
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 303
1 juil. 2011 à 08:21
1 juil. 2011 à 08:21
merci, Eric :o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Benleq
Messages postés
8
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
2 novembre 2014
3
1 juil. 2011 à 10:53
1 juil. 2011 à 10:53
Bonjour,
Je suis désolé que mon message vous soit perçu comme cela. Je voulais juste signaler que l'erreur affectant le fonctionnement global de la macro ne se situait pas ici. Et comme en survolant le code, Michel_m a tout de suite détecté cette erreur je pensais qu'en lui indiquant l'autre il la trouverai. Je n'ai pas fait le rapprochement comme quoi ces deux erreurs étaient similaires.
Je vous remercie de m'avoir répondu : cela devient maintenant plus clair pour moi.
J'ai donc rentrer dans mon code :
Mais cela ne marche pas.
J'ai placé ce code juste en dessous de :
et avant :
Quand je fais un TypeName(reponse) je retombe bien sur string.
Vous savez à quoi c'est dû?
Je suis désolé que mon message vous soit perçu comme cela. Je voulais juste signaler que l'erreur affectant le fonctionnement global de la macro ne se situait pas ici. Et comme en survolant le code, Michel_m a tout de suite détecté cette erreur je pensais qu'en lui indiquant l'autre il la trouverai. Je n'ai pas fait le rapprochement comme quoi ces deux erreurs étaient similaires.
Je vous remercie de m'avoir répondu : cela devient maintenant plus clair pour moi.
J'ai donc rentrer dans mon code :
reponse = CStr(reponse) reponse = Trim(reponse)
Mais cela ne marche pas.
J'ai placé ce code juste en dessous de :
reponse = Application.InputBox("Veuillez rentrer la référence du produit")
et avant :
Call recherche(reponse)
Quand je fais un TypeName(reponse) je retombe bien sur string.
Vous savez à quoi c'est dû?
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
Modifié par pilas31 le 1/07/2011 à 11:04
Modifié par pilas31 le 1/07/2011 à 11:04
Bonjour,
Et oui michel_m et eriiic ont raison (comme d'hab)
Il faut convertir. Mais plutôt en numérique à partir de la chaine saisie.
donc je pense en un truc du genre (dans recherche)
si toutefois ces numériques sont des entiers sinon choisir une autre fonction
A+
Cordialement,
Et oui michel_m et eriiic ont raison (comme d'hab)
Il faut convertir. Mais plutôt en numérique à partir de la chaine saisie.
donc je pense en un truc du genre (dans recherche)
Sub recherche(mot) LaDerniere = Worksheets("BDD").Cells(65536, 1).End(xlUp).Row k = 9 If IsNumeric(mot) Then mot = CInt(mot) For i = 1 To LaDerniere If Worksheets("BDD").Cells(i, 1).Value = mot Then Worksheets("BDD").Range("A" & i & ":C" & i & "").Copy Worksheets("page d'ouverture").Range("A" & k & "").Select ActiveSheet.Paste k = k + 1 End If Next i End Sub
si toutefois ces numériques sont des entiers sinon choisir une autre fonction
A+
Cordialement,
Benleq
Messages postés
8
Date d'inscription
dimanche 19 juin 2011
Statut
Membre
Dernière intervention
2 novembre 2014
3
1 juil. 2011 à 11:10
1 juil. 2011 à 11:10
Merci beaucoup cela marche parfaitement !
Bonne continuation
Benoît
Bonne continuation
Benoît