XL 2016 [RESOLU] Formulaire VBA : liste en cascade rencontre un pb

  • Initiateur de la discussion Initiateur de la discussion jabenj
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

jabenj

XLDnaute Junior
Bonjour à tous,

J'ai un problème de liste en cascades qui rend l'erreur 92...

Le circuit pour rencontrer l'erreur est :

1- ouvrir le formulaire grâce au bouton d'accueil
2- modifier un élément (poste) déjà enregistré : clic sur n'importe quel nom pour le sélectionner
3- aller dans l'onglet "Poste, affectation et agent sortant" contenant 3 listes en cascades.
4- modifier le "pôle" dans cette liste en cascade sans toucher à la "Direction"
Résultat : erreur d’exécution 92; boucle For non initialisée...

De plus ce "bug" ferme excel de manière plutôt étrange... (mais je suppose que cela doit être lié..)

Pourriez-vous donc, svp, m'informer de l'erreur commise dans le code VBA (qui ne sont que des "copié/collé" de codes glanés (surtout sur http://boisgontierjacques.free.fr/😉 ?

Merci de ce que vous pourrez détecter pour m'aider !
 

Pièces jointes

Dernière édition:
Bonjour,

J'imagine, mais comme j'ai pas mal trifouillé, je suppute que ce dernier aura les poils qui s'hérissent en découvrant le carnage généré !!

D'autant que je ne sais plus bien d'où vient le code des listes en cascades...

Merci néanmoins de votre coup d'oeil 😉
 
Bonsoir,
C'est le problème quand on veut utiliser du code d'un site que l'on ne comprends pas...
Tu passerais en mode débogage avec un point d'arrêt (F9) sur la ligne qui te pose souci, tu comprendrais
Il suffit de placer ton curseur de souris sur "C"
 
Dernière modification par un modérateur:
Salut,
Merci pour tes retours !!
J'ai tenté ça (dis moi si je n'ai rien compris 😉 :
Clic sur "For Each C In TblPoles" puis F9
et lancement du formulaire (car F8 dès le départ "tourne en rond") pour rencontrer l'erreur = pas d'informations particulière...
1027937

Que fais-je mal ?

Merci néanmoins de t'en préoccuper !!
 
Re,

En fait c'est sur "C" qu'il faut placer le curseur de la souris, cela t'indique "Vide"
2019-04-03_16h23_20.png

Et si tu fait un
VB:
debug.Print ubound(tblpoles)
Tu obtiens : L'indice n'appartient pas à la sélection
2019-04-03_16h23_56.png


Ce qui veut dire en terme clair, que ton tableau n'est pas rempli
Chose logique, puisqu'il ne se rempli qu'en modifiant le Textebox11
Code:
Set D2 = CreateObject("Scripting.Dictionary")
     For i = LBound(Poles) To UBound(Poles)
       If Directions(i) = Condition Then D2(Poles(i)) = ""
     Next i
     TblPoles = D2.keys

Voilà
 
ah oui ! carrément ! MERCI !!
Donc cela veut dire que ce système est voué à l’échec dans la façon dont il est construit : il faudrait supprimer le contenu des "Textbox filles" à chaque clic sur "Textbox mère"...

Est-il possible de limiter l'automatisation dans ce cas ? genre ne plus "permettre" que les menus déroulants s'activent ?
cela couperait la poire en 2 : Limitation des contenus des Directions aux bons services, mais plus le déroulement automatique...

J'ai pour ce faire "commenté" Me.TextBox11.DropDown et les autres, mais cela s'active quand même....
Humm, pas doué le gaillard, tu saurais m'indiquer la/les lignes à commenter pour brider le déroulement stp ?
 
Re,

Dans l'évènement Initialise de ton USF, il faut mette ce code au début, cela devrait résoudre ton problème
Qui est que tes tables ne sont pas définies à l'ouverture de ton USF, d'où bug 😉
VB:
Private Sub UserForm_Initialize()
  Poles = Application.Transpose(Range("Poles"))
  Directions = Application.Transpose(Range("Directions"))
  Services = Application.Transpose(Range("Services"))
  '  resultatTextBox = Application.Transpose(Range("resultatTextBox"))
  Set D1 = CreateObject("Scripting.Dictionary")
  For Each C In Directions: D1(C) = "": Next C
  MultiPage1.Value = 0
  Me.TextBox11.List = D1.keys
  Me.TextBox24.List = D1.keys
  ' Remplir ICI la Table POLES et la liste
  Set D2 = CreateObject("Scripting.Dictionary")
  For Each C In Poles: D2(C) = "": Next C
  TblPoles = D2.keys
  Me.TextBox12.List = TblPoles
  ' Remplir ICI la Table SERVICES et la liste
  Set D3 = CreateObject("Scripting.Dictionary")
  For Each C In Services: D3(C) = "": Next C
  TblServices = D3.keys
  Me.TextBox13.List = TblServices
  '
  ' Suite du code jusqu'à End sub

A+
 
😳
Ça fonctionne à merveille !!!!!

Pfff, en effet, la première table l'était mais pas les autres.... Décidément le VBA a encore beauuuucoup de secrets pour moi !!! (et pourtant nombre d'alertes sur les forum où il est indiqué de bien définir les choses en amont ! Mais ça reste un peu nébuleux pour moi encore, la preuve !!)

Un (et là je peux !) IMMENSE MERCI Bruno !!!!!!!
Ta réactivité, humour et accompagnement ont été sans défauts ! Merci merci merci !!!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour