XL 2016 Création de feuille en ajoutant une ligne dans un tableau (VBA)

tikazor

XLDnaute Nouveau
Bonjour,

Je tenais à remercier les contributeurs de ce post https://www.excel-downloads.com/threads/creer-un-menu-donglets.20040355/ (@Dranreb ; @Jacky67; @mapomme ; @lucarn).
Je cherchais depuis longtemps la possibilité de consigner des fiches sous forme de données, d'avoir également une version facilement imprimable et d’y avoir un accès en mode recherche facilitée.

Afin de faciliter la création de certaines fiches (représentées par une feuille "SU"), j’aimerai savoir s’il est possible de créer une fiche pour chaque ligne « nouvelle » ajoutée au tableau « t_suivi » dans la feuille « Suivi » ? Ou même modifier certaines données déjà enregistrées?

Je me mets tout doucement à la VBA, n’hésitez pas à me faire des retours sur le traficotage des codes que j’ai pu ajouter au fichier, je suis preneur de tout avis et conseil pour m’améliorer.

Merci de votre lecture.

Franck
 

Pièces jointes

  • Modèle animation.xlsm
    480.6 KB · Affichages: 10
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Tikazor,
J'ai rajouté ça à votre macro Worksheet_Activate de la feuille Suivi:
Code:
   ' Lit le tableau t_suivi, extrait le nom feuille, si cette feuille n'existe pas, il la crée.
   Dim N%, ind%, T, ws, NomFeuille$
    N = [t_suivi].Rows.Count    ' Nombre de lignes de t_suivi
    For ind = 1 To N
        T = Split([t_suivi[Code]].Item(ind), " ")
        NomFeuille = T(0) & " " & T(1)
        If FeuilleExiste(NomFeuille) = False Then               ' Si False alors la feuille n'existe pas
            ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)
            Worksheets(Worksheets.Count).Name = NomFeuille
        End If
    Next ind
Si j'ai bien tout suivi ! ;)
Lit le tableau t_suivi, extrait le nom feuille, si cette feuille n'existe pas, il la crée.
Mais comme il y a interaction avec vos propres macros, c'est à bien vérifier si c'est bien ce que vous recherchez.
 

Pièces jointes

  • Modèle animation.xlsm
    436.8 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
je suis preneur de tout avis et conseil pour m’améliorer.
Je n'ai pas pu m'empêcher, votre code dans Suivi est trop long et non optimisé.
En PJ un essai, je suis passé sur mon PC (Win 10 XL2007) de 6.48s à 0.58s soit 11 fois plus rapide pour beaucoup moins de code :
VB:
With Sheets("Suivi")
    L = 1
    For i = 4 To Worksheets.Count
        If Worksheets(i).Name <> "Suivi" Then
            For C = 1 To 26
                Tablo(L - 1, C - 1) = Worksheets(i).Range(Cellule(C - 1)) ' L-1,C-1 car Tablo commence en 0
            Next C
        End If
        L = L + 1
    Next i
    .Range("$A$5").Resize(L - 1, 26) = Tablo
End With
L'astuce est de passer par des arrays, un pour la liste des cellules à lire et un pour stocker les résultats. A la fin on restitue le tableau dans la page.
Il est extrêmement long d'écrire dans des cellules. Il vaut mieux l'éviter.
 

Pièces jointes

  • Modèle animation V4.xlsm
    434.7 KB · Affichages: 8

tikazor

XLDnaute Nouveau
Mon impatience me fait aller trop vite et en même temps je découvre plein de chose.
Au top le copié/collé Sylvanu, par contre la macro d'ajout de feuille me met une erreur de compilation (sub ou fonction non définie) à FeuilleExiste.

C'est en ayant des réponses que l'on remarque que nos questions ne sont pas très claires.
L'objectif de créer des feuilles via les nouvelles lignes du tableau est de pouvoir copier/coller les éléments des colonnes dans leurs cases attitrées. Et j'imagine qu'avec le code que tu m'as simplifié pour le copier/coller il y a possibilité de faire le chemin inverse en fonction soit des nouvelles créer soit de l'identification du nom de feuille.
 

Pièces jointes

  • Modèle animation.xlsm
    487.4 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
nos questions ne sont pas très claires.
Je confirme. 😂😂😂

La V4 n'est qu'une ré écriture de la construction du tableau. Normalement il fait strictement la même chose que ce que vous faites.
Pour ma première PJ, je lis ce tableau. De la colonne Code j'extrait le nom de la feuille
( SU xx - Y ). Si cette feuille n'existe pas je la crée. Ensuite c'est vous qui prenez la main avec :
1638887719844.png

