Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Profane

XLDnaute Occasionnel
Bonjour a tous,
je me promene pour l'instant dans la région des boucles...vaste région
je crée en ce moment une routine permettant d'importer des fichiers et de les mettre en forme (nombre de colonnes différentes a chaque fois)
je cherche via la macro un nom de colonne par son contenu et une fois trouvé, je le renomme -> OK
par contre je voudrais bien le declarer en même temps via VBA sous le gestionnaire de noms --> la ça coince
voici mon probléme du jour et la macro qui l'accompagne :
Code:
Sub Nommer_plageCategorie()
Dim i As Integer
With Sheets("Import Hosting")
For i = 1 To 26
If .Cells(1, i) = "Service Type*" Then
.Cells(1, i) = "Category"
ActiveWorkbook.Names.Add Name:="=DECALER(Import Hosting!$F$2;;;NBVAL(Import Hosting!$F:$F)-1)"
'$F$2 devant être remplacé par la valeur cells(2,i) et $F:$F par la valeur columns(I)
Exit For
End If
Next i
End With
End Sub
merci a tous pour votre aide
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour.
Vous n'avez spécifié aucun des 4 paramètres possibles commençant par RefersTo (1 des 4 est obligatoire), et vous avez spécifié comme paramètre Name un nom incorrect, qui pourrait d'ailleurs peut être convenir comme valeur de RefersToLocal
Cordialement.
 
Dernière édition:

Profane

XLDnaute Occasionnel
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour Dranreb
oui effectivement, la syntaxe n'est pas des plus juste j'aurai du écrire
Code:
ActiveWorkbook.Names.Add Name:="Import Hosting!Categories", RefersTo:="=DECALER(Import Hosting!$F$2;;;NBVAL(Import Hosting!$F:$F)-1)"
mais cela ne solutionne pas le changement de variable....
une idée ?
 

Dranreb

XLDnaute Barbatruc
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour
Toujours pas bon : nom de feuille muni d'un espace qui impose d’être encadrée d'apostrophes aussi bien dans le nom que dans la formule et valeur pour paramètre RefersToLocal atribuée à RefersTo.
Mon conseil: attribuer une formule en notation A1 natif à RefersTo ou en notation R1C1 à RefersToR1C1 plutot qu'une formule en A1 local à RefersToLocal ou en L1C1 à RefersToR1C1Local. Les 4 marchent mais le local est moins portable.
Pour ne pas se tromper le mieux c'est d'enregistrer une nouvelle macro, et créer le nom à la main pendant que ça enregistre, puis de copier l'instruction engendrée, comme ça le local (français avec ";") est automatiquement converti en natif (anglais avec ",").
Cordialement
 

Misange

XLDnaute Barbatruc
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour
Ce que Dranreb te dit c'est :

1) tu lances l'enregistreur de macros
2) tu ouvres la fenêtre de dialogue du gestionnaire de noms et tu définis ton nom en tapant la formule decaler
3) tu arrêtes l'enregistreur de macros
4) tu lis dans l'editeur la bonne syntaxe.
5) tu récupères ce bout de code et tu le colles dans ta macro
 

Profane

XLDnaute Occasionnel
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour Misange
ca j avais compris, mais ce qui m interesse c est de generer la formule du decaler avec les valeurs cell correspondant à la bonne colonne trouvé (voir macro)
et via l enregistreur ca ne donne rien qui puisse m orienter dans ce sens
les valeur a implémenter dans la formule décaler sont : $F$2 devant être remplacé par la valeur cells(2,i) et $F:$F par la valeur columns(I)
 

Dranreb

XLDnaute Barbatruc
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour.
Essayez comme ça:
VB:
.Names.Add Name:="Categories", RefersToR1C1:="=OFFSET('Import Hosting'!R2C" & i & ",,,COUNTA('Import Hosting'!C" & i & ")-1)"
À +
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Cette syntaxe construit tout simplement une formule en style R1C1 par concaténation aux bons endroit du numéro de colonne
S'il n'y avait pas cette concaténation, i valant toujours 6, voici les 4 façons d'écrire la même chose:
RefersToLocal:="=DECALER('Import Hosting'!$F$2;;;NBVAL('Import Hosting'!$F:$F)-1)"
RefersTo:="=OFFSET('Import Hosting'!$F$2,,,COUNTA('Import Hosting'!$F:$F)-1)"
RefersToR1C1:="=OFFSET('Import Hosting'!R2C6,,,COUNTA('Import Hosting'!C6)-1)"
RefersToR1C1Local:="=DECALER('Import Hosting'!L2C6;;;NBVAL('Import Hosting'!C6)-1)"
Mais encore une fois, le local est à éviter, il ne marcherait plus sur une machine équipée d'un Excel en anglais.
À +
 

Profane

XLDnaute Occasionnel
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour
un oubli de ma part, mais ainsi le gestionnaire de noms et notamment la zone fait référence à la page "import Hosting" et pas au classeur, ce qui me pose comme soucis que je ne peux appeller d'une autre feuille la référence ainsi crée
Y a t il moyen de spécifier l'étendue (classeur) par macro lors de la création ?
car aprés cela n'est plus possible une fois crée...
merci d'avance
 

Dranreb

XLDnaute Barbatruc
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour.
Oui, j'avais vu, et cru que c'était fait exprès. Ajouter à la feuille le nom dépourvu de préfixe de feuille a le même effet que de l'ajouter au classeur préfixé de la feuille, comme vous sembliez le vouloir au #3. Notez qu'on peut quand même l'appeler d'une autre feuille en respécifiant ce préfixe. Mais c'est sûr que si ce nom est unique dans tout le classeur, ajoutez l'y sans préfixe.
Cordialement.
 

Profane

XLDnaute Occasionnel
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

Bonjour Dranreb, le forum
en fait si j'enleve le préfixe (with sheets("Import Hosting"), la boucle ne fonctionne plus
dans l'absolue j ai repris la formule sans le with et sans les valeurs récupérées par la boucle et effectivement cela fonctionne avec la bonne étendue ("classeur")
seul soucis , c'est comment récuperer la valeur de cell (I,1)...
 

Profane

XLDnaute Occasionnel
Re : Gestionnaire de nom :colonne en fonction d'une valeur trouvée

j ai repondu trop vite
donc voici le code corrigé
Code:
Sub Nommer_plageImp()
Dim i As Integer
'With Sheets("Import_Hosting")
For i = 1 To 26
    If Sheets("Import_Hosting").Cells(1, i) = "Service Type*" Then
    Sheets("Import_Hosting").Cells(1, i) = "Category"
    ActiveWorkbook.Names.Add Name:="Categories", RefersToR1C1:="=OFFSET(Import_Hosting!R2C" & i & ",,,COUNTA(Import_Hosting!C" & i & ")-1)"
.....................
.............................
et cela fonctionne, j avais peur qu en respécifiant a chaque fois le préfixe Sheets("Import_Hosting")...que ca ralentisse la macro, mais non ;-)
Merci Dranreb ;-)
 

Discussions similaires