Besoin aide VBA

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Oh, si elles doivent y être. Il semblereait qu'il y ait un problème avec la fonction PlgUti de Utilit appelée par ColUti.
Essayez voir en donnant provisoirement comme référence au nom Base ='Base en cours'!$D$2:$O$9
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

C'est vrai que pour l'instant le nom Base était égal a #NA ...
Et cela fonctionne tout de suite mieux (au niveau des listes de validation, mais il n'y a qu'ici que cette macro agit pour l'instant, c'est bien ça ?)
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Oui, un objet de mon type ListesLiées n'agit que sur les listes spécifiées comme 1er paramètres aux Add.
Mais il devrait pouvoir rendre la liste des numéros de lignes se rapportant à la combinaison des choix effectués (propriété Lignes en lecture seule).
Quant à la possibilité de changement des cellules Argument, elle est limitée pour le moment à une seule possibilité, adaptée aux listes de validations dans toutes les cellules d'une même colonne d'un tableau: il suffirait de lui préciser Target au LL.MàJListes de la Worksheet_SelectionChange.

P.S. Mais je viens de voir que ça va poser un problème parce que la liste d'un choix effectué n'est pas corrigée. Comprenez pas ? Pas grave !… De toute façon c'est en rodage tout ça…
 
Dernière édition:

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

J'avoue ne rien comprendre aux termes propres au fichier que vous avez construit ! Mais cela paraît logique =)
Et comme vous le dite, c'est un fichier en rodage, il n'est pas urgent même si la lenteur de mon fichier pourrait me faire commettre un crime ...

Alors un grand merci !
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Bonjour, je reviens à la charge maintenant que j'ai un peu de temps pour moi !
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Bonjour.
À propos, vous dites que le nom Base avait pour référence =#N/A ? C'est comme ça que vous l'avez trouvé, ou c'est la formule que j'y avais initialement mis qui rend #N/A contrairement à chez moi ?
Code:
=ColUti('Base en cours'!$D$2:$O$60000)
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Bonjour,

les 2 mon capitaine :
en voyant que le resultat était #NA, j'ai cherché d'où pouvait provenir l'erreur. Et soit il yavait un NA dans ma base, soit la référence était mauvaise.

J'ai regardé votre macro. Je n'ai pas compris grand chose mais je pense avoir saisi pourquoi elle était si complexe : elle devrait permettre, quelque soit le fichier, de pouvoir compiler des informations beaucoup plus facilement grâce au stockage des informations dans des "dictionnaires". Ainsi peut importe la forme, mise en page du fichier, la restitution et le stockage se feraient "automatiquement" ? Parce que je n'ai pas compris comment fonctionnait votre formule "ColUti" et à quoi correspondaitl e résultat.

Merci d'avance de votre retour !
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Très ennuyeux si ColUti ne fonctionne pas chez vous.
Il devrait permettre de définir un Range étendu d'un groupe de colonnes à partir d'une ligne donnée jusqu'à la dernière cellule trouvée renseignée de mieux qu'une chaine vide. Étant donné qu'il marche chez moi je ne peux que vous suggérer de mettre un point d'arrêt sur le Set ColUti et de dérouler en pas à pas.
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

trés difficile de s'appropier un fichier non construit par nos soins. Encore plus quand on est nul en VBA. Donc j'ai essayé de trouver d'où cela pouvait venir mais rien n'a attiré mon attention ...

Pour plus de compréhension par rapport à ma formule, voila ce que j'attends de la formule VBA
Ce lien n'existe plus
sauf qu'au lieu d'avoir un critère, j'aimerai en avoir 3 (Nom de département, nom de centre de couts et responsable; les 3 étant choisi par liste déroulante en cascade)
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Bonjour
Mais ça vous l'avez déjà. Le module de classe ListesLiées ne constitue-t-il pas correctement les plages Lst ?
Il y a juste cette définition d'une plage Base à l'aide de ColUti qui semble poser problème, mais ça n'a rien à voir.
D'abord est ce que ça vient de ColUti ? Cette procédure, dans un nouveau module ordinaire, lancée quand la feuille Base en cours est active, qu'est-ce qu'elle donne ?
VB:
Sub test()
Dim R As Range
Set R = ColUti(ActiveSheet.[D2:O2])
If R Is Nothing Then MsgBox "Effectivement, ColUti n'arrive pas à isoler la plage", , "Test" _
                Else MsgBox "Plage isolée, addresse: " & R.Address(0, 0, xlA1, True), , "Test"
End Sub
P.S. Remarque: lorsque je saurai comment ce problème devra être résolu, je vous proposerai sans doute le classeur avec une nouvelle écriture du module de classe ListesLiées qui garantira que la liste établie pour chaque argument sera compatibles avec les autres arguments dont les valeurs existent dans la base même si on change subitement de cellules pour tous les arguments.
 
Dernière édition:

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Si je peux me permettre une légère remarque : je ne comprends rien à votre vocabulaire ! C'est purement macro et c'est un language que je ne comprends pas étant néophite. Alors j'ai bien compris quil fallait que je regarde et essaie de comprendre pourquoi
Code:
LL.Plage [Base]
bugg, et donc a priori dû à la liste définie "Base" dans le gestionnaire de nom qui renvoie #NA.

Mais je ne sais pas comment vous avez créé ces bases (manuellement ? avec du VBA) et n'arrive pas à retrouver le fameux ColUti.

Merci de votre compréhension, mais si j'arrive a (mieux) comprendre votre fichier, la solution devrait suivre.

Bien à vous

ps : je ne sais meme pas ajouter un module en VBA. Mais ça je le répète depuis le début de cette conversation. J'essaie de trouver un tuto pour faire votre manip

