4 réponses
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
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
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
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
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 :
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
• 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 :
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
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
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