XL 2019 Définir un nom d'un champ lors d'une macro

Didier Quilghini

XLDnaute Nouveau
Bonjour à tous et merci d'avance pour votre aide.
Voici mon problème, j'ai simplifié la grosseur des tableaux pour une meilleure compréhension, enfin je l'espère.
Dans une même feuille j'ai deux tableaux qui sont :
Tableau1 : A1;F10
Tableau2 : G1;L11
Donc même dimension.
A l'intérieur du Tableau1, j'ai un champ, par exemple B1;F9 dont un nom lui a été affecté, NOM, par ex.
Le Tableau2 n'a aucun nom de défini.
Donc maintenant ma macro.
1/ je rends active la cellule G1 > Je sais faire
2/ J'annule le nom défini dans le Tableau1 > Je sais faire
3/ Je veux maintenant donner le nom annulé précédemment, NOM, aux cellules G1;L9..... Mais sans utiliser les adresses G1;L9, mais plutôt la ligne/colonne de départ vers la ligne/colonne d'arrivée sachant que le champ sera identique à celui du Tableau1 et que le départ de création du champ à nommer est la cellule active.
Tout ceci par ce que cette opération se réalisera a nouveau avec un Tableau3, Tableau4 etc.
Pouvez vous être précis dans vos réponses car je ne suis pas un grand expert, mon niveau si situe à créer des macros non complexes.
Merci encore pour votre aide.
Didier
 

Didier Quilghini

XLDnaute Nouveau
Je n'ai pas vu un seul tableau dans votre classeur, que des plages classiques.
Peut être tout simplement comme ça :
VB:
Sub A()
   ThisWorkbook.Names.Add "BgtAnnée", Activcell.Resize([BgtAnnée].Rows.Count, [BgtAnnée].Columns.Count)
   End Sub
Ah oui vous avez raison, erreur de ma part, ce ne sont pas des tableaux au sens Excel.... sorry. Je vais tenter votre solution. Merci beaucoup !! Sympa.
 

vgendron

XLDnaute Barbatruc
Hello le fil

par curiosité, je suis allé ouvrir le fichier
je pense qu'il y a du ménage à faire et surement pas mal d'optimisations

1) des modules vides.. ca ne sert à rien et ca "pollue"
2) Vu l'écriture des macros, et la profusion de .select je pense (je me trompe peut etre) que tu es surtout passé par l'enregistreur de macro "pure et simple" ==> aucun jugement ici.. je l'ai fait moi meme quand j'ai débuté
mais c'est pour ca que je dis qu'il y a des optimisations à faire

pour la macro A: à partir de quelle feuille est elle lancée?

tes tableaux 1 et 2: où sont ils ?
et l'utilisation de tables structurées est surement une piste qu'il faut creuser
en leur donnant un nom adéquat (t_2023 t_2024....) la récupération de données sera surement simplifiée
 

Didier Quilghini

XLDnaute Nouveau
Hello le fil

par curiosité, je suis allé ouvrir le fichier
je pense qu'il y a du ménage à faire et surement pas mal d'optimisations

1) des modules vides.. ca ne sert à rien et ca "pollue"
2) Vu l'écriture des macros, et la profusion de .select je pense (je me trompe peut etre) que tu es surtout passé par l'enregistreur de macro "pure et simple" ==> aucun jugement ici.. je l'ai fait moi meme quand j'ai débuté
mais c'est pour ca que je dis qu'il y a des optimisations à faire

pour la macro A: à partir de quelle feuille est elle lancée?

