Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VB-insérer la valeur d'une variable dans une formule ?

13 réponses
Avatar
kalinaja
Bonsoir à tous,

à chaque jour son impasse ...

je stocke un chemin vers un fichier xls dans une variable nommée Chem

or je souhaite l'injecter dans un code de type :

For Each sh In Array("1A1", "1B1")
Sheets(sh).Activate
'encore merci cousinhub !
Range("I38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"

J'ai essayé des variantes :

ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[" & Chem & " ]Import'!C1:C20,3,FALSE)"

ou en utilisant une variable intermédiaire :

Formule = "=VLOOKUP(RC1,'[" & Chem & "]Import'!C1:C20,3,FALSE)"
ActiveCell.FormulaR1C1 = _
Formule
Formule me donne bien la formule complétée mais au moment du
ActiveCell.FormulaR1C1 cela ne marche pas ...

Si vous avez une idée ...

En vous remerciant,

Cordialement,

FFO.

3 réponses

1 2
Avatar
kalinaja
j'ai francisé l'expression Vlookup en rechercheV, passé les "," en ";", les
RC en LC, il bloquerait sur l'expression '[D:/..../abc.xls]'import!...

Ce serait le lien qu'excel considérerait comme non valide ?


Re-bonjour FFO,

J'ai une erreur de type 1004

le contenu de Formule ne s'insère qu'à partir du moment ou je supprime le =
de début d'expression ... et si je le rajoute manuellement la formule ne
fonctionne pas donc ce serait un problème directement lié au vlookup mais je
n'ai pas réussi à identifier lequel ... pour l'instant ...

Désolé, je ne peux transmettre aucun document ...

Cordialement,

FFO.


Rebonjours à toi
Le code de tissot
Chez moi ne plante pas
et s'exécute avec succés
Quel message d'erreur as tu ???
A quelle ligne du code se positionne le débugage ???
Ne pourrais tu pas nous envoyer ton fichier pour le tester ???

Dans l'attente de tes réponses


Merci beaucoup,
ton code est infiniment plus propre que le mien ! (cf. chapitre VBAiste du
dimanche ...;+)

Malheureusement, ça plante toujours à la ligne Range("I38").FormulaR1C1 =
Formule
la variable formule contient bien la bonne information mais impossible de
l'injecter dans la cellule i38, j'ai essayé ave formula sans plus de succès
...

bref à suivre ...

Merci encore,

Cordialement,

FFO.


Bonjour,

Quelques remarques si ca peut aider:

With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
For Each Chem In .SelectedItems
Formule = "=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next
End With


Etant donné que MultiSelectúlse, SelectedItems ne peut contenir qu'un
élément, la boucle est inutile.
Rien n'est prévu en cas de clic sur Annuler.
D'autre part la formule semble mélanger les styles de références (A1 et
L1C1).
Je suggere donc ceci:

Sub Bouton35_QuandClic()
Dim Formule As String, sh As Worksheet
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then Exit Sub
Formule = "=VLOOKUP(RC1,'[" & .SelectedItems(1) &
"]Import'!R1C3:R20C3,3,FALSE)"
End With
For Each sh In Sheets(Array("Feuil1", "Feuil2"))
sh.Activate
Range("I38").FormulaR1C1 = Formule
'Range("I38").Value = Range("I38").Value 'Pour remplacer la formule
par la valeur
Next
End Sub

Je te laisse le soin de verifier que les références de formules
correspondent bien à ce que tu veux.

Cordialement,

Manu/



"kalinaja" a écrit dans le message de
news:
Bonjour FFO,

Merci de ton aide

En fait j'aurais du mettre le code complet :

