Excel du mode absolu au mode relatif
Résolu
sk8_in_back
Messages postés
6
Statut
Membre
-
wilfried_42 Messages postés 912 Statut Contributeur -
wilfried_42 Messages postés 912 Statut Contributeur -
Bonjour à tous,
Me voilà en tant que petit scarabé d'Execl qui tente de s'initier au vba. Mon souci est de passer mon code vba d'un mode absolu à un mode relatif afin que je puisse l'appliquer à n'importe lequel de mes fichiers Excel.
Votre aide sera plus que la bienvenue. Le code concerné est le suivant :
Sub Compteurs()
'
'
Columns("F:F").Select
Selection.Insert Shift:=xlToRight
Selection.NumberFormat = "General"
Range("F2").Select
ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1]"
Range("F2").Select
Selection.AutoFill Destination:=Range("F2:F31")
Range("F2:F31").Select
Columns("G:G").Select
Selection.Insert Shift:=xlToRight
Range("G1").Select
Selection.NumberFormat = "@"
ActiveCell.FormulaR1C1 = "CI"
Range("F2:F31").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=-15
Range("G2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("A:F").Select
Range("F1").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Selection.AutoFilter
ActiveWindow.SmallScroll ToRight:=1
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
Range("H1").Select
ActiveCell.FormulaR1C1 = "PRETITRE2"
Range("H2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-6],RC[-1])"
Selection.AutoFill Destination:=Range("H2:H31")
Range("H2:H31").Select
Selection.AutoFilter Field:=7, Criteria1:="="
Range("G2:G31").Select
Selection.ClearContents
Selection.AutoFilter Field:=7
ActiveWindow.SmallScroll ToRight:=2
Columns("J:J").Select
Selection.Insert Shift:=xlToRight
Range("J1").Select
ActiveCell.FormulaR1C1 = "PRENOM2"
Range("J2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-7],RC[-1])"
Selection.AutoFill Destination:=Range("J2:J31")
Range("J2:J31").Select
Selection.AutoFilter Field:=9, Criteria1:="="
Range("I2:I31").Select
Selection.ClearContents
Selection.AutoFilter Field:=9
ActiveWindow.SmallScroll ToRight:=2
Columns("L:L").Select
Selection.Insert Shift:=xlToRight
Range("L1").Select
ActiveCell.FormulaR1C1 = "PRENOMRUE2"
Range("L2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-8],RC[-1])"
Selection.AutoFill Destination:=Range("L2:L31")
Range("L2:L31").Select
Selection.AutoFilter Field:=11, Criteria1:="="
Range("K2:K31").Select
Selection.ClearContents
Selection.AutoFilter Field:=11
ActiveWindow.SmallScroll ToRight:=3
Columns("N:N").Select
Selection.Insert Shift:=xlToRight
Range("N1").Select
ActiveCell.FormulaR1C1 = "PRECODPOS2"
Range("N2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-9],RC[-1])"
Selection.AutoFill Destination:=Range("N2:N31")
Range("N2:N31").Select
Selection.AutoFilter Field:=13, Criteria1:="="
Range("M2:M31").Select
Selection.ClearContents
Selection.AutoFilter Field:=13
ActiveWindow.SmallScroll ToRight:=2
Columns("P:P").Select
Selection.Insert Shift:=xlToRight
Range("P2").Select
ActiveCell.FormulaR1C1 = ""
Range("P1").Select
ActiveCell.FormulaR1C1 = "PREVILLE2"
Range("P2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-10],RC[-1])"
'
Selection.AutoFill Destination:=Range("P2:P31")
Range("P2:P31").Select
Selection.AutoFilter Field:=15, Criteria1:="="
Range("O2:O31").Select
Selection.ClearContents
Selection.AutoFilter Field:=15
End Sub
L'enregistreur est certes pratique mais limite après les possibilités, les miennes aussi semblent l'être ;-)
Merci d'avance.
Clem.
Me voilà en tant que petit scarabé d'Execl qui tente de s'initier au vba. Mon souci est de passer mon code vba d'un mode absolu à un mode relatif afin que je puisse l'appliquer à n'importe lequel de mes fichiers Excel.
Votre aide sera plus que la bienvenue. Le code concerné est le suivant :
Sub Compteurs()
'
'
Columns("F:F").Select
Selection.Insert Shift:=xlToRight
Selection.NumberFormat = "General"
Range("F2").Select
ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1]"
Range("F2").Select
Selection.AutoFill Destination:=Range("F2:F31")
Range("F2:F31").Select
Columns("G:G").Select
Selection.Insert Shift:=xlToRight
Range("G1").Select
Selection.NumberFormat = "@"
ActiveCell.FormulaR1C1 = "CI"
Range("F2:F31").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=-15
Range("G2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("A:F").Select
Range("F1").Activate
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Cells.Select
Cells.EntireColumn.AutoFit
Range("A1").Select
Selection.AutoFilter
ActiveWindow.SmallScroll ToRight:=1
Columns("H:H").Select
Selection.Insert Shift:=xlToRight
Range("H1").Select
ActiveCell.FormulaR1C1 = "PRETITRE2"
Range("H2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-6],RC[-1])"
Selection.AutoFill Destination:=Range("H2:H31")
Range("H2:H31").Select
Selection.AutoFilter Field:=7, Criteria1:="="
Range("G2:G31").Select
Selection.ClearContents
Selection.AutoFilter Field:=7
ActiveWindow.SmallScroll ToRight:=2
Columns("J:J").Select
Selection.Insert Shift:=xlToRight
Range("J1").Select
ActiveCell.FormulaR1C1 = "PRENOM2"
Range("J2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-7],RC[-1])"
Selection.AutoFill Destination:=Range("J2:J31")
Range("J2:J31").Select
Selection.AutoFilter Field:=9, Criteria1:="="
Range("I2:I31").Select
Selection.ClearContents
Selection.AutoFilter Field:=9
ActiveWindow.SmallScroll ToRight:=2
Columns("L:L").Select
Selection.Insert Shift:=xlToRight
Range("L1").Select
ActiveCell.FormulaR1C1 = "PRENOMRUE2"
Range("L2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-8],RC[-1])"
Selection.AutoFill Destination:=Range("L2:L31")
Range("L2:L31").Select
Selection.AutoFilter Field:=11, Criteria1:="="
Range("K2:K31").Select
Selection.ClearContents
Selection.AutoFilter Field:=11
ActiveWindow.SmallScroll ToRight:=3
Columns("N:N").Select
Selection.Insert Shift:=xlToRight
Range("N1").Select
ActiveCell.FormulaR1C1 = "PRECODPOS2"
Range("N2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-9],RC[-1])"
Selection.AutoFill Destination:=Range("N2:N31")
Range("N2:N31").Select
Selection.AutoFilter Field:=13, Criteria1:="="
Range("M2:M31").Select
Selection.ClearContents
Selection.AutoFilter Field:=13
ActiveWindow.SmallScroll ToRight:=2
Columns("P:P").Select
Selection.Insert Shift:=xlToRight
Range("P2").Select
ActiveCell.FormulaR1C1 = ""
Range("P1").Select
ActiveCell.FormulaR1C1 = "PREVILLE2"
Range("P2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]="""",RC[-10],RC[-1])"
'
Selection.AutoFill Destination:=Range("P2:P31")
Range("P2:P31").Select
Selection.AutoFilter Field:=15, Criteria1:="="
Range("O2:O31").Select
Selection.ClearContents
Selection.AutoFilter Field:=15
End Sub
L'enregistreur est certes pratique mais limite après les possibilités, les miennes aussi semblent l'être ;-)
Merci d'avance.
Clem.
A voir également:
- Excel du mode absolu au mode relatif
- Mode avion - Guide
- Mode sécurisé samsung - Guide
- God mode - Guide
- Mode d'emploi - Guide
- Mode suivi des modifications - Guide
1 réponse
Bonjour,
il est vrai que l'enregistreur de macro fait des degats avec les select à outance
je ne sais pas comment est ton classeur, mais disons que la colonne A est la colonne de base
Voici une partie de ta macro que l'on peut modifier :
comme suit :
pas un seul select, la gestion de la plage de la formule est dynamique, elle se base sur le nombre de valeurs de la colonne A (En gras)
il est vrai que l'enregistreur de macro fait des degats avec les select à outance
je ne sais pas comment est ton classeur, mais disons que la colonne A est la colonne de base
Voici une partie de ta macro que l'on peut modifier :
Columns("F:F").Select
Selection.Insert Shift:=xlToRight
Selection.NumberFormat = "General"
Range("F2").Select
ActiveCell.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1]"
Range("F2").Select
Selection.AutoFill Destination:=Range("F2:F31")
comme suit :
with columns("F:F")
.insert shift:=Xltoright
.numberFormat = "General"
end with
Range("F2").FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1]"
Range("F2:F" & range("A65536").end(xlup).row).filldown
pas un seul select, la gestion de la plage de la formule est dynamique, elle se base sur le nombre de valeurs de la colonne A (En gras)