Rapport de message :*
 

Re: Ma macro ne s'exécute pas

Titre du sujet : Re: Ma macro ne s'exécute pas
par Mth le 20/05/2013 17:55:47

Bonjour Eudocha, bonjour à tous

 

Je te remercie pour ton message, mais je te conseille de retirer très vite ton adresse mail en clair dans le forum, sans quoi les robots du net vont te repérer et ta boite mail sera envahie de spams crying.

Quant aux explications, c'est un peu l'esprit du site XLPages, si tu as l'occasion de lire des réponses de JeanMarie par exemple, tu verras qu'il prend soin de toujours expliquer les choses, ses posts sont souvent de véritables cours smiley

 

Concernant les listes de validation de l'onglet principal:

 

  1. Colonne A "Département": La liste de validation fait référence à la zone nommée "Départements". Tu peux le voir en sélectionnant une cellule colonne A et en cliquant dans le ruban sur l'onglet "Données" puis "Validation des données", dans la fenêtre de validation de données tu vois la source: =Departements

Pour voir à quoi correspond ce nom "Departements", dans le ruban onglet "Formules" tu cliques sur "Gestionnaire de noms", dans la fenêtre qui s'ouvre le nom "Departements" apparaît et en cliquant dessus tu vois qu'il fait référence aux cellules A1:C1 de l'onglet Tables, soit =Tables!$A$1:$C$1

 

  1. Colonne B "Axe": Dans le Gestionnaire de noms, apparaissent 3 zones nommées pour les Axes:

l'axe SANGHA faisant référence à la plage A2:A10 de l'onglet Tables soit:  =Tables!$A$2:$A$10

l'axe LIKOUALA : =Tables!$B$2:$B$6

CUVETTE_OUEST: =Tables!$C$2

Dans la colonne B de l'onglet principal, j'utilise la fonction INDIRECT() pour la liste de validation afin de faire référence à la zone nommée SANGHA LIKOUALA ou CUVETTE_OUEST qui est renseignée colonne A. La formule de la source de valilation de cette colonne B est =INDIRECT($A6) pour la première ligne.

 

  1. Colonne E "Village": Tu vois dans l'onglet "Tables"que j'ai organisé un peu différemment la liste des villages par rapport à ton fichier initial, les villages sont en colonne (colonne P) avec leur Axe à coté colonne O, et, point très important, ils sont triés par Axe.

Dans le gestionnaire de noms apparaît le nom "Village" qui fait référence aux cellules remplies de cette colonne P, avec cette formule:

=DECALER(Tables!$P$2;;;NBVAL(Tables!$P:$P)-1;)

C'est ce qu'on appelle une zone dynamique, tu trouveras quelques explications sur les zones dynamiques ICI.

Sur le même principe j'ai également nommé les axes de la colonne O, la zone nommée "Axe" est une zone dynamique qui fait référence aux cellules remplies de la colonne O avec cette formule:

=DECALER(Tables!$O$2;;;NBVAL(Tables!$O:$O)-1;)

J'utilise ces zones dynamiques Village et Axe dans la liste de validation de l'onglet principal colonne E. Cette liste a comme source:

=DECALER(Village;EQUIV($B6;Axe;0)-1;;NB.SI(Axe;$B6))

Un peu d'explications en complément de ce que tu trouveras dans le tutoriel sur les zones dynamiques:

- Point de départ de la fonction DECALER est la zone Village

- Le décalage de ligne est calculé avec EQUIV($B6;Axe;0)-1. La fonction EQUIV est bien expliquée dans l'aide Excel, elle permet d'indiquer la position d'un élément dans une plage. Ici, je cherche la position de la valeur en B6 (soit Epéna_Sud) au sein de la zone Axe. Cette formule renvoie 83, et je retire 1 pour tenir compte de la présence d'une entête colonne P. Si tu descends le long de cette colonne P tu trouves effectivement pour la première fois le libellé Epéna_Sud ligne 84

- Pas de décalage de colonne (les deux point-virgules sont l'un à coté de l'autre ce qui équivaut à zéro)

- Hauteur de la zone: elle est calculée grâce à: NB.SI(Axe;$B6), cette fonction renvoie le nombre de fois où apparaît le libellé cellule B6, dans la zone Axe. Ici cette fonction renvoie 14, il y a effectivement 14 lignes concernant Epéna_Sud dans la colonne P.

 

Pour finir, notre formule =DECALER(Village;EQUIV($B6;Axe;0)-1;;NB.SI(Axe;$B6)) part de la zone Village colonne P, se décale de 83 lignes vers le bas pour se retrouver en cellule P84, puis prend une hauteur de 14. Cette formule permet donc de définir toute la zone de P84 à P97 qui correspond à Epéna_Sud de la cellule B6 de l'onglet principal.

 

  1. Colonne F: Numéro Producteur.

Pour la gestion de ces numéros j'utilise les données de l'onglet "TableProducteurs".

La liste des Axes se trouve colonne A.

Dans la colonne D se trouve une liste déroulante permettant de choisir l'axe sur lequel on veut créer un producteur. Elle fait référence à la zone nommée ListeAxes, qui est simplement définie comme ceci: =TableProducteurs!$A$2:$A$16

La formule de la colonne E est décrite dans le post précédent.

A chaque modification de la colonne D de cet onglet "TableProducteurs", la macro (que tu peux voir dans le code de la feuille) copie les données colonnes D E F et les met colonnes I J K , mais en les triant (très important pour la suite) par axe  et par numéro de producteur.

C'est cette zone triée que j'utilise pour la validation de données de la colonne F de l'onglet principal.

Exactement sur le même principe, je nomme la zone NumProducteurs comme ceci:

=DECALER(TableProducteurs!$J$1;;;NBVAL(TableProducteurs!$J:$J)-1;)

Puis la zone AxesTriés comme ceci:

=DECALER(TableProducteurs!$I$2;;;NBVAL(TableProducteurs!$I:$I)-1;)

Je fais référence à ces zones dans la validation de données:

=DECALER(NumProducteur;EQUIV($B6;AxesTriés;0);;NB.SI(AxesTriés;$B6))

Tu reconnais là le même type de formule que pour les villages ci-dessus.

 

 

A partir de l'onglet principal, une fois que tu as mis en place une validation de données, tu peux sélectionner ta cellule, puis "Copier", sélectionner les cellues où tu souhaites mettre en place ta liste de validation, puis "Collage Spécial", choisir "Validation".

 

Voilà Eudocha, en espérant que cela puisse t'aider, si non dis nous.

A très bientôt smiley

 

mth