XL 2013 Nommer plage Dynamique en VBA [RESOLU]

CelluleVide

XLDnaute Occasionnel
Bonjour,
J'ai créer une macro pour nommer une plage a partir des demandes utilisateur:
il clique sur la celulle de début
il donne le nombre de colonnes de la plage
il donne le nom voulu
La macro definit et nomme la plage en fonction de ces infos (le nombre de ligne etant variable)
Je voudrais maintenant pouvoir nommer une plage dynamique (utilisant DECALER) en partant des memes saisies utilisateur mais je bloque sur la syntaxe VBA de la formule.
Voir le fichier en PJ.
 

Pièces jointes

  • Selection plage.xlsm
    21.9 KB · Affichages: 77

vgendron

XLDnaute Barbatruc
Hello

avec ce code
VB:
Sub Nommer_Plage_Dyn()
'
' Nommer_Plage_Dyn Macro
'
Set Rng = Application.InputBox("Premiere cellule?:", Type:=8) ' demande la selection de la 1ere cellule
    Nb_colonne = Application.InputBox("SUR COMBIEN DE COLONNES?", "NB DE COLONNES?", Type:=1) ' nombre de colonnes
    Laplage = Application.InputBox("Nom de la plage?", "Nom de Plage", Type:=2) ' Nom de la plage
    Set Plage = ActiveSheet.Range(Rng.Address)

    deb = Cells(Rng.Row, Rng.Column).Address
    On Error Resume Next
    ActiveWorkbook.Names(Laplage).Delete
    On Error GoTo 0

'
    ActiveWorkbook.Names.Add Name:=Laplage, RefersTo:="=OFFSET(" & deb & ",,,COUNTA(Feuil1!$B:$B)-1," & Nb_colonne & ")"
    'ActiveWorkbook.Names(Laplage).Comment = ""
End Sub
 

CelluleVide

XLDnaute Occasionnel
Hello Vgendron,
Merci, j'ai modifié ton code pour que, au cas ou la cellulle de départ ne soit pas en 2eme ligne, cela soit pris en compte: Mais comment faire pour que COUNTA s'applique a la colonne de la 1ere cellule selectionnée?

Sub Nommer_Plage_Dyn()
'
Set Rng = Application.InputBox("Premiere cellule?:", Type:=8) ' demande la selection de la 1ere cellule
Nb_colonne = Application.InputBox("SUR COMBIEN DE COLONNES?", "NB DE COLONNES?", Type:=1) ' nombre de colonnes
Laplage = Application.InputBox("Nom de la plage?", "Nom de Plage", Type:=2) ' Nom de la plage
Set Plage = ActiveSheet.Range(Rng.Address)

deb = Cells(Rng.Row, Rng.Column).Address
On Error Resume Next
ActiveWorkbook.Names(Laplage).Delete
On Error GoTo 0
Dim NbLig As Integer
NbLig = Rng.Row - 1
ActiveWorkbook.Names.Add Name:=Laplage, RefersTo:="=OFFSET(" & deb & ",,,COUNTA(Feuil1!$B:$B)-" & NbLig & "," & Nb_colonne & ")"
Range(Laplage).Select

End Sub
A+
 

vgendron

XLDnaute Barbatruc
Hello

en essayant ceci
VB:
Sub Nommer_Plage_Dyn()
'
' Nommer_Plage_Dyn Macro
'
' demande la selection de la 1ere cellule
Set Rng = Application.InputBox("Premiere cellule?:", Type:=8)

'on se déplace sur la deuxième ligne de la même colonne
First = Cells(2, Rng.Column).Address 'Range(Rng.Address).End(xlUp).Offset(1, 0).Address
   
'demande du nombres de colonnes
Nb_colonne = Application.InputBox("SUR COMBIEN DE COLONNES?", "NB DE COLONNES?", Type:=1) ' nombre de colonnes
'demande du nom de la plage
Laplage = Application.InputBox("Nom de la plage?", "Nom de Plage", Type:=2) ' Nom de la plage

On Error Resume Next
'si la plage existe déjà, on la supprime
ActiveWorkbook.Names(Laplage).Delete

On Error GoTo 0
'on créer la référence "$C:$C" de la colonne sélectionnée
adr = Left(Rng.Address, 2) & ":" & Left(Rng.Address, 2)

'on créer la zone dynamique
ActiveWorkbook.Names.Add Name:=Laplage, RefersTo:="=OFFSET(" & First & ",,,COUNTA(Feuil1!" & adr & ")-1," & Nb_colonne & ")"

Range(Laplage).Select
End Sub

PS: je suis reparti de mon code, sans ta modif pour la ligne 2
ta modif permet juste de commmencer à la ligne au dessus de celle que tu as sélectionnée..
j'ai donc modifié et commenté
 

Discussions similaires

Statistiques des forums

Discussions
312 310
Messages
2 087 122
Membres
103 479
dernier inscrit
Compta