Vba: Importer valeur externe dans userform

Résolu
renoncule62 Messages postés 94 Statut Membre -  
renoncule62 Messages postés 94 Statut Membre -
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

  1. renoncule62 Messages postés 94 Statut Membre 2
     
    Bonjour,
    Personne pour me venir en aide svp ?

    Merci.
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. renoncule62 Messages postés 94 Statut Membre 2
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  4. renoncule62 Messages postés 94 Statut Membre 2
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. renoncule62 Messages postés 94 Statut Membre 2
     
    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
    1. renoncule62 Messages postés 94 Statut Membre 2
       
      Je voulais classer...
      0
  7. renoncule62 Messages postés 94 Statut Membre 2
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      bonjour

      ça ne marche qu'avec 1 seule cellule
      0
  8. renoncule62 Messages postés 94 Statut Membre 2
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  9. renoncule62 Messages postés 94 Statut Membre 2
     
    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
  10. renoncule62 Messages postés 94 Statut Membre 2
     
    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