Re Bonsoir Pendibidu, Philippe, Niki, le Forum
En fait Pendibidu (c'est marrant comme pseudo), une erreur usuelle et tout à fait normale des débutants en VBA c'est de faire souvent la retranscription de ce que l'enregistreur leur donne...
Une Simple Formule écrite en cellule 'A1' => =SUM(B1:B30)
Devient ceci en VBA enregistrée :
ActiveCell.FormulaR1C1 = '=SUM(RC[1]:R[29]C[1])'
Alors que l'on peut éviter cet horrible syntax avec R1C1 comme ceci
ActiveCell.Formula = '=SUM(B1:B30)'
Par la suite on apprendra à écrire
Range('A1').Formula = '=SUM(B1:B30)'
Au lieu d'aller activer une Cellule...
Ensuite on Apprendra à passer une Variable dans la Formule
Dim MyRange As String
MyRange = 'B1:B30'
Range('A1').Formula = '=SUM(' & MyRange & ')'
Enfin voilà quelques bases... Sinon pour tout problème concret voici ce que j'ai ccompris :
Sub TheSpreadSheetMacroRunner()
Dim WS As Worksheet
For Each WS In ThisWorkbook.Worksheets
Select Case WS.Name
Case 2002, 2003, 2003, 2005
TheLocalMacroDePendibidu WS
End Select
Next
End Sub
Sub TheLocalMacroDePendibidu(WS As Worksheet)
'Ici Déclaration des Variables (Toutes de Type String (Chaine de Caractères)
Dim StrWSDestination As String
Dim StrWSCategorie As String
Dim StrRangeIndex As String
Dim StrRangeMatch As String
Dim StrFormulaString As String
'Ici on Déclare une Variable Range pour la Cellule de Destination
Dim ObjRangeDestination As Range
'Et ici on intialise l'Objet Range avec un Set
Set ObjRangeDestination = WS.Range('E1') ' (E1) A Adapter ...
'(Attention vers la droite D1 ou F1 ou G55 etc MAIS PAS D1 ou moins ... Sinon BOUM !!!' LOL)
'Ici Initialisation des Variables
StrWSDestination = WS.Name 'Cela vient de l'argument passé
StrWSCategorie = 'CATEGORIES'
StrRangeIndex = '$B$3:$B$38'
StrRangeMatch = '$A$3:$A$38'
'Ici on Contruit une Concaténation de la Formule à 2crire en Utilisant les Variables
StrFormulaString = '=INDEX(' & StrWSCategorie & '!' & StrRangeIndex & _
',MATCH('' & StrWSDestination & ''!' & _
ObjRangeDestination.Offset(0, -4).Address(0, 0) & _
',' & StrWSCategorie & '!' & StrRangeMatch & ',0))'
'Ici on envoie le tout sur la range de destination
ObjRangeDestination.Formula = StrFormulaString
End Sub
J'ai essayé d'être détaillé, toutes ces Variables sont plutôt là pour ta compréhension, plutôt que pour faire un code directe.
Bon Courage et Welcome to VBA's World
[ol]@+Thierry[/ol]