tes tableaux 1 et 2: où sont ils ?
et l'utilisation de tables structurées est surement une piste qu'il faut creuser
en leur donnant un nom adéquat (t_2023 t_2024....) la récupération de données sera surement simplifiée
Hi, Merci pour le commentaire.
Oui, je ne suis pas un pro des macros et je fais ça pour le fun et optimiser ... mes petites cellules grises à défaut du programme ah ah ah ... C'est vrai!
Alors concernant la Macro A partira de la cellule O;3 pour 2025, de la cellule AA;3 pour 2026 et ainsi de suite.
C'est la macro Fin_de_Mois qui l'y amènera.
La feuille Bgt Mois récupère des cellules nommées BgtAnnées les données avec des formules rechercheH afin de faire une synthèse des comptes pour un mois donné de l'année en cours puis des autres années quand elles viendront.
C'est pour cela que je souhaite lors d'une procédure de fin d'année, le 1er janvier 2025,par exemple, que le champ nommé en 2024 de C3..N27 (BgtAnnée), soit annulé sur cette feuille ( ça c'est fait et OK), et recrée dans le nouveau budget de l'année 2025, soit O3..Z27. Toujours pour alimenter ma feuille Bgt Mois.
Et comme l'opération se reproduira en 2026, puis en 2027 etc.. J'ai besoin que ma macro ne définice pas ces nouveaux champs avec les coordonnées O3..Z27, mais à partir de la cellule active et pour un nombre de colonnes et de lignes de façon à recrée un champ quel que soit l'année...
Voila ...
Quant aux mises à jour ( mois ou année) elles sont indiquées à l'utilisateur quand il ouvre le fichier et qu'il a l'écran d'accueil. Si la date du jour est > à la date qui se trouve dans le fichier, les instructions de procédures apparaissent et la macro peut être lancée avec le petit bouton bleu ( qui est inactif si la date du jour est <= la date du fichier.
Voila en gros ma salade .... :D
Ah non je n'ai pas crée de tableau dans le sens du terme d'excel...
 

Didier Quilghini

XLDnaute Nouveau
Bonjour.
Pour décaler de 12 colonnes à droite la référence du nom "BgtAnnée", pas besoin de sélectionner quoi que ce soit, c'est :
VB:
ThisWorkbook.Names.Add "BgtAnnée", [BgtAnnée].Offset(, 12)
.
1717914407225.png

Je viens de le faire.... Voila la réponse, qu'est ce que je fais de pas bien ?
J'ai posé le curseur en O3, je n'ai pas annulé le nom BgtAnnée.
 

vgendron

XLDnaute Barbatruc
Hello

Dans ta macro findemois
en début de macro, tu active la feuille Bgt, et ensuite tu fais tout un tas de copier coller "valeur"
mais tout ca à partir de cette ligne
selection.copy 'Copie la cellule active (Ligne 17 Colone Mois -1)
==> comment et ou est défnie cette selection??
j'ai l'impression que tu fais des selections dans une macro avant de lancer une autre macro.. Mauvaise idée..
il suffit de faire un clic n'importe ou pendant l'execution de tes macros pour tout planter...
 

vgendron

XLDnaute Barbatruc
Re,

Comme j'avais commencé, et si ca t'interresse

1) on est bien d'accord que le fichier posté est incomplet? (tes macro GB GC GD travaillent sur un graphique 9 que je ne vois nulle part.. et comme tu ne travailles que sur des activesheet, activecell.. on a aucune idée de quelle feuille est censée être utilisée..

2) j'ai supprimé tous les modules vides, et renommés les autres pour qu'on s'y retrouve un peu mieux

3) j'ai créé une macro Gxx qui peut remplacer les 3 GB GC GD: il suffit de saisir l'année

4) j'ai modifié / simplifié les macros pour afficher et masquer les comptes de la feuille Cpts
==> c'est plus propre, pas besoin d'avoir 10000 lignes vides avec une MFC (ca pollue la feuille et ca grossit/ralenti le fichier inutilement

5) macro A
5-1) Dans la feuille Bgt, j'ai créé des tables structurées t_Bgt_2024, t_Bgt_2025.... t_Bgt_2028
elles vont toutes de la ligne 4 à la ligne 28, et ont 12 colonnes (12 mois)
5-2) la macro utlise la bonne table (selon l'année) pour créer la plage nommée "BgtAnnée"

6) macro Saisie_Opération
je ne comprend pas ce qu'elle fait... elle copie colle des données vides...?

