Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
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
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 ?
 
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...

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"

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


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

Ç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 !!!
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…