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
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Les propriétés Range d'un ListObject sont Range, HeaderRowRange, DataBodyRange et TotalRowRange. Un élément ListColumn d'intitulé de colonne comme clé dans sa collection ListColumns possède aussi les Range et DataBodyRange. Un élément ListRow de sa collection ListRows n'a que Range.
Mais du coup, êtes vous sûr de la nécessité de leur donner encore un nom supplémentaire ?
 
Dernière édition:

Didier Quilghini

XLDnaute Nouveau
Bonsoir.
Les propriétés Range d'un ListObject sont Range, HeaderRowRange, DataBodyRange et TotalRowRange. Un élément ListColumn d'intitulé de colonne comme clé dans sa collection ListColumns possède aussi les Range et DataBodyRange. Un élément ListRow de sa collection ListRows n'a que Range.
Mais du coup, êtes vous sûr de la nécessité de leur donner encore un nom supplémentaire ?
Bonsoir Dranreb
Je ne donne pas un nom supplémentaire, j'ai annulé le nom pour le "transférer" sur l'autre tableau car à un autre endroit un travail s'effectue, reprenant ce nom de champ.
Mais si c'est vraiment trop technique à réaliser, je transformerai la façon de faire.
En fait je pensais qu'il était possible de définir ce nom de champ avec deux ou trois lignes de code sans rentrer dans des fonctions que malheureusement je ne maitrise pas.
Merci quand même pour votre réponse.
Didier
 

Dranreb

XLDnaute Barbatruc
Précisez un peu mieux ce que vous souhaitez faire concrètement.
Exemple: copier les valeur d'une colonne intitulée "Toto" d'un Tableau1 tans une colonne intitulée "Tata" d'un "Tableau2"
Le plus simple c'est de faire :
VB:
[[Tableau2[Tata]].Value = [Tableau1[Toto]].Value
mais on peut aussi faire :
VB:
Feuil2.ListObjects("Tableau2"].ListColumns("Tata").DataBodyRange.Value _
   = Feuil1.ListObjects("Tableau1").ListColumns("Toto").DataBodyRange.Value
 
Dernière édition:

Didier Quilghini

XLDnaute Nouveau
Précisez un peu mieux ce que vous souhaitez faire concrètement.
Exemple: copier les valeur d'une colonne intitulée "Toto" d'un Tableau1 tans une colonne intitulée "Tata" d'un "Tableau2"
Le plus simple c'est de faire :
VB:
[[Tableau2[Tata]].Value = [Tableau1[Toto]].Value
mais on peut aussi faire :
VB:
Feuil2.ListObjects("Tableau2"].ListColumns("Tata").DataBodyRange.Value _
   = Feuil1.ListObjects("Tableau1").ListColumns("Toto").DataBodyRange.Value
Hello Dranreb
Non, ce n'est pas copier des valeurs. Surtout pas.
Il s'agit dans le tableau 2 - oublions le tableau 1- de définir un champ de plusieurs cellules, dont on connait la surface, puis lui donner un nom. Ce champ démarre d'une cellule dite active et quant il defini, on lui donne un nom.
Et sans utiliser les références habituelles (range(a1;g6) par ex.
 

Didier Quilghini

XLDnaute Nouveau
Comme ça ?
VB:
Dim Rng As Range
Set Rng = Intersect(ActiveCell.Resize(100000, 1000), [Tableau2])
ThisWorkBook.Names.Add "Toto", Rng
Mais à quoi va servir ce nom ?
Je vous envoie mon fichier.
C'est une gestion de budget familial pour mon fils.
Lui, ne connaissant rien à excel, j'automatise les taches de fin de mois - ça facile et c'est fait- et les taches de fin d’année, c'est la que tout se complique.
L'onglet Bgt Mois récupère les données de l'onglet Bgt. L'onglet Bgt contient un tableau année 2024, puis 2025, puis 2026 ETC..
Et c'est dans le champ nommé BgtAnnée que les données sont récupérées. Il faut donc pour 2025 et les années suivantes définir ce champ BgtAnnée dans les tableaux correspondants.
 

Pièces jointes

  • Gest_Compte_MaisonVer_2.xlsm
    670.7 KB · Affichages: 15

Didier Quilghini

XLDnaute Nouveau
Je vous envoie mon fichier.
C'est une gestion de budget familial pour mon fils.
Lui, ne connaissant rien à excel, j'automatise les taches de fin de mois - ça facile et c'est fait- et les taches de fin d’année, c'est la que tout se complique.
L'onglet Bgt Mois récupère les données de l'onglet Bgt. L'onglet Bgt contient un tableau année 2024, puis 2025, puis 2026 ETC..
Et c'est dans le champ nommé BgtAnnée que les données sont récupérées. Il faut donc pour 2025 et les années suivantes définir ce champ BgtAnnée dans les tableaux correspondants.
La macro en cours pour cette opération et sur laquelle je bloque est la A
 

wDog66

XLDnaute Junior
Bonjour Didier

Je vous envoie mon fichier.
C'est une gestion de budget familial pour mon fils.
Lui, ne connaissant rien à excel, j'automatise les taches de fin de mois - ça facile et c'est fait- et les taches de fin d’année, c'est la que tout se complique.
L'onglet Bgt Mois récupère les données de l'onglet Bgt. L'onglet Bgt contient un tableau année 2024, puis 2025, puis 2026 ETC..
Et c'est dans le champ nommé BgtAnnée que les données sont récupérées. Il faut donc pour 2025 et les années suivantes définir ce champ BgtAnnée dans les tableaux correspondants.
Très sympa comme classeur ;) 👍

Ceci dit, quand on ne connait rien à Excel, mieux vaut se tourner vers une application toute prête !
Ca fait longtemps que je ne fais plus mes comptes sur Excel.. j'utilise MS Comptes bancaires

C'est payant, mais pas cher 29,90€ une fois, elle sait tout faire jusqu'à la gestion d'un portefeuille boursier 😜

Bonne soirée
 

Didier Quilghini

XLDnaute Nouveau
Bonjour Didier


Très sympa comme classeur ;) 👍

Ceci dit, quand on ne connait rien à Excel, mieux vaut se tourner vers une application toute prête !
Ca fait longtemps que je ne fais plus mes comptes sur Excel.. j'utilise MS Comptes bancaires

C'est payant, mais pas cher 29,90€ une fois, elle sait tout faire jusqu'à la gestion d'un portefeuille boursier 😜

Bonne soirée
Bonjour Didier


Très sympa comme classeur ;) 👍

Ceci dit, quand on ne connait rien à Excel, mieux vaut se tourner vers une application toute prête !
Ca fait longtemps que je ne fais plus mes comptes sur Excel.. j'utilise MS Comptes bancaires

C'est payant, mais pas cher 29,90€ une fois, elle sait tout faire jusqu'à la gestion d'un portefeuille boursier 😜

Bonne soirée
Oui je sais, mais c'est pour le fun et ça me permet de faire fonctionner mes petites cellules grises. Globalement c'est intéressant de construire quelque chose, là je bloque sur un truc technique mais sinon j'arrive a bien me débrouiller. Bonne soirée à vous aussi

 

Dranreb

XLDnaute Barbatruc
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
 

Discussions similaires

Statistiques des forums

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