Code qui plante en bas de page

yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014 - Modifié par pijaku le 16/01/2014 à 08:48
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 10 févr. 2014 à 12:42
Bonjour à tous,

Je vous présente mon problème :

Je rentre un nom dans une textbox, le code va chercher un nom équivalent dans la colonne "I" et me renvoi, dans une listbox, le texte de la colonne "A" de la même ligne, en supprimant les doublons.
Cela fonctionne très bien sauf quand il ne trouve pas le nom recherché dans la première page de ma feuille "macave", le code plante. En revanche, quand il trouve dans la première page, il continue dans les pages suivantes de ma feuille.

Si quelqu'un a une idée merci d'avance.


Private Sub CommandButtonRechercheVin_Click()
Dim Cel As Range, Depart As String, Ref As String
Dim Mondico As Object

  'efface le contenu de la listbox1'
 Me.ListBox1.Clear

  'recherche dans la colonne I'
 Ref = Me.TextBox1.Text
 
  ' Object qui n'accepte pas les doublons
 Set Mondico = CreateObject("Scripting.dictionary")
 
  With Sheets("Ma Cave")
    Set Cel = .Columns("I").Cells.Find(What:=Ref, LookIn:=xlValues, lookat:=xlPart)
    If Not Cel Is Nothing Then
      Depart = Cel.Address
      Do
        Mondico(.Range("A" & Cel.Row).Value) = ""
        Set Cel = .Columns("I").Cells.FindNext(Cel)
      Loop While Depart <> Cel.Address
      Me.ListBox1.List = Application.Transpose(Mondico.keys)
    Else
    'si pas trouvé le met dans la liste'
      MsgBox "Pas trouvé de vin en accord avec " & Ref & "", vbCritical
    End If
  End With
End Sub




--

57 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
14 janv. 2014 à 12:00
Bonjour,
On peut déjà se demander la raison d'alimenter ta listbox de la totalité de ton dico à chaque tour de ta boucle de recherche ...
Cette opération n'est logiquement à faire qu'en sortie de boucle et non sans cesse.
Je ne vois par ailleurs pas où tu alimentes ton dico uniquement si l'article n'y existe pas déjà.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
14 janv. 2014 à 12:59
Tu es par ailleurs sous VBA/Excel.
Tu pourrais alors utilement t'affranchir de ce dictionnaire alourdissant et de cette méthode transpose en :
- utilisant une combobox plutôt qu'une listbox et en n'y ajoutant un article que s'il n'y existe pas déjà
- jouant ensuite avec les comboboxes de VBA/Excel, qui se prêtent parfaitement, seules et sans faille, à ce genre de vérification. En arrière-plan, VBA/Office utilise déjà, en effet, une collection ou un dictionnaire le permettant.
0
yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014
14 janv. 2014 à 14:50
Merci pour ta réponse mais ça ne répond pas à ma question.

Je cherche à comprendre pourquoi ça marche parfaitement sur la première page et pas les autres.
De plus lorsqu'il y a une réponse sur la première page et d'autres réponses sur les pages suivantes ça marche également.

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
Modifié par ucfoutu le 14/01/2014 à 14:53
Relis donc mon message de 12:00 notamment son second paragraphe. Il "répond", non ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
15 janv. 2014 à 07:38
Et puis et surtout (pour ce qui t'intéresse directement) :
Je ne vois pas ce que fait ton code à la route première occurrence !
Si tu tiens à ce que cette première occurrence donne lieu à une inscription au dico ===>>
With Sheets("Ma Cave")
Set Cel = .Columns("I").Cells.Find(What:=Ref, LookIn:=xlValues, lookat:=xlPart)
If Not Cel Is Nothing Then
Mondico(.Range("A" & Cel.Row).Value) = "" '<<<<<===========
Depart = Cel.Address
Do
Mondico(.Range("A" & Cel.Row).Value) = ""
Set Cel = .Columns("I").Cells.FindNext(Cel)
Loop While Depart <> Cel.Address
Me.ListBox1.List = Application.Transpose(Mondico.keys)
Else
'si pas trouvé le met dans la liste'
MsgBox "Pas trouvé de vin en accord avec " & Ref & "", vbCritical
End If
End With
inscription rajoutée en ligne 4
Ceci étant dit : je me suis là contenté de corriger ton code, que je conteste (me relire), notamment en ce qui concerne l'inscription du contenu de ton dico à chaque tour de boucle !
Mais c'est TON appli ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014
15 janv. 2014 à 14:43
Merci pour ta réponse, en bossant sur mon appli je viens de comprendre que ça ne bug pas en bas de page comme je l'expliquais précédemment, il s'agissait d'une coincidence. Le code bug sur la ligne
"Loop While Depart <> Cel.Address"
lorsqu'il ne trouve qu'un seul résultat dans la colonne "I"

Je crois comprendre pourquoi ça bug mais je ne sais pas encore comment le corriger.


--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
15 janv. 2014 à 16:02
Bien évidemment, que les "bas de page" n'ont rien à voir et que ce n'était qu'une coïncidence.
je te l'ai dit, comment le corriger, ton code ! (je rajout que je t'ai montré)
Reviens lorsque tu auras passé cette étape, avec ton code. Je te parlerai alors d'autres aspects, d'une part, et d'une autre manière de procéder, d'autre part..
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
15 janv. 2014 à 16:31
Et n'oublie surtout pas de revenir ensuite, car je te montrerai alors comment ton code peut dans certains cas compromettre ton appli, tel qu'il est écrit.
0
yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014
15 janv. 2014 à 21:35
Non ça ne change rien dans l'application. Ca marche bien dans la plupart des cas mais plante lorsqu'il y a qu'un unique résultat.

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
15 janv. 2014 à 22:34
Ah !
Et pourquoi cela marche-t-il chez moi sans la moindre faille, alors ? (Résultat unique ou non) ?
Pour ton information : j'ai testé.
0
yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014
15 janv. 2014 à 22:37
J'ai testé également et ça ne change rien.

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
Modifié par ucfoutu le 15/01/2014 à 23:30
Hé bé !
Allez ===>>
Montre (par copier/coller) la totalité du code écrit dans ta sub Private Sub CommandButtonRechercheVin_Click()
en précisant :
où se trouvent exactement :
- ce bouton de commande
- la listbox
- la textbox

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 14
16 janv. 2014 à 09:01
Bonjour,
Mes salutations ucfoutu,