7) onglet Projection
j'y vois des tableaux qui vont chercher des données dans la feuille Bgt
j'ai modifié les formules pour qu'elles exploitent les tables structurées que j'ai créées
j'ai aussi créé une macro "Nouvelle projection" qui te permet d'ajouter automatiquement une nouvelle table de projection: suffit de saisir l'année souhaitée


8) macro "Fin_de_Mois"
j'ai juste commencé à modifier le code pour éviter les activate, select...

l'ennui, à force de activecell.offset.select.. on ne sait plus ce que ca fait à quel endroit (à moins de suivre la macro pas à pas),

globalement
les 4 lignes
cellule.select
cellule.copy
cellule.offset.select
cellule.offset.paste

ca se remplace par
Celoffset=cellule.value

et
cellule.select
cellule.copy
cellule.pastespecial values;..

ca se remplace par
cellule=cellule.value
 

Pièces jointes

  • Gest_Compte_MaisonVer_2.xlsm
    253.8 KB · Affichages: 2

Didier Quilghini

XLDnaute Nouveau
Re,

Comme j'avais commencé, et si ca t'interresse

1) on est bien d'accord que le fichier posté est incomplet? (tes macro GB GC GD travaillent sur un graphique 9 que je ne vois nulle part.. et comme tu ne travailles que sur des activesheet, activecell.. on a aucune idée de quelle feuille est censée être utilisée..

2) j'ai supprimé tous les modules vides, et renommés les autres pour qu'on s'y retrouve un peu mieux

3) j'ai créé une macro Gxx qui peut remplacer les 3 GB GC GD: il suffit de saisir l'année

4) j'ai modifié / simplifié les macros pour afficher et masquer les comptes de la feuille Cpts
==> c'est plus propre, pas besoin d'avoir 10000 lignes vides avec une MFC (ca pollue la feuille et ca grossit/ralenti le fichier inutilement

5) macro A
5-1) Dans la feuille Bgt, j'ai créé des tables structurées t_Bgt_2024, t_Bgt_2025.... t_Bgt_2028
elles vont toutes de la ligne 4 à la ligne 28, et ont 12 colonnes (12 mois)
5-2) la macro utlise la bonne table (selon l'année) pour créer la plage nommée "BgtAnnée"

6) macro Saisie_Opération
je ne comprend pas ce qu'elle fait... elle copie colle des données vides...?

7) onglet Projection
j'y vois des tableaux qui vont chercher des données dans la feuille Bgt
j'ai modifié les formules pour qu'elles exploitent les tables structurées que j'ai créées
j'ai aussi créé une macro "Nouvelle projection" qui te permet d'ajouter automatiquement une nouvelle table de projection: suffit de saisir l'année souhaitée


8) macro "Fin_de_Mois"
j'ai juste commencé à modifier le code pour éviter les activate, select...

l'ennui, à force de activecell.offset.select.. on ne sait plus ce que ca fait à quel endroit (à moins de suivre la macro pas à pas),

globalement
les 4 lignes
cellule.select
cellule.copy
cellule.offset.select
cellule.offset.paste

ca se remplace par
Celoffset=cellule.value

et
cellule.select
cellule.copy
cellule.pastespecial values;..

ca se remplace par
cellule=cellule.value
Hello Vegendron,
Je viens de lire votre message.
Tout d'abord, merci pour toute l'attention portée à mon message, vraiment.
Vous êtes allé bien plus loin que ma demande (qui est résolue) en étudiant mon travail et en apportant votre savoir faire de façon plus générale.
J'apprécie beaucoup et je vais prendre le temps de regarder votre travail, qui sans nul doute va me permettre de m'améliorer. Je reviendrai vers vous rapidement.
Bonne journée
 

vgendron

XLDnaute Barbatruc
Hello
j'aurais du ajouter ceci: un peu de lecture simple pour comprendre et savoir utiliser les table structuréées


Bonne journée
 

Discussions similaires

Statistiques des forums

Discussions
312 864
Messages
2 093 002
Membres
105 593
dernier inscrit
Damien49