Spécifier l'étendue d'une plage de nom VBA

Fermé
ppalouza Messages postés 9 Date d'inscription vendredi 3 août 2018 Statut Membre Dernière intervention 5 septembre 2018 - Modifié le 6 sept. 2018 à 14:56
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 - 6 sept. 2018 à 18:07
Bonjour à tous!
Voila mon problème:
- je crée des plages de noms (3 par feuille) via une boucle for, sur chaque feuille de mon classeur
- Je souhaiterais pourvoir, en VBA, spécifier l'étendue des plages de noms crées (mettre cette étendue sur la page où elles sont crées) mon problème est ici, les plages crées sont globales et non spécifiques à une feuille
- sur la page globale, j'insère une nouvelle ligne en remplissant les cases avec une formule contenant les noms des 3 plages crées

Voici mon code VBA pour le tout:
Sub macro2()
Application.DisplayAlerts = False

Dim a As Long
Dim i As Long
Dim j As Long
Dim w As String
Dim D As String
Dim k As Long
Dim s As Long
Dim F As Long

a = InputBox("Veuillez rentrer l'année du marché ", "Insertion d'un nouveau marché", 2018)
i = InputBox("Renter la numéro de la première ligne: ", "Insertion d'un nouveau marché", 0)
j = InputBox("Renter la numéro de la dernière ligne: ", "Insertion d'un nouveau marché", 0)
w = InputBox("Veuillez nommer le nouveau marché", "Insertion d'un nouveau marché", "Nom")
D = InputBox("Résumez le nouveau marché en un mot clef: ", "Insertion d'un nouveau marché", "New")
k = j - i
s = i
F = ThisWorkbook.Worksheets.Count - 1
 
 For x = 5 To F
 
 Worksheets(x).Activate
 Rows("203").Select
 Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows("204").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    L = "_L"
    m = "_M"
    P = "_P"
    
    Set xrangeL = Range(Cells(203, 12), Cells(204, 12))
    ActiveWorkbook.Names.Add Name:=D & L, RefersToR1C1:=xrangeL
    Set xrangeM = Range(Cells(203, 13), Cells(204, 13))
    ActiveWorkbook.Names.Add Name:=D & m, RefersToR1C1:=xrangeM
    Set xrangeP = Range(Cells(203, 16), Cells(204, 16))
   ActiveWorkbook.Names.Add Name:=D & P, RefersToR1C1:=xrangeP
   Next
  Sheets(Sheets.Count).Activate
 
    
 For b = 1 To k
    Rows(s).Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    s = s + 1
    Next
    Range(Cells(i, 3), Cells(j, 3)).Select
 
    
    L = "_L"
    m = "_M"
    P = "_P"
    
    Set xrangeL = Range(Cells(i, 12), Cells(j, 12))
    ActiveWorkbook.Names.Add Name:=D & L, RefersToR1C1:=xrangeL
    Set xrangeM = Range(Cells(i, 13), Cells(j, 13))
    ActiveWorkbook.Names.Add Name:=D & m, RefersToR1C1:=xrangeM
    Set xrangeP = Range(Cells(i, 16), Cells(j, 16))
   ActiveWorkbook.Names.Add Name:=D & P, RefersToR1C1:=xrangeP
    Selection.Merge
   Sheets("Atterissage_Global").Select
   
   n = InputBox("Renter la numéro de ligne: ", "Insertion d'un nouveau marché", 0)
    Rows(n).Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    
    
    Cells(n, 12).Value = "SOMME(INDIRECT(" & "C1" & "&!" & D & L & "))"
    Cells(n, 13).Value = "SOMME(INDIRECT(" & "C1" & "&!" & D & m & "))"
    Cells(n, 16).Value = "SOMME(INDIRECT(" & "C1" & "&!" & D & P & "))"
    
End Sub



Si par ailleurs vous avez qeulques suggestions pour l'améliorer, le rendre plus lisible ou modifier quelques passages je suis preneur. Je suis en effet encore un peu novice en VBA!

Merci pour la réponse :)

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
6 sept. 2018 à 14:33
bonjour,
suggestions:
- ajouter "option explicit" en début de module
- utiliser des noms de variables qui permettent de comprendre à quoi sert la variable

que veux-tu dire par "spécifier l'étendue des plages de noms"? ce serait plus clair si tu expliquais ce que tu voulais réaliser, peut-être avec un exemple.
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
6 sept. 2018 à 18:07
Bonjour,

Je plussoie la réponse de yg_be.
Le nom de plage ne devrait pas être unique sur un classeur ? Dans ton code, tu essaies de donner le même nom sur plusieurs feuilles.

A+
0