Désolé pour l'incruste, ce sujet m'intéresse...

Juste un point de détail, mais qui a son importance...
yodjesed, tu dis que Le code bug sur la ligne
Loop While Depart <> Cel.Address
lorsqu'il ne trouve qu'un seul résultat dans la colonne "I" .
Ok, le débogage souligne cette ligne, mais quel est exactement le message d'erreur?
Ceci avec la totalité du code devrait nous éclairer sur l'erreur à rechercher.

Je précise qu'après test, le code d'ucfoutu fonctionne chez moi également. Donc...
0
yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014
16 janv. 2014 à 10:09
Effectivement quand je crée un fichier simplifié ça marche bien mais dans mon appli ça bug

"Variable objet ou variable bloc With non définie (erreur 91)"


--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
16 janv. 2014 à 10:55
Il est temps d'en parler !
Si cela bug avec TON appli et pas avec le code seul que je t'ai donné, c'est que tu as un problème autre que celui du code concerné ! Et donc :
1) Montre donc CE code (celui que tu as écrit) exact et complet
2) dis sur quelle ligne du as ce message
3) réponds aux questions que je t'ai posées plus haut
"où se trouvent exactement :
- ce bouton de commande
- la listbox
- la textbox
"
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
Modifié par ucfoutu le 16/01/2014 à 11:36
A Pijaku,
Si ce sujet t'intéresse également pour des raisons personnelles, dis-moi si tu es également intéressé par une solution ultra rapide et légère sans dictionnaire ni collection (Juste avec la listbox) et je la mettrai déjà ici également (je voulais attendre que yodjeseb s'en sorte d'abord sur la base de l'utilisation de son dico, mais rien ne s'oppose à ce que je mette déjà cette autre solution si elle t'intéresse).
En te précisant que uniquement valable pour VBA (serait différent encore sous VB6, dont les listboxes sont différentes)
Tu dis.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 14
16 janv. 2014 à 12:33
oui, je voulais voir ta solution sans dico ni collection.
Mais j'ai le temps, je peux suivre cette discussion.
Suivons le rythme du demandeur.
Merci!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
16 janv. 2014 à 12:54
Tu l'as en message privé.
Cette solution sera affichée par ailleurs ici également en temps opportun (lorsque notre ami yodjeseb aura "assimilé" ce qu'il convient de faire avec son "dico".
0
pijaku Messages postés 12259 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 9 août 2022 14
16 janv. 2014 à 13:20
Merci.
Vu et répondu...
0
yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014
16 janv. 2014 à 20:16
Il y a un moyen de joindre le fichier ? Et comment ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
Modifié par ucfoutu le 16/01/2014 à 21:09
Seuls les plus imprudents (dit mille fois) ouvriraient un classeur ainsi ...(je te rappelle qu'un classeur est un exécutable !)
Ici : on sait montrer son code et l'accompagner des explications nécessaires (comme tout développeur et nous sommes entre développeurs).
Dépose donc ce code et réponds très exactement à ce qui t'a été demandé maintenant à plusieurs reprises.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014
16 janv. 2014 à 21:17
T'es sans doute un très bon développeur mais en rapport humain t'es franchement nul !!!!

Je passe pas mon temps à écrire des codes, j'ai un niveau peu être faible mais j'essaie de m'y interesser.

Quand je pose une question (toujours de manière courtoise, je pense) c'est pour avoir une réponse et pas un commentaire qui sert à rien !!!

Alors laisse tomber mon code et laisse répondre les autres qui me parraissent un peu plus courtois.

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
Modifié par ucfoutu le 16/01/2014 à 21:24
Ah !
Impossible d'avoir le code et les réponses demandés à maintes reprises ?
Tu penses vraiment que mes interventions sont des "commentaires" ???
Tu veux qu'on te réponde "en aveugle" ? Ou alors nous forcer à prendre le risque d'ouvrir un exécutable ? C'est çà ?
Terminé pour moi, avec toi, alors !
Trouve quelqu'un de plus "humain" et de moins "nul" et bonne chance.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
yodjeseb Messages postés 39 Date d'inscription lundi 3 mars 2008 Statut Membre Dernière intervention 10 février 2014
16 janv. 2014 à 21:26
A quelle question? Une question se termine par un point d'interrogation, j'en ai pas vu beaucoup.

Pour le reste je comprends pas tout ce que tu dis, tu t'adresses pas toujours à des developpeurs confirmés !

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
Modifié par ucfoutu le 16/01/2014 à 21:31
Je n'ai pas posé de questions, hein ... et NOUS ne t'avons pas fait de demandes, hein ...
Te rends-tu seulement compte ? Lis-tu seulement nos messages ?
Bref ... Viens ici comme développeur et réagis comme tel ou sans moi ... Je n'ai pas l'intention de continuer ce qui ressemble de plus en plus à un chat et non à un échange entre développeurs.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0