VBA : problème recherche avec des chiffres
Résolu
Benleq
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
Benleq Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Benleq Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je découvre VBA et je viens de faire un petit macro "moteur de recherche".
Lorsque l'on clique sur le bouton "recherche", une fenêtre s'ouvre : je rentre une référence (qui est dans la base de données (feuille BDD)) et il renvoie les données relatives à cette référence (notamment les différents emplacements où elle peut être stockée) dans la première feuille (nommé page d'ouverture). De plus, ce macro colorie ces emplacements sur le "palettier virtuel" de la feuille "palettier".
Mon problème : lorsque je rentre une référence avec que des lettres ou des lettres et des chiffres ca fonctionne parfaitement. Par contre quand c'est que des chiffres ca ne marche plus : il n'arrive pas à la retrouvée dans la BDD! Assez étrange ...
Je pensais donc que c'était un problème de déclaration de variable mais pas moyen de le résoudre.
Voici mon code (commenté) :
Correspondant au programme principal
Correspondand à la procédure recherche :
A quoi cela est-il dû ?
Merci d'avance
Cordialement
Je découvre VBA et je viens de faire un petit macro "moteur de recherche".
Lorsque l'on clique sur le bouton "recherche", une fenêtre s'ouvre : je rentre une référence (qui est dans la base de données (feuille BDD)) et il renvoie les données relatives à cette référence (notamment les différents emplacements où elle peut être stockée) dans la première feuille (nommé page d'ouverture). De plus, ce macro colorie ces emplacements sur le "palettier virtuel" de la feuille "palettier".
Mon problème : lorsque je rentre une référence avec que des lettres ou des lettres et des chiffres ca fonctionne parfaitement. Par contre quand c'est que des chiffres ca ne marche plus : il n'arrive pas à la retrouvée dans la BDD! Assez étrange ...
Je pensais donc que c'était un problème de déclaration de variable mais pas moyen de le résoudre.
Voici mon code (commenté) :
Correspondant au programme principal
Private Sub CommandButton1_Click() reponse = Application.InputBox("Veuillez rentrer la référence du produit") 'arrete le programme lorsque l'on appuie sur le bouton annuler de la boite de dialogue If VarType(reponse) = vbBoolean Then Exit Sub 'efface le contenu du tableau des emplacements de la page d'ouverture Range("B9:B1000").ClearContents Range("C9:C1000").ClearContents Range("D9:D1000").ClearContents 'Remet tous les emplacements du palettier en blanc (efface) For j = 5 To 11 Step 2 For k = 1 To 65 If Worksheets("palettier").Cells(j, k).Value Like "7***" Then Worksheets("palettier").Cells(j - 1, k).Interior.Color = vbWhite End If Next k Next j 'appelle la fonction recherche Call recherche(reponse) End Sub
Correspondand à la procédure recherche :
'permet de ne pas prendre en compte la différence entre majuscule et minuscule lors de comparaison Option Compare Text Sub recherche(mot) 'declaration des variables nb_ligne_bdd = Worksheets("BDD").Cells(65536, 1).End(xlUp).Row m = 9 variable_choix = 10 Dim emplacement As Variant 'recherche le mot clef dans la base de donnees For i = 1 To nb_ligne_bdd If Worksheets("BDD").Cells(i, 1).Value = mot Then emplacement = Worksheets("BDD").Cells(i, 2).Value 'fais un copier coller des infos de la BDD dans le tableau de la page d'ouverture Worksheets("BDD").Range("A" & i & ":C" & i & "").Copy Worksheets("page d'ouverture").Range("B" & m & "").Select ActiveSheet.Paste 'colorie les emplacements du palettier correspondant à la référence recherchée For j = 5 To 11 Step 2 For k = 1 To 65 If Worksheets("palettier").Cells(j, k).Value = emplacement Then Worksheets("palettier").Cells(j - 1, k).Interior.Color = vbBlue End If Next k Next j m = m + 1 End If Next i 'permet de connaitre si la reference recherchée est ds la BDD If Worksheets("page d'ouverture").Cells(9, 2).Value = Empty And Len(mot) <> 0 Then variable_choix = 2 End If 'permet de savoir si aucun mot a etait rentre If Len(mot) = 0 Then variable_choix = 1 End If 'permet d'appliquer les cas au dessus Select Case (variable_choix) Case 1 MsgBox "Veuillez rentrer une référence" Case 2 MsgBox "La référence recherchée n'existe pas. Veuillez recommencer" Case Else End Select End Sub
A quoi cela est-il dû ?
Merci d'avance
Cordialement
A voir également:
- VBA : problème recherche avec des chiffres
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Dépassement de capacité vba ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
7 réponses
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***"
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
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 ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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û?
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,