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 !
 

Fichiers joints

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

BrunoM45

XLDnaute Barbatruc
Re,
Il faut se méfier de venter les mérites de quelqu'un, si après on ne peut avoir où espérer un retour de sa part :cool:
Je dis ça, je dis rien...
 

jabenj

XLDnaute Junior
Bonjour,
Les problème rencontré n'est-il pas clair ? ou trop complexe (ça j'en doute un peu pour vous !)

Je n'arrive pas à trouver une solution tout en maintenant la confort d'utilisation...

Quelqu'un a une idée, svp ?
 

jabenj

XLDnaute Junior
Plus du tout ;)
Toujours pas de solution à proposer ? j'ai beau relire et relire le code, je ne comprends que trop peu...
S'il vous plait !!
 

BrunoM45

XLDnaute Barbatruc
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 édition:

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 !!
 

BrunoM45

XLDnaute Barbatruc
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 ?
 

BrunoM45

XLDnaute Barbatruc
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 !!!
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas