XL 2016 D'un formulaire personnalisé vers des feuilles nominatives

M&MSjaune

XLDnaute Nouveau
Bonjour,
à partir d'un formulaire complété en partie par une BDD selon le nom de personnes, je souhaiterai que chaque formulaire créé (par ligne) se copie et aille se ranger dans une feuille au nom de la personne nommée. Donc 1 feuille par personne avec 2, 3, 4... copie de formulaire selon le nombre de lignes occupées par la personne.
ex par rapport au fichier mis en PJ : dans la feuille "FICHE BALISEUR GR et GRP" lorsque je clique sur le bouton de liste en bas à gauche "010" cela génère un formulaire pré-rempli au nom de Fabrice. Je souhaiterai que ce formulaire se copie et aille se ranger dans une feuille "Fabrice". Quand je vais cliquer sur "030" cela va générer autre fiche formulaire au nom de Fabrice, il faudrait qu'elle aille aussi se ranger dans la même feuille "Fabrice". Lorsque j'enverrai sa fiche à Fabrice il aura ainsi toutes ses fiches formulaire sur la même feuille. De même pour les fiches formulaires de la feuille "FICHE BALISEUR PR".
Un petit + : ce serait bien que les feuilles nominatives soient rangées dans l'ordre alphabétique.
Merci de votre aide.
 

Pièces jointes

  • TABLEAU BALISAGE 2022.xlsx
    40.8 KB · Affichages: 29

M&MSjaune

XLDnaute Nouveau
Comme dans le Canard enchaîné, "Et pan ! sur le bec". Vous avez entièrement raison Job75.
J'avais mal fait mon ménage entre les différents post#. Du coup, c'est nickel ! je m'en vais réadapter tout ce beau travail au document officiel.
Merci beaucoup.
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @M&MSjaune , bonjour @job75
J'étais encore pris aujourd'hui ... J'ai suivi sur mon téléphone mais la dessus je ne code pas.

J'ai remarqué que dans ton modèle "FFRandonnée" était en police blanche, est-ce volontaire ?

J'ai également repris mon fichier, je pense que celui de Job75 fait l'affaire mais je tenais à finir ce projet de mon coté.
Les seules différences que je vois dans le résultat c'est que Job75, plus pragmatique, a réglé la hauteur de toutes les lignes de la liste des missions sur 45 et qu'il ajuste l'impression sur une seule page. Je me suis amusé à n'agrandir que celles qui le nécessitent, et j'ai conservé tes 2 pages du modèle initial ...
Du détail quoi.

Je t'ai ajouté une page d'accueil et j'ai supprimé l'appel des macros par raccourci (personnellement j'étais gêné par le CTRL+f qui est le raccourci pour la recherche, et en fait il n'y a pas beaucoup de raccourcis libres dans EXCEL) :
1646509930895.png

Les résultats vont dans l'arborescence située dans le répertoire contenant le fichier principal année lu dans le fichier principal comme Job75) :
1646510933601.png


Les temps d'exécution sur mon PC avec Office 2021 sont raisonnables :
1646512471882.png
1646512493537.png
1646512511564.png


Ci-joint ma dernière version avec deux exemples :
Amicalement
Alain

PS si tu utilises cette version, il y a des noms définis (je préfère cela aux adresses en dur dans le code) , regarde la liste pour une réadaptation éventuelle :
1646517463698.png
 

Pièces jointes

  • Fiches baliseur - Fabrice.xlsx
    50.3 KB · Affichages: 7
  • Lettre de mission - Fabrice.xlsx
    17.9 KB · Affichages: 9
  • Création fichiers V4.xlsm
    98.1 KB · Affichages: 11
  • 1646517304732.png
    1646517304732.png
    39.4 KB · Affichages: 25
Dernière édition:

M&MSjaune

XLDnaute Nouveau
Bonjour AtTheOne,
merci pour le boulot. Les boutons plutôt que les ctrl ça me plaît. J'ai lu effectivement que les ctrl+lettre sont assez limités. La réduction de la taille des lignes sur la lettre de mission ça me va aussi dans la mesure où je préfère que la dite lettre soit en recto verso sur 1 seule feuille papier. Comme il y a des baliseurs qui ont jusqu'à une quinzaine de lignes...ça m'arrange.
Cependant j'ai un bug et après plusieurs essais et recherche (et quelques heures) je suis coincé.
Plutôt que de copier la macro dans le classeur officiel, (je ne suis pas sûr de maîtriser cette manip), j'ai collé les lignes officielles (onglet GR et GRP) dans ton classeur. Il y a peine plus de lignes que dans l'exemple. J'ai reparamétré le bouton de liste en augmentant le nombre de lignes. Ça marche bien pour l'édition des fiches de CR. Rien à redire. Par contre pour l'edition des lettres de mission ça m'affiche : (en pj).
merci pour l'aide. M&MsJaune.

PS: en supprimant les noms pour t'envoyer le fichier modifié, j'ai réessayé et ça n'a édité que les missions concernées par l'onglet PR...
C'est pas trop confidentiel si je t'envoie le tableau avec les noms.
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    29.6 KB · Affichages: 27

AtTheOne

XLDnaute Impliqué
Supporter XLD
le fichier sans les noms.
Et je n'ai même pas encore recopié les vraies lignes dans la feuille PR.
Bonjour à toutes & à tous, bonjour @M&MSjaune

As-tu un message d'erreur quand ça plante ? Si oui peux-tu en faire une capture d'écran, parce que chez moi ça passe sur office 2007 et 2021 (id MS365).
Et regarde avec des espions ce que contiennent les variables SRép et Clef au moment du plantage ça m'aidera à comprendre.
J'ai gavé le fichier avec des prénoms tirés au hasard, ça prend un temps fou, mais ça ne plante pas !
1646815843249.png
1646815856433.png

Voir le fichier en PJ

Amicalement
Alain
 

Pièces jointes

  • Copie de Création fichiers V4 attheone.xlsm
    103.9 KB · Affichages: 10

job75

XLDnaute Barbatruc
Bonjour M&MSjaune, AtTheOne,

Avec le dernier fichier fourni par AtTheOne mes macros n'allaient pas du tout car trop de fichiers restaient ouverts en même temps, la méthode n'était pas bonne.

Je les ai donc complètement revues dans ce fichier (5).

J'en ai profité pour créer des boutons et ajuster les hauteurs des lignes des lettres de mission.

Nota : j'ai supprimé les noms qui existaient sur les lignes 38 et 211 de la 1ère feuille.

Edit : corrigé la formule en G2 de la feuille "FICHE BALISEUR PR".

A+
 

Pièces jointes

  • Création fichiers(5).xlsm
    89.5 KB · Affichages: 9
Dernière édition:

M&MSjaune

XLDnaute Nouveau
Bonsoir AtTheOne, Job75,

AtTheOne, j'ai essayé ta proposition : Je l'ai d'abord essayé telle quel. Ensuite j'ai opté pour un collage de mes infos sur ton fichier. J'ai collé mes noms bloc par bloc (espace par GR entre chaque ligne de couleur). Après chaque collage j'ai fait fonctionner les macros. L'une après l'autre. Après le collage d'un bloc, ça a planté. J'ai eu un message "erreur d'execution '1004' ". Du coup j'ai scruté ce qu'il pouvait y avoir de différent dans le bloc que je venait de coller : dans une des cellules, à la place d'un nom il y avait : "???". J'ai donc supprimé ces 3 points d'interrogation...Et ça a fonctionné!
C'est bizare, je ne pensais pas que ces 3 caractères puissent faire planter à ce point. J'ai fini en mettant la totalité de mes données, Bingo ! ça fonctionne. 🍾🍾
J'ai donc pu finaliser mon boulot et arriver au bout. YES!
Quelques bizarreries tout de même : quelques différences d'orthographe dans les noms (présence ou pas d'accent, majuscule ou minuscule, espace avant le nom) n'affectent pas la production de la feuille CR balisage. Tous les onglets y sont. Par contre pour chaque petite différence j'ai une lettre de mission.
Ce dernier cas me paraissant plus normal, ça m'a donné l'occasion de faire le ménage.
En tout cas jusqu'à présent tout fonctionne.
Dernière chose : si je veux modifier le mot de passe de protection des feuilles, dois-je intervenir aussi dans la macro en modifiant la mention du mot de passe ?
Je vais essayer aussi la version de Job75, le problème étant réglé, la curiosité reste.
Grand merci à tous les deux.
Et si vous voulez randonner dans des espaces plutôt préservés (on est 10 habitants au km2) n'hésitez pas à venir en Lozère, les sentiers sont bien balisés. Ce sera en partie grâce à vous.
Fabrice.
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonsoir à toutes & à tous, bonsoir @M&MSjaune, bonsoir @job75

Fabrice :
  • Pour le mot de passe oui il faut le changer en un seul endroit dans le projet VBA
    Module "M00_Déclarations" :
    Public Const MdP As String = "toto" ' >>>Mot de passe à modifier<<<
    Tu remplaces toto par ton mot de passe
  • Les ??? provoquent une erreur dans le nom des fichiers (caractère interdit, ça, j'aurais pu le tester, tout comme la longueur maximale du nom des feuilles qui est de 31 caractères, mais bon ...)
Job75 :
Je regarde ta solution, je vois que tu as aussi opté pour les dictionnaires, mais tu es plus efficace en terme de temps d'exécution, je fais un mixte de nos solutions par pure curiosité, à mon âge ça stimule les neurones et çà permet de progresser !

Amicalement
Alain
 

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re ...
Fabrice, pour les bizarreries sur les orthographes des noms, l'absence de différence entre majuscules et minuscules vient d'une option des Dictionary ( .CompareMode = TextCompare) que j'ai mise dans la génération des fiches et oubliée dans les lettres de missions !
Tu peux, pour être homogène, supprimer l'option dans le module M0_Fiches ou, et je penche plutôt pour cette deuxième solution, la rajouter dans le Module M03_Lettres :
Enrichi (BBcode):
Sub Lettres_Mission()
     Dim t#
     t = Timer
     Dim Lgn_Déb, Col_Déb    'Début des données exploitées
     Dim Col_Baliseurs, Col_Infos, i As Long, lgn_Fin As Long, j As Long, k, m As Long, c As Range, Nm As Name
     Dim Dic As New Scripting.Dictionary
     Dim Wsh_GR As Worksheet, Wsh_PR As Worksheet, Wsh_Lettre As Worksheet, Feuilles As Sheets, Sh As Worksheet
     Dim Col_Fin, Clef, Missions, Tb_Missions(), tbH
     Dim SRép$
     Dic.CompareMode = TextCompare
     SRép = chemin & "Lettres de Mission " & Feuil1.[H1] & "\" 'à adapter
...

Par contre je ne m'explique pas l'absence de distinction entre avec accent ou sans accent, ni celle avec ou sans espace en tête ??? Si quelqu'un sait, je suis preneur de l'information !

Autre chose que je n'avais malheureusement pas pensé de te signaler :
j'ai mis en référence la bibliothèque "Microsoft Scripting Runtime" dans mon projet pour faire une liaison anticipée du "dictionary", c'est sans doute la source des difficultés que tu as rencontré quand tu as voulu recopier mes macros dans ton projet, pour que cela fonctionne, il aurait fallu aller dans le menu Outils - Références et ajouter cette bibliothèque.

Sinon on peut faire une liaison tardive en utilisant les syntaxes :
Dim Dic as Object
Set Dic= CreateObject("Scripting.Dictionary")
au lieu de Dim Dic as New Scripting.Dictionary
Et en modifiant la syntaxe
Dic.CompareMode = TextCompare par Dic.CompareMode = 1

(La liaison anticipée permet en plus de bénéficier de la complétion des syntaxes, ce qui facilite la vie quand on écrit le code)

Amicalement
Alain
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof