Rechercher : dans
Par :

Excel du mode absolu au mode relatif

Dernière réponse le 21 aoû 2008 à 13:04:50 sk8_in_back, le 21 aoû 2008 à 12:51:06 
 Signaler ce message aux modérateurs

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.

Configuration: Windows 2000
Internet Explorer 6.0

Meilleures réponses pour « Excel du mode absolu au mode relatif » dans :
Utiliser VALEUR CIBLE sous Excel VoirVous avez fait un devis, sous forme d'un tableau EXCEL vous avez additionné chacun des prix, obtenu un Total HT (en E8 par exemple) défini une remise (en E9), appliqué le montant de TVA (en E10), obtenu votre Total TTC (en E11) votre client vous...
Créer rapidement un planning de congés simple [Excel] VoirA1 : Saisir Congés 2008 A2 : Saisir NOM Prénom A3 à Ax : Saisir le nom des x personnes à gérer B1 : Saisir 01/05/08 ; Format/Cellule/Nombre/Personnalisé/Type jjj B2 : Saisir =B1 ; Format/Cellule/Nombre/Personnalisé/Type jj mmm ...
VBA et les collections d'objets. VoirVBA et les collections d'objets Quand plusieurs (beaucoup de) contrôles sont mis sur une feuille ou un Userform il est parfois fastidieux d'écrire du code dans chaque évènement des contrôles. Ce Tuto vous permet de traiter vos contrôles comme...
Tableur - Les feuilles de calcul VoirLa notion de feuille de calcul Un tableur présente les données et les formules sous forme d'un tableau (lignes et colonnes) appelé feuille de calcul. Une feuille de calcul est constitué de lignes (numérotées à l'aide de chiffres) et de colonnes...
Conditions générales d'utilisation VoirObjet Mentions légales Définitions Accès au service Propriété intellectuelle Données personnelles Limites de responsabilité Liens hypertextes Force majeure Evolution du présent contrat Durée et résiliation Droit applicable et...

1

 wilfried_42, le 21 aoû 2008 à 13:04:50

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) Cordialement
Wilfried

Répondre à wilfried_42