Excel du mode absolu au mode relatif
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.
Bonjour et bienvenue,
Pas facile de voir la finalité sans voir ton fichier avec un mot d'explication.
Le début de ton code pourrait être ceci :
Sub Compteurs()
Columns("F:F").Insert Shift:=xlToRight
With Range("F2")
.FormulaR1C1 = "=RC[-5]&RC[-4]&RC[-3]&RC[-2]&RC[-1]"
.NumberFormat = "General"
.AutoFill Destination:=Range("F2:F31")
End With
Columns("G:G").Insert Shift:=xlToRight
With Range("G1")
.NumberFormat = "@"
.FormulaR1C1 = "CI"
End With
Range("F2:F31").Copy
Range("G2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("A:F").Select
....A te relire
Dan
Bonjour,
Merci pour l'accueil. Oui en effet sans précisions j'imagine que ça n'est pas spécialement simple...Désolé.
Je te fais passer mes 2 versions de fichier, celle de base et ce que ça doit devenir.
https://www.excel-pratique.com/~files/doc/Fichier_initial.xls
https://www.excel-pratique.com/~files/doc/Fixhier_final.xls
Je patauge un peu, la découverte de l'Excel profond avec son vb est obscure pour moi pour l'instant.
Alors pour synthétiser :
- 1ère étape: concatener les colonnes de A à E dans une nouvelle colonne F et ensuite collage spécial en ne gardant que la valeur dans une nouvelle colonne G et supprimer les précédentes colonnes de A à F.
- 2nde étape : insertion d'une colonne supplémentaire à côté de la colonne "pretitre" et dans la nouvelle colonne, condition si rien dans la cellule de la colonne pretitre alors prendre par défaut la valeur de la colonne "ctitre".
Voili voilou, je patauge, lol.
Merci d'avance.
Clem.[/url]
Bonjour,
essaie avec ce code :
Cependant, je n'ai pas rajouté de colonne supplémentaire, pour "PRETITRE", dans le code, je supprime les espaces, et remplis les cellules vides par la valeur de "CTITRE"
Sub sk8()
Columns(1).Insert Shift:=xlToRight
With Range("A2:A" & [B65000].End(xlUp).Row)
.FormulaR1C1 = "=RC[1]&RC[2]&RC[3]&RC[4]&RC[5]"
.Value = .Value
.NumberFormat = "0"
End With
Columns("B:F").Delete
[A1] = "CI"
With Range("G2:G" & [A65000].End(xlUp).Row)
.Replace What:=" ", Replacement:=""
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC[-5]"
.Value = .Value
End With
End SubOla Felix,
Merci beaucoup ça marche en effet et j'ai donc suivi la même démarche pour les autres colonnes. Juste connais tu un moyen afin que conserve le 0 devant la colonne ci qui se concatene car là ça me le scratche?
Je sais je chipote
Merci.
Clem
Re,
Dans la macro, remplace le début du code par ceci :
Sub sk8()
Columns(1).Insert Shift:=xlToRight
With Range("A2:A" & [B65000].End(xlUp).Row)
.FormulaR1C1 = "=RC[1]&RC[2]&RC[3]&RC[4]&RC[5]"
.Copy
.PasteSpecial Paste:=xlValues, Operation:=xlNone
End With
....Amicalement
Dan
Thanks a lot, c'est super intéressant de se lancer dans l'obscur secte vba mais c'est dur l'initiation sera longue et perilleuse
A bientôt sûrement car je me lance dans d'autres tests
Clem
Re,
Merci de mettre "résolu" sur ton fil et reprenant ton premier message sur ce fil et en utilisant la liste déroulante située en bas à gauche.
A bientôt
Amicalement
Dan
Re-,
Salut, Dan
une autre alternative :
Sub sk8()
Columns(1).Insert Shift:=xlToRight
With Range("A2:A" & [B65000].End(xlUp).Row)
.FormulaR1C1 = "=RC[1]&RC[2]&RC[3]&RC[4]&RC[5]"
.NumberFormat = "@"
.Value = .Value
End With
Columns("B:F").Delete
[A1] = "CI"
With Range("G2:G" & [A65000].End(xlUp).Row)
.Replace What:=" ", Replacement:=""
.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "=RC[-5]"
.Value = .Value
End With
End Sub