IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

envoyer le contenu d'un userform dans un fichier différent [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut envoyer le contenu d'un userform dans un fichier différent
    Bonjour le forum,
    Je souhaite savoir comment faire pour envoyer le contenu d'un Userform (textbox, optionbutton etc.) dans un tableur se trouvant sur un autre fichier.

    Les deux fichiers se trouvant dans 2 chemins différents.

    Merci pour votre aide.Je me sens complètement dépassé par ce concept et c'est une étape utile et importante d'un projet.

    Merci.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Salut à toi,

    Par le contenu, tu veux bien parler des valeurs ? Par exemple écrire le contenu de la textbox1 du formulaire dans un autre fichier ? Tu ne parles pas de transférer les objets ? (juste pour être sûr)

    Ensuite, ton fichier sera-t-il ouvert ou fermé ?

    Si ton fichier peut être ouvert alors c'est facile :

    Tu crées ton bouton dans le formulaire, par exemple.. Ce bouton s'appelle ici CommandButton1 pour l'exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim wbDistant As Workbook
    Set wbDistant = Workbooks.Open("ICI TON LIEN COMPLET AVEC L'EXTENSION XLS XLSM OU AUTRE")
    'à partir d'ici, pour écrire dans ce fichier, au lieu d'écrire sheets(XXX).Range(XXX) alors tu ajouteras wbDistant.Sheets(YYY).Range(YYY).
     
    'Par exemple, pour envoyer le contenu de ta textbox2 dans le fichier distant en 3ème feuille et en C12 tu marqueras :
     
    wbDistant.Sheets(3).Range("C12").value = TextBox2.Text
     
    'et ainsi de suite
    Quentin

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Par contre, si je suis toujours dans la voie qui t'intéresse, je te conseille du coup d'associer ton fichier contenant le formulaire à une variable (wbOrigine, par ex) pour pouvoir plus précisément gérer les fichiers par la suite...

    En effet, ton wbDistant sera ouvert et prendra probablement la main dès que tu écriras la moindre range ou sheet (exactement comme lorsque l'on travaille dans plusieurs feuille, il est fort utile de les spécifier...)

    En fait, il faut comprendre que Range("A1") est compris comme ActiveWorkbook.ActiveSheet.Range("A1") donc dès que tu ouvres ton nouveau classeur, s'il passe au premier plan (donc s'il devient actif) alors ton fichier d'origine sera compliqué à récupérer... autant lui donner un nom dès le d

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    'On déclare
    Dim wbOrigine As Workbook
    Dim wbDistant As Workbook
    'On affecte
    Set wbOrigine = ActiveWorkbook
    Set wbDistant = Workbooks.Open("ICI TON LIEN COMPLET AVEC L'EXTENSION XLS XLSM OU AUTRE")
    'On joue avec
    'à partir d'ici, pour écrire dans ce fichier, au lieu d'écrire sheets(XXX).Range(XXX) alors tu ajouteras wbDistant.Sheets(YYY).Range(YYY).
    'et pour écrire dans le wbOrigine, pareil : wbOrigine.Sheets(...).Range(...) = ...
    'Par exemple, pour envoyer le contenu de ta textbox2 dans le fichier distant en 3ème feuille et en C12 tu marqueras :
     
    wbDistant.Sheets(3).Range("C12").value = TextBox2.Text
     
    'et ainsi de suite
    Voilà, en espérant avoir répondu à ta question...

  4. #4
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut
    Bonjour Quentin 77170,
    Par contenu j'entends effectivement le contenu. Le texte contenu dans une textBox, ou encore les éventualités des OptionButton.
    Je cherche le moyen le plus simple de réaliser cette tâche (donc classeur ouvert si c'est plus facile).

    J'ai bien compris les erreurs possibles avec le "range("A42")" en revanche définir des variables beaucoup moins.

    Parce que définir une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbOrigine = ActiveWorkbook
    je ne vois pas ce que ça rajoute au code...

    En revanche, si j'ai bien compris pour le wbDistant, il faut spécifier son chemin complet genre

    C:\Dossier1\dossier2\fichier.xlsx. que je mets derrière "Workbooks.Open"

    c'est bien ça?

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    Resalut,

    Il y a pas mal de tutos et de posts sur les variables mais pour faire simple, ta variable peut contenir une valeur ou un objet

    Si ta cellule A1 a pour texte "bonjour" alors marquer Variable =Range("A1") signifie que Variable vaudra simplement le texte "bonjour"

    Pour que ta variable devienne une variable objet, liée à la cellule, au classeur ou à tout objet possible, il faut juste spécifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Variable = Range("A1")
    Maintenant, pour changer la couleur de A1, tu peux passer par ta variable en faisant Variable.Interior.Color = RGB(255,0,0)

    Pour être plus carré et que la saisie semi-automatique fonctionne lorsque tu utilises ta variable objet, il faut la déclarer préalablement... Dans ta situation, tu auras wbOrigine et wbDistant qui seront des classeurs Excel (type : Workbook).

    Par contre, ton objet peut ne pas encore exister (ex : Un classeur qui n'est pas encore ouvert ou qui n'existe pas), tu peux alors associer la variable avec le nouvel objet ou celui que tu vas ouvrir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Classeur As Workbook
    Set Classeur = Workbooks.Add 's'il n'existe pas
    Set Classeur = Workbooks.Open (Chemin) 's'il existe mais qu'il n'est pas ouvert
    Set Classeur = Workbooks(index ou nom) 's'il existe et est ouvert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim wbOrigine As Workbook ' ou le nom que tu veux
    Dim wbDistant As Workbook ' idem, on a donc déclaré 2 variables objets qui seront des classeurs excel
     
    Set wbOrigine = ActiveWorkbook 'En fait, la ligne du dessous te fera perdre ton classeur d'origine comme étant l' 'ActiveWorkbook'
    Set wbDistant = Workbooks.Open ("Ici effectivement ton lien complet avec l'extension, le tout entre guillemets") 'tu peux rajouter des arguments avec des virgules 
     
    'Ensuite, comme je t'ai dit, pour écrire dans le wbdistant, tu fais :
    wbDistant.Sheets(1).Range("A1").Value = ComboBox1.Text 'etc
     
    'Pour écrire dans ton classeur d'origine, il faudra donc de même passer par 
    wbOrigine.Sheets(1).Range("A1")...
    En fait, tu n'es pas obligé d'utiliser des variables, mais jouer avec uniquement l'"ActiveWorkbook" est très "risqué", ta macro va très vite être perdue... Comme quand tu travailles entre plusieurs feuilles, surtout si la feuille active change en cours de macro !

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Par défaut
    J'ai pas spécifié, mais ensuite à l'aide de ta variable que moi j'appellerais wbDistant dans cet exemple, mais que tu peux appeler comme tu veux, tu vas contrôler comme tu veux le classeur en question..

    Tu pourras par exemple utiliser wbDistant.Close, wbDistant.Save etc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoyer le contenue d'un TextBox dans un wchar_t*
    Par vin100H dans le forum C++/CLI
    Réponses: 6
    Dernier message: 30/08/2012, 15h20
  2. Réponses: 2
    Dernier message: 27/09/2011, 15h24
  3. Réponses: 1
    Dernier message: 10/02/2011, 12h14
  4. Réponses: 2
    Dernier message: 02/11/2007, 18h12
  5. [VB] Probleme ecriture de contenu d'une userform dans *.xls
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 20/12/2005, 12h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo