Macro Référencement

Bonjour,

N'étant pas un as niveau VB, je fais appel à vos lumières pour un besoin spécifique.

Je souhaiterais référencer des documents respectant des conditions par une macro qui me permettrait:

  • de ne pas avoir des références en double
  • en sélectionnant les différents éléments (dans des listes déroulantes dans des msg box par exemple), il me crée automatiquement la référence, me la propose dans un msg box et une fois que j'appuie sur OK, il me la copie dans la cellule sur laquelle j'étais lorsque j'ai éxécuté la macro (j'espère que je suis clair jusqu'à présent).

Détails:

J'ai différents codes Type document

CO = Courrier

RE = Recommandé

PR = Prospectus

J'ai différents codes Lieu

01 = Résidence principale

02 = Bureau

03 = Résidence secondaire

Ensuite, j'ai un incémental sur 2 positions (de 01 à 99 donc)

J'ai différents codes Périmètre

FR = France

GR = Grèce

PO = Pologne

=> ce que je voudrais donc c'est aller dans la cellule où je veux que la référence soit copiée (aucune condition, je ferais en sorte de toujours aller dans la bonne cellule avant d'exécuter la macro) et éxécuter la macro:

  • premier msg box avec liste déroulante Type document qui apparait => je fais mon choix
  • deuxième msg box avec liste déroulante Lieu qui apparait => je faix mon choix
  • troisième point: concernant l'incrémental (une sorte de compteur), ce que je voudrais, c'est qu'il balaye l'ensemble des codes (se trouvent dans la colonne A, à partir de A6 inclus) qui auront comme référence après ces premières étapes par exemple PR.03. et qu'il me choisisse une position disponible (ex: j'ai deux codes PR.03.01.FR et PR.03.03.GR) => il faudra qu'il me attribue le PR.03.02. idéalement ou éventuellement le PR.03.04. s'il n'arrive pas à détecter les cassures.
  • quatrième point msg box avec liste déroulante Périmètre => je fais mon choix
=> Je valide en cliquant sur OK et la référence est copiée automatiquement dans la cellule où j'ai éxécuté la macro

Quelques précisions pour finir:

=> Le format de la référence est le suivant:

Type_document.Lieu.Incrémental.Périmètre => ce qui donne par exemple : PR.02.XX.FR => PR pour Prospectus ; 02 pour Bureau ; Incrémental (compteur sur 2 positions) et FR pour France

=> Bien entendu, le but c'est qu la référence soit unique (mais de toute façon avec le besoin que j'ai exprimé, il ne devrait pas y avoir de doublon)

=> Me donner la possibilité de modifier les différents codes cités plus haut (Type document, Lieu et Périmètre) facilement

Je reste à votre disposition pour toute question.

En espérant avoir été clair

Merci beaucoup par avance à celles et ceux qui voudront bien m'aider dans ce casse tête pour moi. mais qui me facilitera grandement la vie.

EnGo

Bonsoir EnGo,

Personne ne t'a répondu, je me lance donc.

Je n'ai pas fait exactement ce que tu m'as demandé, car il y avait plus simple avec un userform. Voici un exemple à adapter selon tes besoins ;

17engov01.xlsm (18.72 Ko)

Le code n'est pas optimisé, mais il ne devrait pas y avoir de doublons sauf si tu intervient manuellement.

[Edit] : double clic dans une cellule pour afficher l'UF

Merci beaucoup Benead c'est juste super ce que tu as produits vraiment merci et encore merci.

Il y a juste 3 points qui ne correspondent pas totalement à mes attentes, si tu peux faire quelque chose, je serai ravi (parce que moi et VB ca fait deux):

- 1er point :

Est-il possible de lancer le userform uniquement en double cliquant sur les cellules de la colonne A ? Et par la même occasion, interdire une saisie manuelle lorsque la cellule est vide et pouvoir la modifier lorsqu'elle est déjà renseignée (vu que je dois récupérer un fichier avec un historique je ne voudrais pas trop me restreindre non plus => mais si cela n'est pas possible ce n'est pas grave (par contre si on pouvait lancer le userform uniquement sur les cellules de la colonne A ca ce serait bien).

