Remplir Userform automatiquement

Lptht

XLDnaute Nouveau
Bonjour à tous,

Je débute en Userform et je ne trouve pas de solutions à mon problème. Je fais donc appel à votre savoir pour m'éclairer.

Voici mon problème:

Dans le classeur 'Mon_classeur.xlsm", j'ai créé un Userform1. Cet Userform est composé en deux parties :
- une remplie manuellement par l'utilisateur
- une remplie automatiquement à partir des données d'un second classeur (Donnees.xlsx) et des saisies manuelles

Mon problème est le suivant: comment remplir automatiquement l'Userform à partir des saisies de l'utilisateur, avec les données du classeur "Donnees.xlsx"? Et est-il possible de faire cette saisie automatique sans avoir à ouvrir le classeur "Donnees.xslx"?

Afin d'être plus clair, je vous joins les deux fichiers en question.

Encore merci pour le temps que vous m'accorderez!
 

Pièces jointes

  • Donnees.xlsx
    8.4 KB · Affichages: 48
  • Mon_classeur.xlsm
    19.4 KB · Affichages: 36
  • Donnees.xlsx
    8.4 KB · Affichages: 61
  • Mon_classeur.xlsm
    19.4 KB · Affichages: 52
  • Donnees.xlsx
    8.4 KB · Affichages: 62
  • Mon_classeur.xlsm
    19.4 KB · Affichages: 47

Regueiro

XLDnaute Impliqué
Re : Remplir Userform automatiquement

Bonsoir le Forum, Lptht
Pas très Clair tes informations.

1. Le Combobox1
Que veux-tu dans celui-ci, parceque actuellement tu ne peux rien obtenir ainsi :
Code:
Private Sub ComboBox1_Change()
Sheets("Donnees").Select
ComboBox1.RowSource = "Profession!A2:A3"
End Sub

Pour info l'onglet "Profession" est dans le Classeur "Mon_classeur.xlsm"

Pourrais-tu mettre un peu plus d'info
A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Remplir Userform automatiquement

Bonsoir Lptht et bienvenu, bonsoir le forum,

J'avais pris comme résolution de ne plus répondre au premier post des nouveaux venus car, dans la grande majorité des cas, ils postent puis disparaissent dans la nature sans donner suite... C'est frustrant et c'est pour cela que... Mais je navet (non non, y'a pas de faute...) pas vu et par conséquent...

Sans ouvrir le fichier de données, je ne sais pas faire. Je te propose donc de l'ouvrir puis de le refermer une fois les données récupérées. J'ai changé/renommé les contrôles pour plus de cohérence...

En pièce jointe ton fichier modifié avec le code commenté ci-dessous :


Ces deux lignes doivent être placées en haut du module de L'UserForm pour avoir une portée niveau module :

Code:
Private CD As Workbook 'déclare la variable CD (Classeur de Données)
Private OD As Object 'déclare la variable OD (Onglet de Données)
le code de l'initialisation de l'UserForm :
Code:
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
Dim CO As Workbook 'déclare la variable CO (Classeur Origine)
Dim OP As Object 'déclare la variable OP (Onglet Profession)
Dim CH As String 'déclare la variable CH (CHemin d'accès)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CO = ThisWorkbook 'définit le classeur origine CO
Set OP = CO.Sheets("Profession") 'définit l'onglet profession OP
CH = CO.Path & "/" 'définit le chemin d'acces CH
On Error Resume Next 'gestion des erreus (en cas d'erreur passe à la ligne suivante
Set CD = Workbooks("Donnees.xlsx") 'définit le classeur de données CD (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'efface l'erreur
    Workbooks.Open (CH & "Donnees.xlsx") 'ouvre le classeur "Donnees.xlsx"
    Set CD = ActiveWorkbook 'définit le classeur de données CD
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OD = CD.Sheets("Feuil1") 'définit l'onglet des donnés OD
'alimente de manière dynamique la ComboBox1
Me.ComboBox1.List = OD.Range("A2:A" & OD.Cells(Application.Rows.Count, 1).End(xlUp).Row).Value
'alimente de manière dynamique la ComboBox2
Me.ComboBox2.List = OP.Range("A2:A" & OP.Cells(Application.Rows.Count, 1).End(xlUp).Row).Value
CO.Activate 'active le classeur origine CO
CO.Sheets("Accueil").Select 'active l'onglet "Accueil"
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
Le code au changement de la ComboBox1 :
Code:
Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
If Me.ComboBox1.Value = "" Then 'condition : si la ComboBox1 est effacée
    Me.TextBox1.Value = "" 'vide la TextBox1
    Me.TextBox2.Value = "" 'vide la TextBox1
    Exit Sub 'sort de la procédure
End If 'fin de la condition
Me.TextBox1.Value = OD.Cells(Me.ComboBox1.ListIndex + 2, 2).Value 'récupère le nom
Me.TextBox2.Value = OD.Cells(Me.ComboBox1.ListIndex + 2, 3).Value 'récupère le lieu
CD.Close 'ferme le classeur de données CD (si tu as encore besoin recupérer des données, tu le laisse ouvert, tu le fermeras à la fin...)
End Sub
Le fichier :

[Édition]
Bonsoir Regueiro on s'est croisé...
 

Pièces jointes

  • Mon_classeur.xlsm
    26.6 KB · Affichages: 57
  • Mon_classeur.xlsm
    26.6 KB · Affichages: 63
  • Mon_classeur.xlsm
    26.6 KB · Affichages: 66
Dernière édition:

Lptht

XLDnaute Nouveau
Re : Remplir Userform automatiquement

Un grand merci à Regueiro et Robert (mais un peu plus à Robert tout de même! :) )

Désolé si ça n'était pas très clair, j'ai essayé d'expliquer à ma manière.

En tout cas, Robert, ça marche donc merci. Je vais maintenant reprendre chaque ligne pour comprendre le fonctionnement. Au fait, je n'ai toujours pas compris "navet".

PS : je n'avais pas précisé pour la combobox car je comptais résoudre ce problème par mes propes moyens. Mais merci tout de même!
 

Discussions similaires

Statistiques des forums

Discussions
312 450
Messages
2 088 510
Membres
103 873
dernier inscrit
Sabin