Recherche de données dans plusieurs onglets

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
A voir également:

21 réponses

Polux31 Messages postés 7219 Statut Membre 1 204
 
Bonjour,

Peux-tu indiquer la ligne qui génère le message d'erreur, stp ?

;o)
0
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...
0
Ju > Ju
 
Personne ne peut il vraiment rien ?? :(
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
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)
0
Ju
 
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 :)
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
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 :
For i = 1 to 12
   Worksheets(i).Range("A1").Value = "Coucou"
Next i


;o)
0
Ju
 
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
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
Assures-toi bien que les feuilles 2 à 13 existent bien dans ton projet.

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)
0
Ju
 
Alors j'ai essayé tes 2 possibilités et les 2 plantent au même endroit que précédemment en me renvoyant le même message d'erreur. Je ne comprend pas ce qui cloche dans la commande de cette ligne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 7219 Statut Membre 1 204
 
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)
0
Ju
 
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.
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
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)
0
Ju
 
Merci et bon app' à toi aussi
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
J'ai regardé vite fait, regarde si ma modif correspond à ce que tu cherches:

https://www.cjoint.com/?gymmVgMQjL

@++
0
onesdf Messages postés 375 Date d'inscription   Statut Membre Dernière intervention   120
 
Salut,

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 
0
Ju
 
Merci beaucoup les gars à priori ça marche maintenant !!! Si jamais je retrouve d'autres soucis je vous fais signe ;)
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
ok, pas de blème.

;o)
0
Ju
 
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 :)
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
pour la première question, voilà la fonction modifiée :
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)
0
Ju
 
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 ...
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
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à
0
Ju
 
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 :)
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
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 :

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)
0
Ju
 
Maintenant il marche ... J'ai tout arrêté puis relancé il devait tourner depuis un peu trop longtemps !
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
lol pitete ...

;o)
0
Polux31 Messages postés 7219 Statut Membre 1 204
 
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
0