Je ne touche pas au contenu des feuilles crées puisque c'est vous qui vous en chargez.

Comme apparemment c'est pas ça, essayez d'être plus clair.
- Le nom des nouvelles feuilles est il correct ?
- Doit on créer les feuilles non connues ?
- Doit on vous laissez construire le squelette de ces feuilles ?
- Que doit on en faire ensuite ?
 

tikazor

XLDnaute Nouveau
Effectivement, j'ai du mal recopié le code je ne l'avais testé directement de la V3. Sur la macro fonctionne.
Alors la création de page me créer une difficulté de mise en oeuvre , car il doit identifier certaines (beaucoup) lignes du tableau comme nouvelles car la fenêtre de création de modèle m'est demandé plusieurs fois et me créée effectivement des fiches vides.

- le nom des nouvelles feuilles doivent prendre la numérotation de : SU(numéro de feuille) - colonne A,B,C
- je n'ai pas compris cette question
- le squelette des feuilles dépend de la fiche Modèle
- la finalité des nouvelles lignes créées doit permettre de remplir une partie voir l'intégralité de la fiche nouvellement créée ( --> je veux passer par ce biais au niveau de la création de fiche car en fonction du programme ou activité certaine donnée seront identiques, les éléments qui changeront systématiquement la codification)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'ai vraiment du mal à suivre la philosophie du fichier.
Je ne pense pas qu'on puisse réaliser ce que vous voulez en utilisant la macro Worksheet_Activate de la feuille Suivi.
Car si j'ai bien suivi :
1- quand on sélectionne Saisie, on construit le tableau avec les feuilles existantes.
2- on ajoute une nouvelle ligne avec des données.
C'est à ce moment là qu'on doit créer la nouvelle feuille avec les données, et non quand on sélectionne la feuille.
Le mieux serait d'avoir sur la feuille Essai un bouton "Mettre à jour" qui balaierait la table pour créer et remplir les nouvelles feuilles. Etes vous d'accord ?
Dernier point :
- le nom des nouvelles feuilles doivent prendre la numérotation de : SU(numéro de feuille) - colonne A,B,C
Quelles colonnes A,B,C ? Ne serait ce pas plus simple de faire :
VB:
=(GAUCHE(C4;1)&STXT(C4;CHERCHE(" ";C4)+1;1)&" "&C1&C2&"-"&C3)
 

tikazor

XLDnaute Nouveau
Oui, Sylvanu si le bouton facilite la création et l'ajout de données effectivement autant l'utiliser.

Dans le dernier fichier que j'ai chargé j'ai mis à jour le tableau t_suivi en ajoutant 3 colonnes en début de tableau. Car lors de la création de ligne ceux sont les données dans les colonnes A,B et C qui vont déterminer en partie le nouveau nom de la feuille.

La philosophie du fichier est d'avoir à disposition l'ensemble des données utiles dans ma pratique pro (consigner, enregistrer en pdf, imprimer).
Le fichier rempli 80% de ce que j'attends. A mon sens, il me manque la possibilité de gérer les fiches directement via le tableau de données. Ce qui me facilitera la tâche lorsque j'aurai un grand nombre de fiche à créer ou à utiliser.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Question : Quad on crée une feuille, c'est bien la feuille Modèle que l'on duplique ?
Dans ce cas on peut se passer des deux Msbgox :
Voulez-vous en faire une feuille de type 'Modèle' ?
Voulez-vous nommer cette nouvelle feuille avec ...
et le faire en auto, copie modèle + nommage + remplissage. Non ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
D'après ce que j'ai compris, le nom de Feuille c'est "SU xy-z Nom" avec
x=1 pour présentiel, c'est le seul type. Y en aura t-il d'autres ?
Pour y :
1 Vie de la formation
2 Création du groupe
3 Être un formateur Unplugged
4 Qualité d'implantation du programme
Nom c'est la colonne E
Mais z c'est quoi ? Comment le calcule t-on ?
 

tikazor

XLDnaute Nouveau
Pour le moment

colonne action :
0=distanciel
1=présentiel
2=hybride

Y est lié au numero du module comme tu l'as noté
Z est le numéro de l'activité dans le module, traditionnellement l'accueil café étant la premier moment introduisant une formation est notée activité n°0. Ce chiffre est finalement semi-aleatoire en fonction de la construction de la formation.
 

Statistiques des forums

Discussions
314 722
Messages
2 112 195
Membres
111 462
dernier inscrit
ymd76