Sub Bouton35_QuandClic()
Dim Formule As Variant
Dim Chem As Variant
'1
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
For Each Chem In .SelectedItems
Formule = "=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next
End With
'2
For Each sh In Array("1A1", "1B1")
Sheets(sh).Activate
'3
Range("i38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
'Formule
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Next
End Sub

'1 : demander à l'utilisateur de sélectionner le fichier concerné afin de
récupérer son chemin.
'2 : avec array définir les feuilles qui doivent être traitées par la
macro
puis sélectionner la première feuille concernée, puis la seconde, ....
'3 : sélection de la cellule à alimenter dans la feuille, ajout de la
formule rechercheV ... et copier coller pour ne garder au final que la
valeur

or au '3 cela ne fonctionne pas (toujours pas) à chaque passage excel
ouvre
une fenêtre de type "ouvrir" intitulée mettre à jour la valeur Chem or ce
que
je voulais c'était bien que l'utilisateur n'ait à la déclarer qu'une fois
au
début de la macro le chemin et non pas pour chaque cellule de chaque
feuille
contenue dans Array ...

Si tu vois ou cela peut pêcher ...

Merci encore,

Cordialement,

FFO.



Salut à toi

J'ai testé ton code et aprés l'avoir adapté comme ceci:

For Each sh In Array("1A1", "1B1")
Sheets("Feuil1").Activate
'encore merci cousinhub !
Range("I38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next

j'ai corrigé : Sheets("Feuil1").Activate
tu avait mis : Sheets(sh).Activate
or sh est la variable déclaré censé représenté chaque cellule de la zone
Array ("1A1", "1B1")
A moins que tu ais toutes feuilles avec le nom représentant la valeur de
toutes ces cellules
J'ai mis à la fin de code l'instruction NEXT qui faisait cruellement
défaut

Et ton code a fonctionné
J'ai bien eu en cellule I38 la formule > > > > >> =RECHERCHEV($A38;[Chem]Feuil2!$A:$T;3;FAUX)


Voila donc l'état de mes constatations concernant ton code
Peut être t'aurais je aidé
Dis moi !!!



Bonsoir à tous,

à chaque jour son impasse ...

je stocke un chemin vers un fichier xls dans une variable nommée Chem

or je souhaite l'injecter dans un code de type :

For Each sh In Array("1A1", "1B1")
Sheets(sh).Activate
'encore merci cousinhub !
Range("I38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"

J'ai essayé des variantes :

ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[" & Chem & " ]Import'!C1:C20,3,FALSE)"

ou en utilisant une variable intermédiaire :

Formule = "=VLOOKUP(RC1,'[" & Chem & "]Import'!C1:C20,3,FALSE)"
ActiveCell.FormulaR1C1 = _
Formule
Formule me donne bien la formule complétée mais au moment du
ActiveCell.FormulaR1C1 cela ne marche pas ...

Si vous avez une idée ...

En vous remerciant,

Cordialement,

FFO.




















Avatar
tissot.emmanuel
Bonsoir,

Quelques petits problemes de crochets et d'apostrophes plus tard.....

Sub Bouton35_QuandClic()
Dim Formule As String, sh As Worksheet
Dim Repertoire As String, NomFichier As String
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then Exit Sub
NomFichier = Dir(.SelectedItems(1))
Repertoire = Left(.SelectedItems(1), Len(.SelectedItems(1)) -
Len(NomFichier))
Formule = "=VLOOKUP(RC1,'" & Repertoire & "[" & NomFichier & "]" &
"Import'!R1C3:R20C5,3,FALSE)"
End With
For Each sh In Sheets(Array("Feuil1", "Feuil2"))
sh.Activate
Range("I38").FormulaR1C1 = Formule
'Range("I38").Value = Range("I38").Value
Next
End Sub

Par contre il faut redimensionner la table de recherche (C1:C20
initialement) pour pouvoir recuperer la valeur de la 3eme colonne, cette
plage est donc devenu C1:E20 (soit R1C3:R20C5 dans la formule), sinon la
formule renvoie systematiquement #REF.

Cordialement,

Manu/



"kalinaja" a écrit dans le message de
news:
j'ai francisé l'expression Vlookup en rechercheV, passé les "," en ";",
les
RC en LC, il bloquerait sur l'expression '[D:/..../abc.xls]'import!...

Ce serait le lien qu'excel considérerait comme non valide ?


Re-bonjour FFO,

J'ai une erreur de type 1004

le contenu de Formule ne s'insère qu'à partir du moment ou je supprime le
de début d'expression ... et si je le rajoute manuellement la formule ne
fonctionne pas donc ce serait un problème directement lié au vlookup mais


je
n'ai pas réussi à identifier lequel ... pour l'instant ...

Désolé, je ne peux transmettre aucun document ...

Cordialement,

FFO.


Rebonjours à toi
Le code de tissot
Chez moi ne plante pas
et s'exécute avec succés
Quel message d'erreur as tu ???
A quelle ligne du code se positionne le débugage ???
Ne pourrais tu pas nous envoyer ton fichier pour le tester ???

Dans l'attente de tes réponses


Merci beaucoup,
ton code est infiniment plus propre que le mien ! (cf. chapitre
VBAiste du
dimanche ...;+)

Malheureusement, ça plante toujours à la ligne
Range("I38").FormulaR1C1 >> > > Formule
la variable formule contient bien la bonne information mais
impossible de
l'injecter dans la cellule i38, j'ai essayé ave formula sans plus de
succès
...

bref à suivre ...

Merci encore,

Cordialement,

FFO.


Bonjour,

Quelques remarques si ca peut aider:

With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
For Each Chem In .SelectedItems
Formule = "=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next
End With


Etant donné que MultiSelectúlse, SelectedItems ne peut contenir
qu'un
élément, la boucle est inutile.
Rien n'est prévu en cas de clic sur Annuler.
D'autre part la formule semble mélanger les styles de références
(A1 et
L1C1).
Je suggere donc ceci:

Sub Bouton35_QuandClic()
Dim Formule As String, sh As Worksheet
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then Exit Sub
Formule = "=VLOOKUP(RC1,'[" & .SelectedItems(1) &
"]Import'!R1C3:R20C3,3,FALSE)"
End With
For Each sh In Sheets(Array("Feuil1", "Feuil2"))
sh.Activate
Range("I38").FormulaR1C1 = Formule
'Range("I38").Value = Range("I38").Value 'Pour remplacer la
formule
par la valeur
Next
End Sub

Je te laisse le soin de verifier que les références de formules
correspondent bien à ce que tu veux.

Cordialement,

Manu/



"kalinaja" a écrit dans le
message de
news:
Bonjour FFO,

Merci de ton aide

En fait j'aurais du mettre le code complet :

Sub Bouton35_QuandClic()
Dim Formule As Variant
Dim Chem As Variant
'1
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
For Each Chem In .SelectedItems
Formule = "=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next
End With
'2
For Each sh In Array("1A1", "1B1")
Sheets(sh).Activate
'3
Range("i38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
'Formule
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Next
End Sub

'1 : demander à l'utilisateur de sélectionner le fichier concerné
afin de
récupérer son chemin.
'2 : avec array définir les feuilles qui doivent être traitées
par la
macro
puis sélectionner la première feuille concernée, puis la seconde,
....
'3 : sélection de la cellule à alimenter dans la feuille, ajout
de la
formule rechercheV ... et copier coller pour ne garder au final
que la
valeur

or au '3 cela ne fonctionne pas (toujours pas) à chaque passage
excel
ouvre
une fenêtre de type "ouvrir" intitulée mettre à jour la valeur
Chem or ce
que
je voulais c'était bien que l'utilisateur n'ait à la déclarer
qu'une fois
au
début de la macro le chemin et non pas pour chaque cellule de
chaque
feuille
contenue dans Array ...

Si tu vois ou cela peut pêcher ...

Merci encore,

Cordialement,

FFO.



Salut à toi

J'ai testé ton code et aprés l'avoir adapté comme ceci:

For Each sh In Array("1A1", "1B1")
Sheets("Feuil1").Activate
'encore merci cousinhub !
Range("I38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next

j'ai corrigé : Sheets("Feuil1").Activate
tu avait mis : Sheets(sh).Activate
or sh est la variable déclaré censé représenté chaque cellule
de la zone
Array ("1A1", "1B1")
A moins que tu ais toutes feuilles avec le nom représentant la
valeur de
toutes ces cellules
J'ai mis à la fin de code l'instruction NEXT qui faisait
cruellement
défaut

Et ton code a fonctionné
J'ai bien eu en cellule I38 la formule >> > > > >> =RECHERCHEV($A38;[Chem]Feuil2!$A:$T;3;FAUX)


Voila donc l'état de mes constatations concernant ton code
Peut être t'aurais je aidé
Dis moi !!!



Bonsoir à tous,

à chaque jour son impasse ...

je stocke un chemin vers un fichier xls dans une variable
nommée Chem

or je souhaite l'injecter dans un code de type :

For Each sh In Array("1A1", "1B1")
Sheets(sh).Activate
'encore merci cousinhub !
Range("I38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"

J'ai essayé des variantes :

ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[" & Chem & " ]Import'!C1:C20,3,FALSE)"

ou en utilisant une variable intermédiaire :

Formule = "=VLOOKUP(RC1,'[" & Chem &
"]Import'!C1:C20,3,FALSE)"
ActiveCell.FormulaR1C1 = _
Formule
Formule me donne bien la formule complétée mais au moment du
ActiveCell.FormulaR1C1 cela ne marche pas ...

Si vous avez une idée ...

En vous remerciant,

Cordialement,

FFO.






















Avatar
kalinaja
Bonjour Emmanuel,

MAGNIFIQUE !!!

Merci beaucoup ça marche parfaitement ...

J'en étais à partir sur une formulalocal avec classeur source ouvert ...
mais là c'est royal !

Encore merci,

Cordialement,

FFO.

Ps : en fait dans mon expression C1:C20 faisait référence à Columns 1 à 20
et reprenait l'ensemble de la table source


Bonsoir,

Quelques petits problemes de crochets et d'apostrophes plus tard.....

Sub Bouton35_QuandClic()
Dim Formule As String, sh As Worksheet
Dim Repertoire As String, NomFichier As String
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then Exit Sub
NomFichier = Dir(.SelectedItems(1))
Repertoire = Left(.SelectedItems(1), Len(.SelectedItems(1)) -
Len(NomFichier))
Formule = "=VLOOKUP(RC1,'" & Repertoire & "[" & NomFichier & "]" &
"Import'!R1C3:R20C5,3,FALSE)"
End With
For Each sh In Sheets(Array("Feuil1", "Feuil2"))
sh.Activate
Range("I38").FormulaR1C1 = Formule
'Range("I38").Value = Range("I38").Value
Next
End Sub

Par contre il faut redimensionner la table de recherche (C1:C20
initialement) pour pouvoir recuperer la valeur de la 3eme colonne, cette
plage est donc devenu C1:E20 (soit R1C3:R20C5 dans la formule), sinon la
formule renvoie systematiquement #REF.

Cordialement,

Manu/



"kalinaja" a écrit dans le message de
news:
j'ai francisé l'expression Vlookup en rechercheV, passé les "," en ";",
les
RC en LC, il bloquerait sur l'expression '[D:/..../abc.xls]'import!...

Ce serait le lien qu'excel considérerait comme non valide ?


Re-bonjour FFO,

J'ai une erreur de type 1004

le contenu de Formule ne s'insère qu'à partir du moment ou je supprime le
de début d'expression ... et si je le rajoute manuellement la formule ne
fonctionne pas donc ce serait un problème directement lié au vlookup mais



je
n'ai pas réussi à identifier lequel ... pour l'instant ...

Désolé, je ne peux transmettre aucun document ...

Cordialement,

FFO.


Rebonjours à toi
Le code de tissot
Chez moi ne plante pas
et s'exécute avec succés
Quel message d'erreur as tu ???
A quelle ligne du code se positionne le débugage ???
Ne pourrais tu pas nous envoyer ton fichier pour le tester ???

Dans l'attente de tes réponses


Merci beaucoup,
ton code est infiniment plus propre que le mien ! (cf. chapitre
VBAiste du
dimanche ...;+)

Malheureusement, ça plante toujours à la ligne
Range("I38").FormulaR1C1 > >> > > Formule
la variable formule contient bien la bonne information mais
impossible de
l'injecter dans la cellule i38, j'ai essayé ave formula sans plus de
succès
...

bref à suivre ...

Merci encore,

Cordialement,

FFO.


Bonjour,

Quelques remarques si ca peut aider:

With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
For Each Chem In .SelectedItems
Formule = "=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next
End With


Etant donné que MultiSelectúlse, SelectedItems ne peut contenir
qu'un
élément, la boucle est inutile.
Rien n'est prévu en cas de clic sur Annuler.
D'autre part la formule semble mélanger les styles de références
(A1 et
L1C1).
Je suggere donc ceci:

Sub Bouton35_QuandClic()
Dim Formule As String, sh As Worksheet
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then Exit Sub
Formule = "=VLOOKUP(RC1,'[" & .SelectedItems(1) &
"]Import'!R1C3:R20C3,3,FALSE)"
End With
For Each sh In Sheets(Array("Feuil1", "Feuil2"))
sh.Activate
Range("I38").FormulaR1C1 = Formule
'Range("I38").Value = Range("I38").Value 'Pour remplacer la
formule
par la valeur
Next
End Sub

Je te laisse le soin de verifier que les références de formules
correspondent bien à ce que tu veux.

Cordialement,

Manu/



"kalinaja" a écrit dans le
message de
news:
Bonjour FFO,

Merci de ton aide

En fait j'aurais du mettre le code complet :

Sub Bouton35_QuandClic()
Dim Formule As Variant
Dim Chem As Variant
'1
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False
.Show
For Each Chem In .SelectedItems
Formule = "=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next
End With
'2
For Each sh In Array("1A1", "1B1")
Sheets(sh).Activate
'3
Range("i38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
'Formule
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues,
Operation:=xlNone,
SkipBlanks _
:úlse, Transpose:úlse
Next
End Sub

'1 : demander à l'utilisateur de sélectionner le fichier concerné
afin de
récupérer son chemin.
'2 : avec array définir les feuilles qui doivent être traitées
par la
macro
puis sélectionner la première feuille concernée, puis la seconde,
....
'3 : sélection de la cellule à alimenter dans la feuille, ajout
de la
formule rechercheV ... et copier coller pour ne garder au final
que la
valeur

or au '3 cela ne fonctionne pas (toujours pas) à chaque passage
excel
ouvre
une fenêtre de type "ouvrir" intitulée mettre à jour la valeur
Chem or ce
que
je voulais c'était bien que l'utilisateur n'ait à la déclarer
qu'une fois
au
début de la macro le chemin et non pas pour chaque cellule de
chaque
feuille
contenue dans Array ...

Si tu vois ou cela peut pêcher ...

Merci encore,

Cordialement,

FFO.



Salut à toi

J'ai testé ton code et aprés l'avoir adapté comme ceci:

For Each sh In Array("1A1", "1B1")
Sheets("Feuil1").Activate
'encore merci cousinhub !
Range("I38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"
Next

j'ai corrigé : Sheets("Feuil1").Activate
tu avait mis : Sheets(sh).Activate
or sh est la variable déclaré censé représenté chaque cellule
de la zone
Array ("1A1", "1B1")
A moins que tu ais toutes feuilles avec le nom représentant la
valeur de
toutes ces cellules
J'ai mis à la fin de code l'instruction NEXT qui faisait
cruellement
défaut

Et ton code a fonctionné
J'ai bien eu en cellule I38 la formule > >> > > > >> =RECHERCHEV($A38;[Chem]Feuil2!$A:$T;3;FAUX)


Voila donc l'état de mes constatations concernant ton code
Peut être t'aurais je aidé
Dis moi !!!



Bonsoir à tous,

à chaque jour son impasse ...

je stocke un chemin vers un fichier xls dans une variable
nommée Chem

or je souhaite l'injecter dans un code de type :

For Each sh In Array("1A1", "1B1")
Sheets(sh).Activate
'encore merci cousinhub !
Range("I38").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[Chem]Import'!C1:C20,3,FALSE)"

J'ai essayé des variantes :

ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC1,'[" & Chem & " ]Import'!C1:C20,3,FALSE)"

ou en utilisant une variable intermédiaire :

Formule = "=VLOOKUP(RC1,'[" & Chem &
"]Import'!C1:C20,3,FALSE)"
ActiveCell.FormulaR1C1 = _
Formule
Formule me donne bien la formule complétée mais au moment du
ActiveCell.FormulaR1C1 cela ne marche pas ...

Si vous avez une idée ...

En vous remerciant,

Cordialement,

FFO.






















1 2