Vba: Importer valeur externe dans userform

Résolu/Fermé
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 - 17 nov. 2011 à 22:50
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 - 25 nov. 2011 à 13:10
Bonjour,

Je ne parviens pas à trouver réponse à ce que je cherche à faire et de plus, j'avais posté dans un Forum inadapté(bureautique), je me permet donc de répéter ma demande ici:
tout d'abord, est-il possible de récupérer, dans un textbox d'userform, la valeur d' une cellule d'un autre classeur fermé?
sinon ouvert ?
quelle serait la synthaxe? du style....

userform1.textbox1.caption=c:\mondossier\monsous dossier\worbook1\sheet1\cell(1,1).value

Merci de votre aide


9 réponses

renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
18 nov. 2011 à 08:01
Bonjour,
Personne pour me venir en aide svp ?

Merci.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
18 nov. 2011 à 08:23
Bonjour

demande:22h50
impatience: 8h01

Laisse nous dormir! :-(
https://www.cjoint.com/?3KsiwRUEq2Z

le classeur source reste fermé
a incorporer dans les codes de l'userform
chemin = "dossier_du_classeur_source"
'R7C4<==> D7
textbox1 = ExecuteExcel4Macro("'" & chemin & "\[source.xls]Feuil1'!R7C4")
--

Michel
0
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
18 nov. 2011 à 09:44
Merci Michel,
Je pensais queconccernant le fichier joint, il s'agissait d'un exemple mais.....
en tout cas il n'en est rien, j' imagine que dans le domaine de la programmation ça travaille aussi la nuit.
Pour ma part, je ne suis pas un crac en VBA mais j'aime ça et cherche aussi à approfondir les réponses qui me sont sympathiquement données.
concernant le sujet du post, je ne connaissais pas cette fonction (merci aussi à Mr Walkenbach).
Ca marche (bien sure) à ceci prét que dans l'execution de la macro une fenetre "mettre à jour les valeurs : source.xls" s'affiche, m'invitant à sélectionner le fichier en question. Est-il possible d'éviter cette fenêtre pour importer directement les données de source.xls stp ?

Merci encore et stp pas de 3KsiwRUEq2Z, je suis pas ccomme ça!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 18/11/2011 à 10:21
re,
"mettre à jour les valeurs : source.xls"
jamais vu cette fen^tre
mais peut-^tre
source est le nom du classeur dans ma maquette! il faut que tu écrives le nom de ton classeur où tu vas chercher la valeur

ci jopint l'exemple; n'aie pas peur! :o)
https://www.cjoint.com/?3Ksksngr3lv
mais ca fait longtemps que je ne l'ai pas testé, mais c'est pour savoir si il se passe le m^me phénomène chez toi
0
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
18 nov. 2011 à 12:16
Effectivement dans ton exemple ça fonctionne avec les fichiers source et destination dans le même dossier et la ommande "chemin = ThisWorkbook.Path".
Par contre dans le cas ou mon fichier source se trouve dans un autre dossier, ce qui donnerait par exemple:
chemin="c:\mondossier\monsousdossier\source.xls"

ça ne fonctionne pas directement et la fenêtre est appelée?
peux tu m'expliquer la corrélation entre les coordonnées de cellules de la fonction Walkenbach du type R7C4 qui correspond à D7 stp

Merci encore pour ton aide Michel
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
18 nov. 2011 à 12:57
il ne faut pas mettre le classeur dans la variable chemin
chemin="c:\mondossier\monsousdossier"


mais tu n'es pas obligé d'utiliser une variable si "source" est toujours au m^me endroit
ExecuteExcel4Macro("'c:\mondossier\monsousdossier\[monclasseur.xls]Feuil1'!R7C4")