- 2ème point (ce sera peut etre un peu long, j'en suis dsl):

Admettons qu'aucune référence n'existe dans le fichier. Je crée les références CO.01.01.FR puis C0.01.03.FR puis C0.01.05.FR et enfn CO.01.06.FR dans les cellules A1 à A4. Quand je double clique sur A5, A6 et A7 pour créer les codes commençants par CO.01 il me propose bien en priorité CO.01.02 puis CO.01.04 et ensuite CO.01.07. Cependant, cela est vrai lorsque je vais choisir FR come périmètre. Mais si je souhaite créer le code CO.01.01.GR par exemple, il me propose CO.01.02. avant que je choisisse le Périmètre et quand j'en arrive au Périmètre il garde le CO.01.02.GR alors qu'il devrait passer au CO.01.01.GR => je ne sais pas si je suis clair. C'est plus ou moins pour ça que dans mon expression de besoins je disais qu'il fallait que l'incrémental (le compteur) se fasse après le choix du périmètre => enfin selon moi, cela doit etre beaucoup plus clair pour toi.

Juste pour finir, une question: dans le code, si je rajoutes d'autres types documents, lieux et pérmiètre, le userform se met bien à jour ou c'est limité à 3 propositions comme écrit dans mon premier message ? Si je peux en rajouter, y a t-il une limite ?

En tout cas merci encore beaucoup pour ton aide précieuse. Je serai vraiment ravi si tu peux m'aider à nouveau sur ces différents points (surtout le deuxième).

Bon week-end

EnGo

Bonjour

Point 1) Maintenant tu le lances en cliquant sur une cellule de la colonne A et uniquement cette colonne.

On ne peut plus modifier la colonne A vide ou pas (attention, cette méthode n'est pas très fiable (si on sélectionne la ligne ou peut modifier la colonne1...), il faudrait pourvoir protéger la feuille pour que ce soit plus efficace.

Modifier pour récupérer un historique : fais-le avant d'importer tes données, sinon rien n'empêche l'utilisateur de pouvoir modifier une référence qu'il vient de créer. Si toi, tu veux pouvoir le faire, rien ne te bloquera pour modifier une référence mais prendre une référence déjà existante...

Point 2) En fait, c'est un problème de compréhension, car tu ne veux simplement pas de doublon sur l'ensemble des caractères de la référence ? Que le compteur incrémental soit à la fin ou milieu ne change rien, il fallait juste dire incrémentation d'un compteur pour ne pas avoir de doublons... Attention : quand le compteur sera arrivé à 99, il passera à 3 chiffres.

Point 3) J'ai ajouter une feuille "Paramétrage", les valeurs se mettent dans les listes par ordre croissant de la ligne. Si tu veux un ordre précis, il faut insérer les valeurs à l'endroit que tu souhaites.

7engov02.xlsm (31.10 Ko)

Bonjour Benead,

Merci beaucoup, c'est vraiment magique ce que tu as fait (à mon niveau en tout cas). Ca va tellement me faciliter la vie tu ne peux pas savoir.

Juste trois petites remarques:

1: Quand je fais un test sur l'exemple suivant admettons => je crée la référence PR.03.01.FR jusqu'à PR.03.99.FR Lorsque je veux créer une nouvelle référence PR.03 avec le périmètre FR, il me propose bien l'incrémental 100 dans la fenêtre mais lorsque je clique sur "Créer" il ne me la copie pas dans la cellule en question (il ne se passe rien, c'est comme si je cliquer dans le vide). Est-ce normal et est-ce possible d'y remédier stp ?

2: Ce dernier point me pose problème. Admettons que j'ai des références en A1 A2 A3 et A5 et rien en A4. Lorsque je vais sur A4, le userform se lance, je fais mes choix et lorsque je clique sur "Créer" la nouvelle référence est copiée en A6 et non en A4, cellule où j'ai lancé le userform. Est-ce possible de remédier à cela stp ?

3: Tu as raison, c'est trop restrictif d'interdire la modification. Peut-on, juste sur ce point, revenir à la version précédente en gardant juste le fait que l'on puisse lancer le userform en double cliquant sur les cellules de la colonne A et non dans les autres colonnes. Par contre, on laisse la possibilité de faire des modifications.

Pour le reste, tout marche du tonerre. C'est juste parfait et c'est ce que je voulais tout simplement. Merci de nouveau.

En espérant que je t'en demande pas trop avec mes dernières remarques mais promis après je ne t'embetes plus

EnGo

Point 1 : on compte le nb de caractères pour savoir si la référence est valide, donc maintenant je regarde si il y a au moins 11 caractères pour enregistrer la référence. L'idéal serait donc d'avoir une référence de type CO.01.xxx.FR et donc 12 caractères.

Point 2 : j'ai modifié l'événement pour que tu puisses faire un double clic uniquement dans des cellules vides. Si les cellules A20 et supérieures sont vides, si tu choisis ta référence en A23, la référence se met en A20. Veux-tu qu'elle se mette dans la cellule active soit A23 ?

