Excel du mode absolu au mode relatif

Résolu/Fermé
sk8_in_back Messages postés 6 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 27 août 2008 - 21 août 2008 à 12:51
wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 - 21 août 2008 à 13:04
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.
A voir également:

1 réponse

wilfried_42 Messages postés 907 Date d'inscription mardi 19 août 2008 Statut Contributeur Dernière intervention 8 décembre 2009 244
21 août 2008 à 13:04
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 :
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)
-1