a vérifier
nota: ("' lire guillement-apostrophe

RxCy
R =ligne, x numéro de ligne
C=colonne, numéro de colonne (A=1,B=2, C=3.......AA=27....)

donc R7C4 <===>D4
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
18 nov. 2011 à 23:23
Bonsoir,
je voulais classé ce post en "résolu"puisque l'aide de Michel m'a permis d'y parvenir.
je laisse en piéce jointe un exemple de ce que je souhaitais obtenir pour ceux qui seraient de passsage pour ce type de recherche.
pour rappel, je souhaitais, à l'ouverture d'un userform, appeler, sous forme de Label ou textbox, des valeurs de cellules contenues dans un classeur externe fermé .

dans l'exemple, on considére que le fichier source se trouve sur le bureau.
il vous faudra modifier les liens de "Private Sub UserForm_Activate()" en fonction de l'emplacement de ce fichier.
sur appel de l'userform via le bouton, on reçoit les valeurs du fichier source dans cet userform sur les labels 1, 2 et 3
encore un grand merci pour toutes ces explications Michel

https://www.cjoint.com/?AKsxqP8EI2c
0
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
18 nov. 2011 à 23:25
Je voulais classer...
0
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
24 nov. 2011 à 17:13
Bonjour,
avec la fonction:
ExecuteExcel4Macro("'c:\mondossier\monsousdossier\[monclasseur.xls]Feuil1'!R7C4"),
si je veux rechercher si une valeur est présente dans une plage, comment dois-je remplacer R1C1 pour la plage, j'ai essayé de nommer ma plage mais ça ne fonctionne pas, j'ai essayé aussi ("R1C1:R9C1")mais sans succcés. Connaitriez vous la bonne syntaxe si toutefois c'est faisable.
le code ci dessous fonctionne mais avec une seule référence de cellule(R1C1).

Private Sub Worksheet_Change(ByVal Target As Range)

If Target = ExecuteExcel4Macro("'c:\mondossier\monsousdossier\[monclasseur.xls]Feuil1'!R1C1") Then
MsgBox "Trouvé" & "  " & Target.Value

end if
end sub


Merci de m'éclairer, c'est sympa.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
24 nov. 2011 à 18:08
bonjour

ça ne marche qu'avec 1 seule cellule
0
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
24 nov. 2011 à 19:57
Bonsoir et merci Michel,
donc pas de possibilité d' aboutir à ce que je souhaite.
y a t-il un moyen de contourner?

Merci

Cdlt
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
24 nov. 2011 à 22:07
Oui tu fais une boucle sur les 9 cellules
(ou tu écris 9 lignes)
principe

for lig= 1 to 9
ExecuteExcel4Macro("'c:\mondossier\monsousdossier\[monclasseur.xls]Feuil1'!R" & lig & "C1")
next

non testé
0
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
25 nov. 2011 à 08:46
Bonjour,
C'est testé et ça marche avec le R" & lig & "C1 ! Me reste maintenant à l'adapter , me familiariser et comprendre toutes ces fonctions (for, next, to...)

merci encore Michel, c'est sympa.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
25 nov. 2011 à 09:31
pour te familiariser avec VBA

http://www.info-3000.com/
très cool et pédagogique

et seulement ensuite
https://bidou.developpez.com/article/VBA/
complet et indispenable, mais ca ne se lit pas un roman policier
0
renoncule62 Messages postés 83 Date d'inscription vendredi 25 janvier 2008 Statut Membre Dernière intervention 1 juillet 2012 2
25 nov. 2011 à 13:10
Bonjour,
Je met une simplification de mon code finalisé pour que ça puisse servir pour d'autres...

la fonction recherchée:
aprés saisie sur une cellule, je vérifie si la valeur qui vient d' y être entrée se trouve dans une plage de cellules d'un autre classeur fermé. Si oui, une instruction et si non une autre

Voilà et même si je me répéte.... merci encore à Michel que j'ai aperçu (de nom) dans quelques forums.

Private Sub Worksheet_Change(ByVal Target As Range)

For lig = 1 To 9

If ExecuteExcel4Macro("'C:\mondossier\monsousdossier\[monclasseur.xls]Feuil1'!R" & lig & "C1") = Target Then

MsgBox "trouvé" & "  " & Target.Value

GoTo fin

End If

Next

MsgBox "pas trouvé" & "  " & Target.Value

fin:

End Sub
0