Recherche de données dans plusieurs onglets
Ju
-
Ju -
Ju -
Bonjour,
Je suis en train d'essayer de faire un petit programme via Excel et VBA et je bloque sur un point. J'ai 12 onglets excel (un par mois) et je désire retrouver un numéro précis dans ces 12 onglets via un formulaire VBA. J'ai entré le code suivant :
Private Sub btnRechercher_Click()
Worksheets("Janvier") = 1
Worksheets("Février") = 2
Worksheets("Mars") = 3
Worksheets("Avril") = 4
Worksheets("Mai") = 5
Worksheets("Juin") = 6
Worksheets("Juillet") = 7
Worksheets("Aout") = 8
Worksheets("Septembre") = 9
Worksheets("Octobre") = 10
Worksheets("Novembre") = 11
Worksheets("Décembre") = 12
If lstType.Value = "Bordereau de retour" Then
For i = 1 to 12
p = 4
While i.Cells(p, 4) <> txtNumero.Text (txtNumero est ma boite où j entre le code à trouver)
p = p + 1
Wend
If i.Cells(p, 4) = txtNumero.Text Then
lstDate1.Value = i.Cells(p, 1)
lstDate2.Value = i.Cells(p, 2)
lstDate3.Value = i.Cells(p, 3)
txtMasse.Text = i.Cells(p, 7)
txtVbenne.Text = i.Cells(p, 8)
End If
Next i
End If
End Sub
Et il me renvoie un message d'erreur me disant "propriété ou méthode non gérée par cet objet."
Je désirerais également entrer une commande permettant de cocher le bouton radio qui correspond au type de produit mais je ne vois pas comment faire sans faire une ligne pour chaque bouton radio.
Etant débutant je ne maitrise pas encore tout ça donc si quelqu un peut me venir en aide ...
Merci
Je suis en train d'essayer de faire un petit programme via Excel et VBA et je bloque sur un point. J'ai 12 onglets excel (un par mois) et je désire retrouver un numéro précis dans ces 12 onglets via un formulaire VBA. J'ai entré le code suivant :
Private Sub btnRechercher_Click()
Worksheets("Janvier") = 1
Worksheets("Février") = 2
Worksheets("Mars") = 3
Worksheets("Avril") = 4
Worksheets("Mai") = 5
Worksheets("Juin") = 6
Worksheets("Juillet") = 7
Worksheets("Aout") = 8
Worksheets("Septembre") = 9
Worksheets("Octobre") = 10
Worksheets("Novembre") = 11
Worksheets("Décembre") = 12
If lstType.Value = "Bordereau de retour" Then
For i = 1 to 12
p = 4
While i.Cells(p, 4) <> txtNumero.Text (txtNumero est ma boite où j entre le code à trouver)
p = p + 1
Wend
If i.Cells(p, 4) = txtNumero.Text Then
lstDate1.Value = i.Cells(p, 1)
lstDate2.Value = i.Cells(p, 2)
lstDate3.Value = i.Cells(p, 3)
txtMasse.Text = i.Cells(p, 7)
txtVbenne.Text = i.Cells(p, 8)
End If
Next i
End If
End Sub
Et il me renvoie un message d'erreur me disant "propriété ou méthode non gérée par cet objet."
Je désirerais également entrer une commande permettant de cocher le bouton radio qui correspond au type de produit mais je ne vois pas comment faire sans faire une ligne pour chaque bouton radio.
Etant débutant je ne maitrise pas encore tout ça donc si quelqu un peut me venir en aide ...
Merci
A voir également:
- Recherche de données dans plusieurs onglets
- Fuite données maif - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Rouvrir les onglets fermés chrome - Guide
21 réponses
Bonjour,
Peux-tu indiquer la ligne qui génère le message d'erreur, stp ?
;o)
Peux-tu indiquer la ligne qui génère le message d'erreur, stp ?
;o)
Ju
Heu c'est dès la première en fait :) Donc à priori il risque de me faire la même chose pour les suivantes ... Je ne comprend pas pourquoi...
Ju
>
Ju
Personne ne peut il vraiment rien ?? :(
Bonjour,
C'est ça qui coinçe:
Worksheets("Janvier") = 1
Worksheets("Février") = 2
Worksheets("Mars") = 3
Worksheets("Avril") = 4
Worksheets("Mai") = 5
Worksheets("Juin") = 6
Worksheets("Juillet") = 7
Worksheets("Aout") = 8
Worksheets("Septembre") = 9
Worksheets("Octobre") = 10
Worksheets("Novembre") = 11
Worksheets("Décembre") = 12
Que veux tu faire exactement avec ça ?
;o)
C'est ça qui coinçe:
Worksheets("Janvier") = 1
Worksheets("Février") = 2
Worksheets("Mars") = 3
Worksheets("Avril") = 4
Worksheets("Mai") = 5
Worksheets("Juin") = 6
Worksheets("Juillet") = 7
Worksheets("Aout") = 8
Worksheets("Septembre") = 9
Worksheets("Octobre") = 10
Worksheets("Novembre") = 11
Worksheets("Décembre") = 12
Que veux tu faire exactement avec ça ?
;o)
Bah en fait je veux les nommer de 1 à 12 pour pouvoir les introduire dans la boucle For (genre l'onglet janvier c'est 1, février c'est 2 et ainsi de suite...). Je voudrais que mon formulaire examine toutes les pages une à une pour retrouver le numéro du bon de commande que je lui demande. Si ça se trouve il y a une commande plus simple mais ça je n'en sais rien :)
Tu as 2 façons de nommer une feuille. Soit par le nom (name) de l'onglet, soit par le numéro (index) de l'onglet. Mais tu ne peux pas affecter un numéro comme tu l'as fait.
Tu peux faire une boucle comme ça, pour avoir "Coucou" dans la cellule A1 de la feuille 1 à la feuille 12 :
;o)
Tu peux faire une boucle comme ça, pour avoir "Coucou" dans la cellule A1 de la feuille 1 à la feuille 12 :
For i = 1 to 12
Worksheets(i).Range("A1").Value = "Coucou"
Next i
;o)
Ah je ne savais pas que chaque feuille avait un numéro qui lui était attribué en plus de son nom. Alors j'ai fait la modif mais bien évidemment ça plante plus loin :) Le code est maintenant le suivant :
Private Sub btnRechercher_Click()
If lstType.Value = "Bordereau de retour" Then
For i = 2 To 13
p = 4
While Worksheets(i).Cells(p, 4) <> txtNumero.Text
p = p + 1
Wend
If i.Cells(p, 4) = txtNumero.Text Then
lstDate1.Value = i.Cells(p, 1)
lstDate2.Value = i.Cells(p, 2)
lstDate3.Value = i.Cells(p, 3)
txtMasse.Text = i.Cells(p, 7)
txtVbenne.Text = i.Cells(p, 8)
End If
Next i
End If
End Sub
Et la il plante à la ligne "While Worksheets(i).Cells(p, 4) <> txtNumero.Text" en me disant erreur définie par l'application ou par l'objet. J'ai entré cette ligne afin de lui faire chercher dans la page i le numéro que j'ai entré dans txtNumero de mon formulaire. Et quand il le trouve je voudrais qu'il éxécute les 7 lignes qui suivent qui me donnent le reste des informations.
Merci pour ton aide Polux31
Private Sub btnRechercher_Click()
If lstType.Value = "Bordereau de retour" Then
For i = 2 To 13
p = 4
While Worksheets(i).Cells(p, 4) <> txtNumero.Text
p = p + 1
Wend
If i.Cells(p, 4) = txtNumero.Text Then
lstDate1.Value = i.Cells(p, 1)
lstDate2.Value = i.Cells(p, 2)
lstDate3.Value = i.Cells(p, 3)
txtMasse.Text = i.Cells(p, 7)
txtVbenne.Text = i.Cells(p, 8)
End If
Next i
End If
End Sub
Et la il plante à la ligne "While Worksheets(i).Cells(p, 4) <> txtNumero.Text" en me disant erreur définie par l'application ou par l'objet. J'ai entré cette ligne afin de lui faire chercher dans la page i le numéro que j'ai entré dans txtNumero de mon formulaire. Et quand il le trouve je voudrais qu'il éxécute les 7 lignes qui suivent qui me donnent le reste des informations.
Merci pour ton aide Polux31
Assures-toi bien que les feuilles 2 à 13 existent bien dans ton projet.
Ensuite essaies en mettant ça :
Ou
Je n'ai pas le temps de tester là, je suis désolé, je fais ça un peu à la volée ...
;o)
Ensuite essaies en mettant ça :
While Worksheets(i).Cells(p, 4).Value <> txtNumero.Text p = p + 1 Wend
Ou
While Worksheets(i).Range("D" & p).Value <> txtNumero.Text
p = p + 1
Wend
Je n'ai pas le temps de tester là, je suis désolé, je fais ça un peu à la volée ...
;o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Peux-tu me faire passer ton fichier par cjoint.com, stp ? ... tu colles le lien ici après.
Enlèves tout ce qui est confidentiel et ne laisses que la partie qui doit utiliser la fonction.
;o)
Enlèves tout ce qui est confidentiel et ne laisses que la partie qui doit utiliser la fonction.
;o)
https://www.cjoint.com/?gyl36FIRPe
Voilà le lien. Il n'y a rien de confidentiel dedans pour le moment :) La fonction qui ne marche pas est sur le formulaire qui s'appelle "données" et c'est lorsque l'on clique sur le bouton rechercher.
Merci.
Voilà le lien. Il n'y a rien de confidentiel dedans pour le moment :) La fonction qui ne marche pas est sur le formulaire qui s'appelle "données" et c'est lorsque l'on clique sur le bouton rechercher.
Merci.
ok merci, je regarde ça en début d'aprem et je te dis ce qu'il faut modifier, si je trouve bien sûr ...
bon app.
;o)
bon app.
;o)
J'ai regardé vite fait, regarde si ma modif correspond à ce que tu cherches:
https://www.cjoint.com/?gymmVgMQjL
@++
https://www.cjoint.com/?gymmVgMQjL
@++
Salut,
Ton erreur est dûe à la condition de ta boucle :
Si elle ne trouve pas txtNumero.Text en ligne 4, alors p est incrémenté et vérifie la ligne suivante ... Si le texte recherché n'est pas la feuille ta boucle s'exécute jusqu'à arriver à la dernier ligne qu'Excel peut gérer + 1 ... Ligne qu'excel ne peut donc pas gérer et celà génère un message d'erreur.
Rajoute donc la condition que la cellule ne soit pas vide et celà devrait passer
Ton erreur est dûe à la condition de ta boucle :
While i.Cells(p, 4) <> txtNumero.Text (txtNumero est ma boite où j entre le code à trouver) p = p + 1 Wend
Si elle ne trouve pas txtNumero.Text en ligne 4, alors p est incrémenté et vérifie la ligne suivante ... Si le texte recherché n'est pas la feuille ta boucle s'exécute jusqu'à arriver à la dernier ligne qu'Excel peut gérer + 1 ... Ligne qu'excel ne peut donc pas gérer et celà génère un message d'erreur.
Rajoute donc la condition que la cellule ne soit pas vide et celà devrait passer
While i.Cells(p, 4) <> txtNumero.Text And Not(IsEmpty(i.Cells(p, 4) <> txtNumero.Text)) p = p + 1 Wend
Merci beaucoup les gars à priori ça marche maintenant !!! Si jamais je retrouve d'autres soucis je vous fais signe ;)
Ma question ne se fait pas tarder... lol. Dans l'éventualité où il ne trouve pas le numéro demandé (faute de frappe de l'utilisateur ou bien oubli de rentrée de données), comment le faire sortir de la boucle et lui faire afficher un message d'erreur ?? Et tant qu'on y est, une fois la recherche de numéro de bon terminée et les valeurs manquantes ajoutées, lorsque je valide il me met la ligne complète sous l'existante alors que je voudrais qu'il la remplace ...
Merci :)
Merci :)
pour la première question, voilà la fonction modifiée :
Pour la seconde question, je vais regarder koikissepasse ...
;o)
Private Sub btnRechercher_Click()
Dim ok As Boolean
ok = False
If txtNumero.txt = "" Then
MsgBox "La zone Numéro doit être renseignée", vbExclamation, "Saisie Obligatoire"
Exit Sub
End If
If lstType.Value = "Bordereau de retour" Then
For i = 2 To 13
p = 4
While Worksheets(i).Range("D" & p).Value <> ""
If Worksheets(i).Cells(p, 4) = txtNumero.Text Then
lstDate1.Value = Worksheets(i).Cells(p, 1)
lstDate2.Value = Worksheets(i).Cells(p, 2)
lstDate3.Value = Worksheets(i).Cells(p, 3)
txtMasse.Text = Worksheets(i).Cells(p, 7)
txtVbenne.Text = Worksheets(i).Cells(p, 8)
ok = True
End If
p = p + 1
Wend
Next i
End If
If ok = False Then
MsgBox "Recherche infructueuse, ou erreur de saisie !!!", vbExclamation, "Message"
End If
End Sub
Pour la seconde question, je vais regarder koikissepasse ...
;o)
J'ai testé ton truc il y a un petit truc qui cloche : il me met un mesage d'erreur à la fin que le code que j'ai entré existe ou pas ...
Ben ça marche chez moi, il y a juste une erreur de frappe au niveau de txtNumero.Text ... mais le test fonctionne ...
Comprends pas là
Comprends pas là
Yep j'ai vu et j'ai corrigé la faute de frappe mais il me renvoie quand même un message d'erreur quand le code existe tout en m'affichant les données du code entré... Bizarre :)
je viens encore de tester et ça fonctionne bien ici ... je te redonne la procédure, vérifie que tout est bien dans ton fichier :
;o)
Private Sub btnRechercher_Click()
Dim ok As Boolean
ok = False
If txtNumero.Text = "" Then
MsgBox "La zone Numéro doit être renseignée", vbExclamation, "Saisie Obligatoire"
Exit Sub
End If
If lstType.Value = "Bordereau de retour" Then
For i = 2 To 13
p = 4
While Worksheets(i).Range("D" & p).Value <> ""
If Worksheets(i).Cells(p, 4) = txtNumero.Text Then
lstDate1.Value = Worksheets(i).Cells(p, 1)
lstDate2.Value = Worksheets(i).Cells(p, 2)
lstDate3.Value = Worksheets(i).Cells(p, 3)
txtMasse.Text = Worksheets(i).Cells(p, 7)
txtVbenne.Text = Worksheets(i).Cells(p, 8)
ok = True
End If
p = p + 1
Wend
Next i
End If
If ok = False Then
MsgBox "Recherche infructueuse, ou erreur de saisie !!!", vbExclamation, "Message"
End If
End Sub
;o)
Maintenant il marche ... J'ai tout arrêté puis relancé il devait tourner depuis un peu trop longtemps !
Bonjour,
Voilà, j'ai un peu optimisé ton code ... ;o)
J'ai fait une modif pour ta 2ème question, j'espère que ça ira.
Voilà le lien : https://www.cjoint.com/?gzj5Qdy4Tl
Bon courage
;o)
Polux
Voilà, j'ai un peu optimisé ton code ... ;o)
J'ai fait une modif pour ta 2ème question, j'espère que ça ira.
Voilà le lien : https://www.cjoint.com/?gzj5Qdy4Tl
Bon courage
;o)
Polux