nommer des cellules exels en vba

sphinx266

XLDnaute Nouveau
Bonjour,

Je cherche à creer des listes de validations listant des données présentes dans d'autres feuilles du classeur. Pour cela, il est necessaire de nommer des plages de données, et la est mon problèmes.

Le nombre de listes déroulantes à concevoir est relativement important, plusieurs centaines. J'aurais souhaité, pour m'éviter à la fois de devoir creer ces liste et les noms, automatiser cette saisie en VBA.

Dans un premier temps je défini les plages de donnée concernée puis je les associe à la valeur d'une cellue d'une autre feuille excel dans laquelle je referencer l'ensemble des noms à donner.

Sub test_liste()
'
Dim NClasseur, NFRef, NFCons As String
Dim IFRef, IFCons, i, j, k As Integer
Dim lig, col As Integer
Dim PlgCons, PlgConsDeb, PlgConsLig As Range
Dim c_noms, d_noms, l_noms, v_noms As Chart

Init:
'===================================================================================================
' Initialisation des noms et index du classeur actifs et des feuilles utilisées
NClasseur = ActiveWorkbook.Name
NFRef = 1 'feuille consolidation
IFRef = 4 'feuille formulaire
lig = 3

'===================================================================================================
With Workbooks(NClasseur).Worksheets(2)
.Activate
Set PlgConsDeb = .Cells(lig, 3)
Set PlgConsLig = Range(Cells(1, lig), Cells(50, lig))
d_noms = ActiveWorkbook.Sheets(9).Cells(lig, 1).Value
c_noms = ActiveWorkbook.Sheets(9).Cells(lig, 2).Value
l_noms = ActiveWorkbook.Sheets(9).Cells(lig, 3).Value
End With

ActiveWorkbook.Names.Add Name:="d_noms", RefersToR1C1:="PlgConsdeb"
ActiveWorkbook.Names.Add Name:="c_noms", RefersToR1C1:="PlgConsLig"
ActiveWorkbook.Names.Add Name:="l_noms", RefersToR1C1:="=OFFSET(Plg,0,0,COUNTA(PlgConsDeb.name)-1,1)"

Je n'ai pas encore inseré de boucle dans mon code, je voulais voir dans un premier temps si le nommage des cellules fonctionné, ce qui n'est malheureusement pas le cas.

Le problème est surement simple, mais je suis depuis une journée dessus et je n'ai pas trouvé !

Merci pour votre aide

Magali
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : nommer des cellules exels en vba

Bonsoir Magali, bonsoir le forum,

Dans un premier temps, attention à la déclaration de tes variables !!! Tu peux en déclarer plusieur sur une même ligne mais tu dois en spécifier le type à chaque fois. Une variable dont le type n'est pas spécifié prend par défaut le type Variant très gourmand en mémoire.
Code:
Dim NClasseur As [COLOR=red]String[/COLOR], NFRef As [COLOR=red]String[/COLOR], NFCons As String
Dim IFRef As [COLOR=red]Integer[/COLOR], IFCons As [COLOR=red]Integer[/COLOR], i As [COLOR=red]Integer[/COLOR], j As [COLOR=red]Integer[/COLOR], k As Integer
Dim lig [COLOR=red]As Integer[/COLOR], col As Integer
Dim PlgCons [COLOR=red]As Range[/COLOR], PlgConsDeb [COLOR=red]As Range[/COLOR], PlgConsLig As Range
Dim c_noms As [COLOR=red]Chart[/COLOR], d_noms As [COLOR=red]Chart[/COLOR], l_noms As [COLOR=red]Chart[/COLOR], v_noms As Chart
Je n'ai pas compris aussi pourquoi tu déclarais les dernières variables comme Chart ?

Sinon pour nommer une plage tu peux faire beaucoup plus simple avec : Sheets(Ton_Onglet).Range(Ta_plage).Name=Ton_Nom... Avec un petite boucle tu devrais y arriver rapidement. En espérant t'avoir aidé.
 

sphinx266

XLDnaute Nouveau
Re : nommer des cellules exels en vba

Merci pour votre réponse. Effectivement votre solution est bcp plus siple. Il me reste cependant un problème.

Je nomme trois pages de données, pour les deux première, votre solution fonctionne. En revanche je ne sais pas comme l'appliquer à la troisième qui utilise les deux autres. Dans l'exemple precedent, je la nommais ainsi:

Code:
ActiveWorkbook.Names.Add Name:="l_noms", RefersToR1C1:="=OFFSET("d_noms",0,0,COUNTA("c_noms")-1,1)"

Je suis obligé de mettre des "" car si non il ne prend pas en compte les variables. Mais du coup, je me demande s'il ne les prends pas comme des champs textes. J'ai le même soucis lors de la déclaration de ma liste de validation:

Code:
"=SI(cells(i;2)<>"""";DECALER("d_noms";EQUIV(cells(lig;2)&""*"";"l_noms";0)-1;;SOMME((STXT("l_noms";1;NBCAR(cells(i;2)))=TEXTE(cells(i;2);""0""))*1));"l_noms")"

Merci et bonne soirée.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit