Code qui plante en bas de page

Signaler
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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à.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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.
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014

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.

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014

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.


--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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..
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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.
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014

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.

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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é.
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014

J'ai testé également et ça ne change rien.

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
14
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...
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014

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)"


--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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
"
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
14
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!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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".
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
14
Merci.
Vu et répondu...
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014

Il y a un moyen de joindre le fichier ? Et comment ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014

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.

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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
Messages postés
39
Date d'inscription
lundi 3 mars 2008
Statut
Membre
Dernière intervention
10 février 2014

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 !

--
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
236
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