J'ai écrit une macro en VBA, faisant appel à une fonction f.
Je veux appeler dans cette fonction un paramètre s qui dépend de l'onglet
sur lequel on se trouve.
schématiquement j'ai fait :
dim s as integer
si onglet est onglet n°1 alors s=1
si onglet est onglet n°2 alors s=2
...
ensuite j'appelle ma fonction :
recherchev(numéro,plage, s, faux)
Cela me met une erreur. Fais-je une erreur dans la façon d'appeler le
paramètre ? J'ai essaye de le mettre entre guillements, entre apostrophes, ça
ne change rien...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
michdenis
Bonjour Gilllou,
Un petit exemple simple :
'------------------------ Sub AppelDeLaFonction()
MsgBox NomFeuille(1)
End Sub '------------------------
Function NomFeuille(No As Integer)
NomFeuille = Worksheets(No).Name
End Function '------------------------
Salutations!
"Gillou" a écrit dans le message de news: Bonjour
J'ai écrit une macro en VBA, faisant appel à une fonction f.
Je veux appeler dans cette fonction un paramètre s qui dépend de l'onglet sur lequel on se trouve.
schématiquement j'ai fait : dim s as integer si onglet est onglet n°1 alors s=1 si onglet est onglet n°2 alors s=2 ...
ensuite j'appelle ma fonction : recherchev(numéro,plage, s, faux)
Cela me met une erreur. Fais-je une erreur dans la façon d'appeler le paramètre ? J'ai essaye de le mettre entre guillements, entre apostrophes, ça ne change rien...
Je ne connais pas bien VBA, merci de votre aide !
Bonjour Gilllou,
Un petit exemple simple :
'------------------------
Sub AppelDeLaFonction()
MsgBox NomFeuille(1)
End Sub
'------------------------
Function NomFeuille(No As Integer)
NomFeuille = Worksheets(No).Name
End Function
'------------------------
Salutations!
"Gillou" <Gillou@discussions.microsoft.com> a écrit dans le message de news: 081FEC83-E67E-4164-A5CF-6A710D96A3C2@microsoft.com...
Bonjour
J'ai écrit une macro en VBA, faisant appel à une fonction f.
Je veux appeler dans cette fonction un paramètre s qui dépend de l'onglet
sur lequel on se trouve.
schématiquement j'ai fait :
dim s as integer
si onglet est onglet n°1 alors s=1
si onglet est onglet n°2 alors s=2
...
ensuite j'appelle ma fonction :
recherchev(numéro,plage, s, faux)
Cela me met une erreur. Fais-je une erreur dans la façon d'appeler le
paramètre ? J'ai essaye de le mettre entre guillements, entre apostrophes, ça
ne change rien...
J'ai écrit une macro en VBA, faisant appel à une fonction f.
Je veux appeler dans cette fonction un paramètre s qui dépend de l'onglet sur lequel on se trouve.
schématiquement j'ai fait : dim s as integer si onglet est onglet n°1 alors s=1 si onglet est onglet n°2 alors s=2 ...
ensuite j'appelle ma fonction : recherchev(numéro,plage, s, faux)
Cela me met une erreur. Fais-je une erreur dans la façon d'appeler le paramètre ? J'ai essaye de le mettre entre guillements, entre apostrophes, ça ne change rien...
Je ne connais pas bien VBA, merci de votre aide !
Gillou
Voilà ce que j'ai fait :
Sub MAJ_Traitement_flux(s As Integer) If ActiveSheet.Name = "nom1" Then s = -2 ElseIf ActiveSheet.Name = "nom2" Then s = 8 ...etc... End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000)) c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)" next c end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me conspuer :-S, mais où ?
Merci
Voilà ce que j'ai fait :
Sub MAJ_Traitement_flux(s As Integer)
If ActiveSheet.Name = "nom1" Then
s = -2
ElseIf ActiveSheet.Name = "nom2" Then
s = 8
...etc...
End If
Dim c As Range
For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000))
c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)"
next c
end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il
me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me
conspuer :-S, mais où ?
Sub MAJ_Traitement_flux(s As Integer) If ActiveSheet.Name = "nom1" Then s = -2 ElseIf ActiveSheet.Name = "nom2" Then s = 8 ...etc... End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000)) c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)" next c end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me conspuer :-S, mais où ?
Merci
michdenis
Bonjour Gillou,
Une façon d'utiliser Excel pour qu'il nous aide à écrire un bout de fonction.
Écrit ta formule de recherche dans une cellule comme tu voudrais qu'elle fonctionne.
Tu utilises quelques lignes de code pour obtenir ce que doit avoir l'air ta formule que tu utiliseras dans le code.
Suppose que ta formule est écrite en A1
A = range("A1").formulalocal 'Tu recopie ta formule dans une cellule que tu pourras récupérer par un copier-coller pour ta vraie procédure. 'Utilisation d'un apostrophe simple entouré de guillemets pour signifier que j'entre du texte dans la cellule pour les fins que l'on connait. Range("G1") = "'" & A Une formule de recherche donne ceci : '=RECHERCHEV(E1;toto;2;FAUX) toto est une plage nommée.
Il ne te reste plus qu'à copier ta formule en G1 dans ta procédure en enlevant l'apostrophe du début dans ta procédure, tu modifies ta formule pour insérer une variable
Observe comment j'ai introduit la variable S dans la formule dans la fenêtre VBE S = 2 For each C in Range("B5:C10") c.formulalocal = "=RECHERCHEV(E1;toto;2" & S & ";FAUX)" End if
Voilà le principe.
Salutations!
"Gillou" a écrit dans le message de news: Voilà ce que j'ai fait :
Sub MAJ_Traitement_flux(s As Integer) If ActiveSheet.Name = "nom1" Then s = -2 ElseIf ActiveSheet.Name = "nom2" Then s = 8 ...etc... End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000)) c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)" next c end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me conspuer :-S, mais où ?
Merci
Bonjour Gillou,
Une façon d'utiliser Excel pour qu'il nous aide à écrire un bout de fonction.
Écrit ta formule de recherche dans une cellule comme tu voudrais qu'elle fonctionne.
Tu utilises quelques lignes de code pour obtenir ce que doit avoir l'air ta formule que tu utiliseras dans le code.
Suppose que ta formule est écrite en A1
A = range("A1").formulalocal
'Tu recopie ta formule dans une cellule que tu pourras récupérer par un copier-coller pour ta vraie procédure.
'Utilisation d'un apostrophe simple entouré de guillemets pour signifier que j'entre du texte dans la cellule pour
les fins que l'on connait.
Range("G1") = "'" & A
Une formule de recherche donne ceci :
'=RECHERCHEV(E1;toto;2;FAUX)
toto est une plage nommée.
Il ne te reste plus qu'à copier ta formule en G1 dans ta procédure en enlevant l'apostrophe du début
dans ta procédure, tu modifies ta formule pour insérer une variable
Observe comment j'ai introduit la variable S dans la formule dans la fenêtre VBE
S = 2
For each C in Range("B5:C10")
c.formulalocal = "=RECHERCHEV(E1;toto;2" & S & ";FAUX)"
End if
Voilà le principe.
Salutations!
"Gillou" <Gillou@discussions.microsoft.com> a écrit dans le message de news: 65CF7F3B-5194-4147-9BDA-5592D3F9852B@microsoft.com...
Voilà ce que j'ai fait :
Sub MAJ_Traitement_flux(s As Integer)
If ActiveSheet.Name = "nom1" Then
s = -2
ElseIf ActiveSheet.Name = "nom2" Then
s = 8
...etc...
End If
Dim c As Range
For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000))
c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)"
next c
end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il
me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me
conspuer :-S, mais où ?
Une façon d'utiliser Excel pour qu'il nous aide à écrire un bout de fonction.
Écrit ta formule de recherche dans une cellule comme tu voudrais qu'elle fonctionne.
Tu utilises quelques lignes de code pour obtenir ce que doit avoir l'air ta formule que tu utiliseras dans le code.
Suppose que ta formule est écrite en A1
A = range("A1").formulalocal 'Tu recopie ta formule dans une cellule que tu pourras récupérer par un copier-coller pour ta vraie procédure. 'Utilisation d'un apostrophe simple entouré de guillemets pour signifier que j'entre du texte dans la cellule pour les fins que l'on connait. Range("G1") = "'" & A Une formule de recherche donne ceci : '=RECHERCHEV(E1;toto;2;FAUX) toto est une plage nommée.
Il ne te reste plus qu'à copier ta formule en G1 dans ta procédure en enlevant l'apostrophe du début dans ta procédure, tu modifies ta formule pour insérer une variable
Observe comment j'ai introduit la variable S dans la formule dans la fenêtre VBE S = 2 For each C in Range("B5:C10") c.formulalocal = "=RECHERCHEV(E1;toto;2" & S & ";FAUX)" End if
Voilà le principe.
Salutations!
"Gillou" a écrit dans le message de news: Voilà ce que j'ai fait :
Sub MAJ_Traitement_flux(s As Integer) If ActiveSheet.Name = "nom1" Then s = -2 ElseIf ActiveSheet.Name = "nom2" Then s = 8 ...etc... End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000)) c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)" next c end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me conspuer :-S, mais où ?
Merci
michdenis
Un oubli, après le 2 j'aurais du ajouter le symbole de la multiplication
c.formulalocal = "=RECHERCHEV(E1;toto;2*" & S & ";FAUX)"
Salutations!
"michdenis" a écrit dans le message de news: % Bonjour Gillou,
Une façon d'utiliser Excel pour qu'il nous aide à écrire un bout de fonction.
Écrit ta formule de recherche dans une cellule comme tu voudrais qu'elle fonctionne.
Tu utilises quelques lignes de code pour obtenir ce que doit avoir l'air ta formule que tu utiliseras dans le code.
Suppose que ta formule est écrite en A1
A = range("A1").formulalocal 'Tu recopie ta formule dans une cellule que tu pourras récupérer par un copier-coller pour ta vraie procédure. 'Utilisation d'un apostrophe simple entouré de guillemets pour signifier que j'entre du texte dans la cellule pour les fins que l'on connait. Range("G1") = "'" & A Une formule de recherche donne ceci : '=RECHERCHEV(E1;toto;2;FAUX) toto est une plage nommée.
Il ne te reste plus qu'à copier ta formule en G1 dans ta procédure en enlevant l'apostrophe du début dans ta procédure, tu modifies ta formule pour insérer une variable
Observe comment j'ai introduit la variable S dans la formule dans la fenêtre VBE S = 2 For each C in Range("B5:C10") c.formulalocal = "=RECHERCHEV(E1;toto;2" & S & ";FAUX)" End if
Voilà le principe.
Salutations!
"Gillou" a écrit dans le message de news: Voilà ce que j'ai fait :
Sub MAJ_Traitement_flux(s As Integer) If ActiveSheet.Name = "nom1" Then s = -2 ElseIf ActiveSheet.Name = "nom2" Then s = 8 ...etc... End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000)) c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)" next c end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me conspuer :-S, mais où ?
Merci
Un oubli, après le 2 j'aurais du ajouter le symbole de la multiplication
c.formulalocal = "=RECHERCHEV(E1;toto;2*" & S & ";FAUX)"
Salutations!
"michdenis" <michdenis@hotmail.com> a écrit dans le message de news: %23TJLFjdnFHA.2452@TK2MSFTNGP10.phx.gbl...
Bonjour Gillou,
Une façon d'utiliser Excel pour qu'il nous aide à écrire un bout de fonction.
Écrit ta formule de recherche dans une cellule comme tu voudrais qu'elle fonctionne.
Tu utilises quelques lignes de code pour obtenir ce que doit avoir l'air ta formule que tu utiliseras dans le code.
Suppose que ta formule est écrite en A1
A = range("A1").formulalocal
'Tu recopie ta formule dans une cellule que tu pourras récupérer par un copier-coller pour ta vraie procédure.
'Utilisation d'un apostrophe simple entouré de guillemets pour signifier que j'entre du texte dans la cellule pour
les fins que l'on connait.
Range("G1") = "'" & A
Une formule de recherche donne ceci :
'=RECHERCHEV(E1;toto;2;FAUX)
toto est une plage nommée.
Il ne te reste plus qu'à copier ta formule en G1 dans ta procédure en enlevant l'apostrophe du début
dans ta procédure, tu modifies ta formule pour insérer une variable
Observe comment j'ai introduit la variable S dans la formule dans la fenêtre VBE
S = 2
For each C in Range("B5:C10")
c.formulalocal = "=RECHERCHEV(E1;toto;2" & S & ";FAUX)"
End if
Voilà le principe.
Salutations!
"Gillou" <Gillou@discussions.microsoft.com> a écrit dans le message de news: 65CF7F3B-5194-4147-9BDA-5592D3F9852B@microsoft.com...
Voilà ce que j'ai fait :
Sub MAJ_Traitement_flux(s As Integer)
If ActiveSheet.Name = "nom1" Then
s = -2
ElseIf ActiveSheet.Name = "nom2" Then
s = 8
...etc...
End If
Dim c As Range
For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000))
c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)"
next c
end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il
me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me
conspuer :-S, mais où ?
Un oubli, après le 2 j'aurais du ajouter le symbole de la multiplication
c.formulalocal = "=RECHERCHEV(E1;toto;2*" & S & ";FAUX)"
Salutations!
"michdenis" a écrit dans le message de news: % Bonjour Gillou,
Une façon d'utiliser Excel pour qu'il nous aide à écrire un bout de fonction.
Écrit ta formule de recherche dans une cellule comme tu voudrais qu'elle fonctionne.
Tu utilises quelques lignes de code pour obtenir ce que doit avoir l'air ta formule que tu utiliseras dans le code.
Suppose que ta formule est écrite en A1
A = range("A1").formulalocal 'Tu recopie ta formule dans une cellule que tu pourras récupérer par un copier-coller pour ta vraie procédure. 'Utilisation d'un apostrophe simple entouré de guillemets pour signifier que j'entre du texte dans la cellule pour les fins que l'on connait. Range("G1") = "'" & A Une formule de recherche donne ceci : '=RECHERCHEV(E1;toto;2;FAUX) toto est une plage nommée.
Il ne te reste plus qu'à copier ta formule en G1 dans ta procédure en enlevant l'apostrophe du début dans ta procédure, tu modifies ta formule pour insérer une variable
Observe comment j'ai introduit la variable S dans la formule dans la fenêtre VBE S = 2 For each C in Range("B5:C10") c.formulalocal = "=RECHERCHEV(E1;toto;2" & S & ";FAUX)" End if
Voilà le principe.
Salutations!
"Gillou" a écrit dans le message de news: Voilà ce que j'ai fait :
Sub MAJ_Traitement_flux(s As Integer) If ActiveSheet.Name = "nom1" Then s = -2 ElseIf ActiveSheet.Name = "nom2" Then s = 8 ...etc... End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(2000, 2000)) c = "=VLOOKUP(RC3,plage de référence,2*(column(c)+s),FALSE)" next c end sub
Quand je lance la macro, par exemple depuis l'onglet n°2 (avec donc s=8), il me met "Argument non facultatif", donc il ne comprend pas que s=8.
Je suppose que j'ai fait une énorme boulette quelque part et que l'on va me conspuer :-S, mais où ?
Merci
Gillou
Un oubli, après le 2 j'aurais du ajouter le symbole de la multiplication
c.formulalocal = "=RECHERCHEV(E1;toto;2*" & S & ";FAUX)"
Ok, merci pour la précision et le souci de pédagogie ! Je testerai tout ça sur mon fichier au bureau demain, je te tiendrai au courant.
A+ Gillou
Un oubli, après le 2 j'aurais du ajouter le symbole de la multiplication
c.formulalocal = "=RECHERCHEV(E1;toto;2*" & S & ";FAUX)"
Ok, merci pour la précision et le souci de pédagogie ! Je testerai tout
ça sur mon fichier au bureau demain, je te tiendrai au courant.
Un oubli, après le 2 j'aurais du ajouter le symbole de la multiplication
c.formulalocal = "=RECHERCHEV(E1;toto;2*" & S & ";FAUX)"
Ok, merci pour la précision et le souci de pédagogie ! Je testerai tout ça sur mon fichier au bureau demain, je te tiendrai au courant.
A+ Gillou
Gillou
Bon ben décidemment je n'y arrive pas :'-(
Voilà ma macro :
sub MAJ() If ActiveSheet.Name = "juillet 2004" Then s = -2 ElseIf ActiveSheet.Name = "mai 2005" Then s = 8 Else MsgBox (ERREUR) End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(100, 100)) c.FormulaLocal = "=VLOOKUP(RC3,plage,2*(column(c)+ " & s & "),FALSE)" next c end sub
Quand je lance l'exécution j'ai l'erreur d'exécution 1004 : erreur définie par l'application ou par l'objet et il me surligne la ligne avec la formule.
J'ai fait quelque chose de mal ? :-S
Bon ben décidemment je n'y arrive pas :'-(
Voilà ma macro :
sub MAJ()
If ActiveSheet.Name = "juillet 2004" Then
s = -2
ElseIf ActiveSheet.Name = "mai 2005" Then
s = 8
Else
MsgBox (ERREUR)
End If
Dim c As Range
For Each c In ActiveSheet.Range(Cells(2, 7), Cells(100, 100))
c.FormulaLocal = "=VLOOKUP(RC3,plage,2*(column(c)+ " & s & "),FALSE)"
next c
end sub
Quand je lance l'exécution j'ai l'erreur d'exécution 1004 : erreur définie
par l'application ou par l'objet et il me surligne la ligne avec la formule.
sub MAJ() If ActiveSheet.Name = "juillet 2004" Then s = -2 ElseIf ActiveSheet.Name = "mai 2005" Then s = 8 Else MsgBox (ERREUR) End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(100, 100)) c.FormulaLocal = "=VLOOKUP(RC3,plage,2*(column(c)+ " & s & "),FALSE)" next c end sub
Quand je lance l'exécution j'ai l'erreur d'exécution 1004 : erreur définie par l'application ou par l'objet et il me surligne la ligne avec la formule.
J'ai fait quelque chose de mal ? :-S
michdenis
Bonjour Gillou,
A ) Attention, il ne faut pas se méprendre sur les 2 méthodes de l'objet Range .
- FormulaLocal = Les fonctions s'écrivent en françaiis, le séparateur d'argument des fonctions demeure le point-virgule Cette méthode permet aux utilisateurs de versions autre que l'anglais, de conserver les paramêtres locaux
-Formula = C'est la façon "Américaine ( anglaise ) d'écrire les formules avec ce que cela sous-tend.
Pour les besoins de la cause, j'ai remplacé RC3 de ta formule initiale par B1. En fait, Il faudra que tu remplace B1 par l'adresse de la cellule où la fonction "rechercheV" doit puiser ce qui est recherché par la formule.
Attention à cette adresse (B1) , Comme tu recopies ta formule sur plusieurs lignes et plusieurs colonnes, ce que je me pose comme question, Est-ce que cette adresse doit être relative (B1) ou absolue($B$1) ou bien mixe. Selon ta réponse, il se peut que tu doives modifier ta boucle pour en faire 2 boucles imbriquées.
-Test ces 2 exemples sur une nouvelle feuille -
Voici un exemple d'une boucle qui copie dans chaque chaque cellule ... mais ligne par ligne d'une plage et ce en utilisant une référence mixe... c'est à dire en figeant la ligne et incrémentant la colonne '-------------------- For Each r In ActiveSheet.Range(Cells(2, 7), Cells(10, 10)).Rows For Each c In r.Cells c.FormulaLocal = "=" & Cells(c.Row, c.Offset(, -3).Column).Address(1, 0) & "" Next Next '--------------------
Pour faire l'inverse Cette boucle fige la colonne de l'adresse et boucle , colonne par colonne. '-------------------- For Each r In ActiveSheet.Range(Cells(2, 7), Cells(10, 10)).Columns For Each c In r.Cells c.FormulaLocal = "=" & Cells(c.Row, c.Offset(, -3).Column).Address(0, 1) & "" Next Next '--------------------
Salutations!
"Gillou" a écrit dans le message de news: Bon ben décidemment je n'y arrive pas :'-(
Voilà ma macro :
sub MAJ() If ActiveSheet.Name = "juillet 2004" Then s = -2 ElseIf ActiveSheet.Name = "mai 2005" Then s = 8 Else MsgBox (ERREUR) End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(100, 100)) c.FormulaLocal = "=VLOOKUP(RC3,plage,2*(column(c)+ " & s & "),FALSE)" next c end sub
Quand je lance l'exécution j'ai l'erreur d'exécution 1004 : erreur définie par l'application ou par l'objet et il me surligne la ligne avec la formule.
J'ai fait quelque chose de mal ? :-S
Bonjour Gillou,
A ) Attention, il ne faut pas se méprendre sur les 2 méthodes de l'objet Range .
- FormulaLocal = Les fonctions s'écrivent en françaiis, le séparateur d'argument des fonctions demeure le point-virgule
Cette méthode permet aux utilisateurs de versions autre que l'anglais, de conserver les paramêtres
locaux
-Formula = C'est la façon "Américaine ( anglaise ) d'écrire les formules avec ce que cela sous-tend.
Pour les besoins de la cause, j'ai remplacé RC3 de ta formule initiale par B1. En fait, Il faudra que tu remplace B1 par l'adresse
de la cellule où la fonction "rechercheV" doit puiser ce qui est recherché par la formule.
Attention à cette adresse (B1) , Comme tu recopies ta formule sur plusieurs lignes et plusieurs colonnes, ce que je me pose comme
question, Est-ce que cette adresse doit être relative (B1) ou absolue($B$1) ou bien mixe. Selon ta réponse, il se peut que tu doives
modifier ta boucle pour en faire 2 boucles imbriquées.
-Test ces 2 exemples sur une nouvelle feuille -
Voici un exemple d'une boucle qui copie dans chaque chaque cellule ... mais ligne par ligne d'une plage et ce en utilisant une
référence mixe... c'est à dire en figeant la ligne et incrémentant la colonne
'--------------------
For Each r In ActiveSheet.Range(Cells(2, 7), Cells(10, 10)).Rows
For Each c In r.Cells
c.FormulaLocal = "=" & Cells(c.Row, c.Offset(, -3).Column).Address(1, 0) & ""
Next
Next
'--------------------
Pour faire l'inverse
Cette boucle fige la colonne de l'adresse et boucle , colonne par colonne.
'--------------------
For Each r In ActiveSheet.Range(Cells(2, 7), Cells(10, 10)).Columns
For Each c In r.Cells
c.FormulaLocal = "=" & Cells(c.Row, c.Offset(, -3).Column).Address(0, 1) & ""
Next
Next
'--------------------
Salutations!
"Gillou" <Gillou@discussions.microsoft.com> a écrit dans le message de news: 4595B936-5B94-4961-822B-DBCE6075DA7A@microsoft.com...
Bon ben décidemment je n'y arrive pas :'-(
Voilà ma macro :
sub MAJ()
If ActiveSheet.Name = "juillet 2004" Then
s = -2
ElseIf ActiveSheet.Name = "mai 2005" Then
s = 8
Else
MsgBox (ERREUR)
End If
Dim c As Range
For Each c In ActiveSheet.Range(Cells(2, 7), Cells(100, 100))
c.FormulaLocal = "=VLOOKUP(RC3,plage,2*(column(c)+ " & s & "),FALSE)"
next c
end sub
Quand je lance l'exécution j'ai l'erreur d'exécution 1004 : erreur définie
par l'application ou par l'objet et il me surligne la ligne avec la formule.
A ) Attention, il ne faut pas se méprendre sur les 2 méthodes de l'objet Range .
- FormulaLocal = Les fonctions s'écrivent en françaiis, le séparateur d'argument des fonctions demeure le point-virgule Cette méthode permet aux utilisateurs de versions autre que l'anglais, de conserver les paramêtres locaux
-Formula = C'est la façon "Américaine ( anglaise ) d'écrire les formules avec ce que cela sous-tend.
Pour les besoins de la cause, j'ai remplacé RC3 de ta formule initiale par B1. En fait, Il faudra que tu remplace B1 par l'adresse de la cellule où la fonction "rechercheV" doit puiser ce qui est recherché par la formule.
Attention à cette adresse (B1) , Comme tu recopies ta formule sur plusieurs lignes et plusieurs colonnes, ce que je me pose comme question, Est-ce que cette adresse doit être relative (B1) ou absolue($B$1) ou bien mixe. Selon ta réponse, il se peut que tu doives modifier ta boucle pour en faire 2 boucles imbriquées.
-Test ces 2 exemples sur une nouvelle feuille -
Voici un exemple d'une boucle qui copie dans chaque chaque cellule ... mais ligne par ligne d'une plage et ce en utilisant une référence mixe... c'est à dire en figeant la ligne et incrémentant la colonne '-------------------- For Each r In ActiveSheet.Range(Cells(2, 7), Cells(10, 10)).Rows For Each c In r.Cells c.FormulaLocal = "=" & Cells(c.Row, c.Offset(, -3).Column).Address(1, 0) & "" Next Next '--------------------
Pour faire l'inverse Cette boucle fige la colonne de l'adresse et boucle , colonne par colonne. '-------------------- For Each r In ActiveSheet.Range(Cells(2, 7), Cells(10, 10)).Columns For Each c In r.Cells c.FormulaLocal = "=" & Cells(c.Row, c.Offset(, -3).Column).Address(0, 1) & "" Next Next '--------------------
Salutations!
"Gillou" a écrit dans le message de news: Bon ben décidemment je n'y arrive pas :'-(
Voilà ma macro :
sub MAJ() If ActiveSheet.Name = "juillet 2004" Then s = -2 ElseIf ActiveSheet.Name = "mai 2005" Then s = 8 Else MsgBox (ERREUR) End If
Dim c As Range For Each c In ActiveSheet.Range(Cells(2, 7), Cells(100, 100)) c.FormulaLocal = "=VLOOKUP(RC3,plage,2*(column(c)+ " & s & "),FALSE)" next c end sub
Quand je lance l'exécution j'ai l'erreur d'exécution 1004 : erreur définie par l'application ou par l'objet et il me surligne la ligne avec la formule.