Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 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
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: 17

Didier Quilghini

XLDnaute Nouveau
La macro en cours pour cette opération et sur laquelle je bloque est la A
 

wDog66

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

Didier Quilghini

XLDnaute Nouveau

 

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…