Plage de nom en VBA.

ppalouza Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
tuxboy Messages postés 995 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je cherche un moyen pour utiliser des variables lors de la création d'une plage de nom en VBA.
Si quelqu'un à des idées merci!

4 réponses

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

C'est trop vague pour pouvoir répondre !

Est-ce une plage de noms ou un nom de plage ?
De quelles variables s'agit-il ?

Ici un excellent cours VBA gratuit :
ftp://ftp-developpez.com/bidou/Cours/VBA/formationVBA.pdf
0
ppalouza Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Voila le code que j'ai fais,
L'utilisateur saisi les lignes où il souhaite insérer des lignes, puis le vba sert à créer 3 plages dans les lignes insérer, théoriquement! mais cela ne marche pas :/
Y aurait-il une solution?
Merci!

Sub macro2()
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)
MsgBox i
MsgBox j
k = j - i
m = i
ActiveSheet.Select
For l = 1 To k
Rows(m).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
m = m + 1
Next
Range(Cells(i, 3), Cells(j, 3)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range(Cells(i, 4), Cells(j, 4)).Select

With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range(Cells(i, 5), Cells(j, 5)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Range(Cells(i, 6), Cells(i, 15)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlEdgeTop).LineStyle = xlNone
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range(Cells(i, 12), Cells(j, 12)).Select
ActiveWorkbook.Worksheets(i).Names.Add Name:="NewL", _
RefersToR1C1:="=i!RjC12:RiC12"
ActiveWorkbook.Worksheets(i).Names("NewL").Comment = ""
Range(Cells(i, 13), Cells(j, 13)).Select
ActiveWorkbook.Worksheets(i).Names.Add Name:="NewM", _
RefersToR1C1:="=i!RiC13:RjC13"
ActiveWorkbook.Worksheets(i).Names("NewM").Comment = ""
Range(Cells(i, 16), Cells(j, 16)).Select
ActiveWorkbook.Worksheets(i).Names.Add Name:="NewP", _
RefersToR1C1:="=i!RiC16:RjC16"
ActiveWorkbook.Worksheets(i).Names("NewP").Comment = ""
End Sub
0
Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
Bonjour,

Il faut plus de rigueur lorsque tu écris du code, quelques conseils :
commences tous les modules par Option Explicit, cela oblige à déclarer toutes les variables
• déclares les variables avec le type ad hoc (pas toutes en Variant) ;
ne jamais utiliser .Select, éviter Selection, Activecell, Activesheet, ... ;
• envisages toutes les valeurs potentielles des variables pour éviter les erreurs ;
• évites d'utiliser des propriétés ou méthodes d'objet héritées qui pourraient ne pas exister,
--- par exemple, au lieu de :
Sheets(1).Range("A1")
écrire
Workheets(1).Range("A1")
,
    en effet l'objet Range n'appartient pas à Sheet mais à Worksheet ;
• évites les références implicites, privilégies les références explicites,
--- par exemple, au lieu de
= Cells(1,2)
écrire
= Worksheets(1).Cells(1,2).Value
;
• donc, précises toujours la feuille pour un objet Range (Cells, Rows, ...) et la propriété cible (Value, Text, ...)
• éviter si possible d'utiliser le Presse-Papier

Ceci dit, je ne suis pas sûr d'avoir compris ce que tu veux comme nom !

Essaies ce code :
Option Explicit
Sub macro2()
Dim F As Worksheet      'Feuille
Dim a As String         'Réponse a
Dim b As String         'Réponse b
Dim P As Long           'Première ligne
Dim D As Long           'Dernière ligne
Dim L As Long           'Ligne
Dim C As Long           'Colonne
Dim E As Boolean        'Erreur nombre de feuille

  a = InputBox("Saisir le numéro de la première ligne :", "Insertion d'un nouveau marché", 0)
  b = InputBox("Saisir le numéro de la dernière ligne :", "Insertion d'un nouveau marché", 0)
  P = Val(a)
  D = Val(b)
  If P = 0 Or D = 0 Or D < P Then Exit Sub
  If P <= Worksheets.Count Then E = True
  Set F = ActiveSheet   'ou une autre feuille par exemple Worksheet("Feuil1")
  With F
    .Rows(P).Resize(D - P + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    With .Rows(P).Resize(D - P + 1)
      For C = 3 To 5
        With .Columns(C).Cells
          .HorizontalAlignment = xlCenter
          .VerticalAlignment = xlCenter
          .WrapText = True
          .MergeCells = True
        End With
      Next C
      With .Columns(3).Resize(, 9).Cells.Borders
        .LineStyle = xlContinuous
        .Weight = xlThin
      End With
    End With
  End With
  If E Then
    Set F = Worksheets(P)
    With F.Names
      .Add Name:="NewL", RefersToR1C1:="='" & F.Name & "'!R" & P & "C12:R" & D & "C12"
      .Add Name:="NewM", RefersToR1C1:="='" & F.Name & "'!R" & P & "C13:R" & D & "C13"
      .Add Name:="NewP", RefersToR1C1:="='" & F.Name & "'!R" & P & "C16:R" & D & "C16"
    End With
  Else
    MsgBox "Impossible de créer les noms dans la " & E & "° feuille" & vbCrLf & _
           vbCrLf & _
           "Elle n'existe pas !", vbCritical
  End If
End Sub

0
tuxboy Messages postés 995 Date d'inscription   Statut Membre Dernière intervention   190
 
Bonjour,
Je n'ai pas bien saisi la nature de ta question, mais je suis certain que tu trouveras ton bonheur ici :
http://boisgontierjacques.free.fr/pages_site/noms.htm
0