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 :

Remplir une feuille de calcul excel distante à partir d'un userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 24
    Par défaut Remplir une feuille de calcul excel distante à partir d'un userform
    Bonjour,

    voilà mon problème, j'ai crée un formulaire (userform) (sous VBA 6) avec différents champs que je renseigne et une fois rempli et validé les champs sont automatiquement recopiés dans la feuille de calcul Excel (Feuille1.xls par exemple). Jusque là c'est pas la mer à boire.

    Là ou çà se complique, c'est que j'ai crée une macro (et un joli petit bouton ) qui permet d'accéder à ce formulaire à partir d'excel. Le souci est que si je lance la macro à partir d'une seconde feuille (Feuille2.xls) et remplit les champs du formulaire, à la validation c'est la seconde feuille (Feuille2.xls) qui va voir ses champs compléter bien que j'ai la première qui ai été ouverte.

    J'aurais voulu savoir comment soit:
    • Donner le focus à la première feuille
    • Préciser dans l'enregistrement à l'intérieur de mon code VB quelle feuille de calcul choisir (avec chemin vers ce fichier à priori)


    Je vous remercie

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Par exemple, tu déclares ta feuille en tête de feuille de code de l'userform
    Puis, dans Userform_Initialize, tu instancies la feuille que tu désires renseigner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set FL1 = Worksheets("NomDeLaFeuille")
    Ainsi, où que tu sois dans l'userform, tu pourras utiliser FL1 à la place de Worksheets("NomDeLaFeuille") ou de ActiveSheet... etc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FL1.range(NoLig, NoCol).value = Textbox1.text
    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 24
    Par défaut
    Tout d'abord merci pour ta réponse ouskel mais j'ai encore quelques soucis avec mon programme.
    Pour tenter de mieux illustrer mes propos, j'ai écris un petit programme simple qui correspond à peu près à mon programme plus lourd (et qui me génère les mêmes erreurs).

    - un userform qui écrit "oui" ou "non" à la première ligne trouvée vide
    - le fichier excel se nomme "OuiNon.xls"
    - le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    'Rajout conseillé : Dim FON As Worksheet
     
    Private Sub UserForm_Initialize()
        'Rajout conseillé : Set FON = Worksheets("OuiNon.xls")
        ComboBox1.AddItem "Oui"
        ComboBox1.AddItem "Non"
        'La ComboBox est initialisée avec les 2 valeurs oui et non
    End Sub
     
     
    Private Sub CommandButton1_Click()
        If ComboBox1.Value = "" Then
                'la personne n'a choisi aucune des 2 propositions
                MsgBox "Choisissez une proposition"
                Exit Sub
            Else
                'on recherche la première cellule disponible
                Dim iL As Integer
                iL = Cells(65535, 1).End(xlUp).Offset(1).Row
                'on inscrit la valeur dans la première colonne
                Cells(iL, 1) = ComboBox1.Value
                UserForm1.Hide
            End If
    End Sub
    Le code de la macro lui est simplement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub OuiOuNon()
        UserForm1.Show
    End Sub

    Sans les rajouts, le code fonctionne bien mais si je lance la macro d'un autre fichier excel, le "oui" ou le "non" sont inscrits dans le fichier qui a lancé la macro et non dans le fichier "OuiNon.xls".
    Avec les rajouts, j'obtiens une erreur "Erreur d'exécution 9: l'indice n'appartient pas à la sélection" et le débogage me montre la ligne "UserForm1.Show".

    Que dois-je faire pour réussir cette prouesse?
    Merci encore

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Dans ton premier post, tu as écrit
    Le souci est que si je lance la macro à partir d'une seconde feuille (Feuille2.xls) et remplit les champs du formulaire, à la validation c'est la seconde feuille (Feuille2.xls) qui va voir ses champs compléter bien que j'ai la première qui ai été ouverte.
    Dans le dernier, tu écris
    Sans les rajouts, le code fonctionne bien mais si je lance la macro d'un autre fichier excel, le "oui" ou le "non" sont inscrits dans le fichier qui a lancé la macro et non dans le fichier "OuiNon.xls".
    Donc, c'est d'un autre fichier dont tu parles, et donc, nécessairement d'une autre feuille
    Et donc, le nom que tu dois utiliser est celui de l'autre fichier et de l'autre feuille; Ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set FL1 = Workbooks("NomDeLautreFichier.xls").Worksheets("NomDeLautreFeuille")
    que tu utilises comme je te l'ai indiqué (déclaration en tête de feuille de code de l'userform ou même dans le module standard qui contient la macro qui ouvre l'userform, et le code ci dessus dès que tu en as besoin ou dans la même macro, avant Userform.show)
    Une fois instanciée, FL1 sera reconnue partout partout
    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 24
    Par défaut
    Merci beaucoup, ça marche du tonnerre
    Pour ceux à qui ça peut servir je fournis le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Dim FON As Worksheet
     
    Private Sub UserForm_Initialize()
        Set FON = Workbooks("OuiNon.xls").Worksheets("Feuil1")
        'On bloque l'apparition du fichier "OuiNon.xls"
        Application.Windows("OuiNon.xls").Visible = False
        ComboBox1.AddItem "Oui"
        ComboBox1.AddItem "Non"
    End Sub
     
     
    Private Sub CommandButton1_Click()
        If ComboBox1.Value = "" Then
                'la personne n'a choisi aucune des 2 propositions
                MsgBox "Choisissez une proposition"
                Exit Sub
            Else
                'on recherche la première cellule dispo
                Dim iL As Integer
                iL = FON.Cells(65535, 1).End(xlUp).Offset(1).Row
                'on inscrit la valeur dans la première colonne
                FON.Cells(iL, 1) = ComboBox1.Value
                UserForm1.Hide
                'Je ferme le fichier "OuiNon.xls" en le sauvegardant
                Application.Windows("OuiNon.xls").Visible = True
                'je le remet visible, sinon il reste invisible, pensez aux autres ;) 
                Workbooks("OuiNon.xls").Close (1)
     
            End If
    End Sub
    avec la même ch'tite macro qui va bien.

    Petit bonus: le fichier "OuiNon.xls" est ouvert lors du lancement de la macro d'un fichier excel "Nouveau.xls" par exemple, les quelques lignes rajoutées permettent d'empêcher cette apparition mais l'écriture dans celui ci est faite.

    Merci encore,
    Kikumaru

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/01/2014, 11h01
  2. insérer une feuille de calcul Excel sur Image J
    Par robinou00 dans le forum ImageJ
    Réponses: 2
    Dernier message: 15/01/2014, 07h07
  3. Problème avec un code pour remplir une feuille de calcul
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 31/03/2011, 22h17
  4. Réponses: 1
    Dernier message: 21/09/2007, 00h28
  5. Générer l'event keydown à partir d'une feuille de calcul excel
    Par gerard123 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2007, 00h04

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