edit : j'ai créé un nouveau module dans le fichier que tu as fourni page 3, je ne sais pas comment voir si il fonctionne.
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Bonjour
Un des moyens d'exécuter une macro est d'utiliser la touche F5 lorsque le curseur texte est dedans. Assurez vous que la feuille active est la Base en cours. J'ai créé le nom "Base" avec mon gestionnaire personnel de noms dans le classeur avec pour référence =ColUti('Base en cours'!$D$2:$O$65536), mais j'envisage de le créer ou le rectifier avec du VBA lorsqu'on quitte la feuille. Le problème c'est que je ne sais pas tant que vous n'aurez pas fait le test si je peut y utiliser ColUti. Cette Function est écrite dans le module Utilit. Elle est très courte vu qu'elle utilise la PlgUti.
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Je viens d'insérer votre module (je suis allé sur ma base en cours, collé le vba puis F5), voilà le message qu'il rapporte :
Code:
Test
Plage isolée; addresse: '[LstLiéesSpinzi (1).xls]Base en cours'!D2:O9
Dites moi si il vous faut plus d'informations
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Bonne nouvelle. Ça marche. C'est apparemment juste son utilisation comme référence à une plage nommée qui pose problème contrairement à chez moi. Je définis donc cette plage en sortant de la feuille Base en cours (Worksheet_Deactivate dans module FBdD (Base en cours)).
 

Fichiers joints

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Plus de problème de mon coté si ce n'est un choix de cellule vide dans la validation alors que je n'en ai plus dans ma base (j'ai rempli les cases vides) => une fois que 2 des 3 listes de valdiations sont selectionnées, le choix vide apparait sur la derniere liste non encore selectionnée

ps : ca n'a pas d'importance si j'ai enregistré le fichier sous xlsm ?
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Je préfèrerais en .xls
Je crois que je vois ce que vous voulez dire. Mais je ne sais pas trop quoi y faire. C'est plus compliqué qu'il n'y parait car on ne peut plus agrandir une plage référencée (telle que celle en référence d'un nom) contenant moins de 2 lignes. Auriez vous une idée de la façon de procéder ? Ce n'est pas une erreur du module de classe, qui, lui, identifie correctement l'ensemble devant logiquement faire partie de la liste, mais qui s'interdit volontairement de laisser moins de 2 lignes dans cette plage de liste…
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Cela n'a rien d'impactant en soi pour l'instant car je ne sais pas si cela intéragit avec la liste de resultats qui devra découler de cette selection.
J'ai une autre question, toute bête : mon tableau base va plus loin que la colonne O. Pas besoin de changer le code ?
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Non, sauf dans la Private Sub Worksheet_Deactivate() de FBdD (Base en cours)
Changez le "O" de ColUti(Me.[D2:O2]).Name = "Base"

Information: Le module de classe peut jouer un rôle dans l'établissement de résultats devant découler de la sélection.
Il est en effet pourvu d'une méthode Lignes renvoyant une table des numéros de lignes dans la plage source compatibles avec les choix effectués dans les cellules Arguments en cours.
Mais vous ne parlez jamais d'en changer ? Je comprends alors de moins en moins pourquoi vous ne préférez pas des ComboBox dans un Userform. Le système existe maintenant depuis longtemps et a fait ses preuves.
 

Spinzi

XLDnaute Impliqué
Re : Besoin aide VBA

Je n'ai pas compris votre interrogation par rapport aux cellules Arguments en cours (je ne sais pas à quoi cela correspond).
Pour les combobox je ne vois pas l'avantage que cela pourrait procurer. Pour moi c'est un élément limitant car il ne permet pas l'acces à l'onglet quand l'userform est en cours de modification.
Mais je suis ouvert à toute proposition et si cela n'est pas long à concevoir un apercu des 2 solutions pourrait m'aider à choisir.

Toujours merci pour vos explications, si vous souhaitez des informations complémentaires, n'hésitez pas et vivement que je puisse tester la macro.

Non, sauf dans la Private Sub Worksheet_Deactivate() de FBdD (Base en cours)
Changez le "O" de ColUti(Me.[D2:O2]).Name = "Base"
Dans cette procédure, que cherche à faire ColUti ? Si c'est juste pour alimenter les listes de validations, les données servantes s'arrêtent à la colonne O, donc pas d'impact normalement. Cependant si cela peut servir à pêcher d'autre informations alors il faudra que je le change à chaque ajout de colonne ?
 

Dranreb

XLDnaute Barbatruc
Re : Besoin aide VBA

Je n'ai pas compris votre interrogation par rapport aux cellules Arguments en cours
J'ai essentiellement conçu ce module pour un usage où les ComboBox ne sont pas applicables: lorsque dans certaines colonnes d'un tableau toutes les lignes portent une liste de validation dépendant de choix dans d'autres colonnes de cette même ligne et que l'ensemble des colonnes d'arguments dans cette ligne là forme les arguments courants.
il ne permet pas l'acces à l'onglet quand l'userform est en cours de modification
Si, il suffit qu'il soit affiché en non modal, c'est à dire soit en mettant sa propriété ShowModal à False, soit en ajoutant un paramètre 0 à l'appel à sa méthode Show.
il faudra que je le change à chaque ajout de colonne ?
À vrai dire, je ne vous l'ai pas encore dit, mais je suis perturbé depuis le début par le fait que les liste sont dans la même feuille, à gauche, que la base, au lieu d'être sur une feuille séparée. Mais si vous voulez néanmoins, pour la base, toujours prendre le reste des colonnes vous auriez intérêt à utiliser plutôt PlgUti:
VB:
PlgUti(Me.[D2]).Name = "Base"
 

Discussions similaires


Haut Bas