Point 3 : Ok, pas de blocage.

6engov03.xlsm (30.26 Ko)

Merci de ton retour Benead.

1- Ok je vais gérer pour le nombre de caractères.

2- Je viens de tester mais le userform se lance toujours lorsque je double clic sur B23 ou C31 (toutes les cellules en fait). Peut-on faire en sorte que le userform se lance uniquement lorsque l'on double clic dans les cellules de la colonne A (peu importe qu'elles soients vides ou remplies). De plus, ce que je souhaiterais vraiment c'est que la référence nouvellement créée se copie dans la cellule active comme tu dis (là ou j'ai double cliqué pour lancer le userform). => si je double clique en A10 par exemple, ce que je voudrais c'est que le userform se lance et la référence se copie en A10 et non en A6 ( si A6 est vide).

Si t peux me gérer les 2 petits points de moj deuxième point je serai vraiment ravi

Merci d'avance

Ok, l'UF se lance maintenant uniquement en colonne A. Si tu double-clic sur une cellule dans lequel il y a une référence, on la remplace par la nouvelle, sans contrôle.

18engov04.xlsm (29.56 Ko)

Juste deux mots: parfait et merci vraiment ! Ça marche nickel.

En plus j'ai vu que tu avais géré pour l'incremental sur 3 positions qui s'affiche maintenant. C'est parfait.

Encore merci


Juste deux mots: parfait et merci vraiment ! Ça marche nickel.

En plus j'ai vu que tu avais géré pour l'incremental sur 3 positions qui s'affiche maintenant. C'est parfait.

Encore merci

Bonsoir Benead,

Je ne voudrais pas abuser de ta gentillesse mais j'ai un besoin qui découle du premier que tu as réalisé (encore merci d'ailleurs) et qui en est très proche (pas de grosses différences).

Ce dont j'ai besoin c'est toujours de lancer un userform en colonne A (et uniquement en colonne A) en double cliquant dans la cellule et que la référence finale soit copiée dans la cellule active (où j'ai lancé le userform) => jusque là rien de nouveau.

Les nouveautés:

J'ai une liste Types Doc (PR et CO) => et uniquement ces deux types PR et CO (me laisser la main pour modifier les intitulés)

J'ai une liste Lieu pouvant être évolutive (comme actuellement)

J'ai une liste Listing 1 pouvant étre évolutive (nouveau)

J'ai une liste Listing 2 pouvant être évolutive (nouveau)

J'ai une liste Perimètre (comme actuellement)

=> Ce que je souhaite donc:

1er cas: lorsque je choisis PR dans la première liste Types Doc, il me propose les listes Lieu, Listing 1 et Périmètre pour me créer une référence respectant le format suivant: PR.XXX.XXX.XX (sans incrémental cette fois-ci)

2ème cas: lorsque je choisis CO dans la première liste Types Doc, il me propose les listes Lieu, Listing 2 et Périmètre pour me créer une référence respectant le format suivant: CO.XXX.XXX.XX (sans incrémental cette fois-ci)

=> On peut mettre les codes de ces différentes listes dans une feuille Paramétrage 2 par exemple qui fonctionnerait de la même manière que ce que tu as fait précédemment.

Et comme tu as pu le constater, je n'ai plus besoin d'incrémental dans ce besoin, ce qui facilite la chose je pense. La seule contrainte, c'est qu'il m'affiche un listing différent en fonction de mon premier choix dans la liste Types Doc, à savoir PR ou CO.

Encore une fois, je ne veux pas abuser de ta gentillesse mais je t'avoue que j'ai essayé de me débrouiller moi même aujourd'hui pour produire quelque chose sans succès. J'ai réussi à arrêter l'incrémental et ajouter une autre liste mais je n'ai pas réussi à respecter ma contrainte citée plus haut et lorsqu'il me créé quand même un réf (ne respectant le format voulu ) il ne le copiait pas dans la cellule lorsque je cliquais sur CREER. Donc c'est vraiment pour ça que je me permets de demander à nouveau ton aide.

Merci d'avance pour ton aide précieuse.

N'hésites pas si tu as des questions.

EnGo

Bonsoir,

J'ai fait un truc vite fait sur la base de la EnGoV4. Ce n'est pas très propre, mais tu verras la conception. J'ai fait de l'encodage simple pour que tu puisses comprendre et adapter en fonction de tes besoins.

4engov05.xlsm (26.28 Ko)

Merci Benead, ça marche nickel chrome. Je t'en suis vraiment très reconnaissant.

EnGo

Rechercher des sujets similaires à "macro referencement"