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

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

  • Extrait.xlsm
    518.8 KB · Affichages: 34
Dernière édition:

jabenj

XLDnaute Junior
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 ;)
 
C

Compte Supprimé 979

Guest
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:

jabenj

XLDnaute Junior
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 !!
 
C

Compte Supprimé 979

Guest
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à
 

jabenj

XLDnaute Junior
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 ?
 
C

Compte Supprimé 979

Guest
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+
 

jabenj

XLDnaute Junior
:oops:
Ç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 !!!