Questions userform
#1
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 15-07-2008 18h40
Bonjour le forum!

Je suis en train de créer mon premier userform (et oui il y a un début à tout  ) et de ce fait j'ai quelques questions!

J'ai créé un userform contenant des textboxs et des comboboxs. Un bouton permet d'afficher le userform et de transférer les données rentrées dans une ligne d'une feuille excel.

Ma première question est : quelle ligne de code dois-je rentrer pour que, lorsque je réaffiche la userformles fois d'après, les données précédemment rentrées ne s'affichent pas dans les textbox et combobox?

En clair, quelle code permet de faire un "reset" de la userform sans effecer les données précedemment rentrée et transférées dans les lignes de lafeuille excel?

Merci d'avance à vous!

++

Lannou
Hors Ligne
Rapport   Haut 

Re: Questions userform
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 15-07-2008 22h10
Bonsoir lannou, le Forum,

Citation :
lannou a écrit :
... lorsque je réaffiche la userform les fois d'après...

Hum.... j'imagine donc qu'à un moment donné tu masques ton userform pour le réafficher ultérieurement...
Et pour ce faire, j'imagine donc que tu utilises la méthode Hide de l'objet Userform comme ceci :
UserForm1.Hide
Si tel est le cas, alors je te confirme que ce n'est pas la bonne façon de procéder dans ton cas.

La méthode Hide ne fait que masquer le userform (comme si tu réduisais une fenêtre de l'exporateur sans la fermer réellement). Les données saisies par l'utilisateur sont donc conservées et réaffichées lorsque tu "ré-ouvres" le formulaire.

Pour réinitialiser les TextBox et autres contrôles à leur état initial, il convient de fermer réellement le userform et non le masquer. Tu utiliseras l'instruction Unload pour cela :
Unload UserForm1
Et si le code de fermeture se situe dans le module de code du Userform lui-même, tu pourras même utiliser le mot clé Me au lieu du nom du Userform :
Unload Me
L'instruction Unload va décharger complètement le Userform de la mémoire et donc réinitialiser les contrôles à leur valeur d'origine. Tu réafficheras ensuite le Userform sur demande grâce à Userform1.Show.

Cordialement,



Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Questions userform
#3
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 16-07-2008 18h31
Bonsoir tout le monde!

Merciiiiiiiiiiiii!!!!!! C'était exactement ca! J'utilisais bel et bien la fonction Userform1.Hide !
Grâce à toi j'obtiens bien ce que je voulais! Non seulement ca marche mais en plus j'ai  appris un truc  !!!

Ma deuxième question, toujours par rapport à ma userform est comment faire pour actualiser la liste des choix de ma ComboBox!
Je m'explique :  ma permière combobox demande à l'utilisateur de saisir le numéro de phase (chiffre entier)
Après des recherches, je sais que j'ai deux méthodes pour le faire :
1) utiliser les propriétés de la combobox dans rowsource. Le problème c'est que dans la colonne où sont rentré les données j'ai plusieurs fois la même valeur et je ne veux pas que dans la liste il y ait des doublons.
2) Rentrer du code. J'ai donc rentré ce code ci que j'ai trouvé et qui me semble généralisable à mon fichier:


' On actualise la liste de choix des n° de phase avec ceux qui ont déjà été rentrés :
Dim AllCells As Range, Cell As Range
Dim NoDupes As New Collection
On Error Resume Next
 For Each Cell In Range("A9:A2000")
  NoDupes.Add Cell.Value, CStr(Cell.Value)
 Next Cell
On Error GoTo 0
' On ajoute les éléments non dupliqués dans la zone de liste de ComboBox3 :
 For Each Item In NoDupes
  Création_tâche.ComboBox3.AddItem Item
 Next Item

Je comprend pas grand chose au code et ca ne marche pas, sauriez vous pourquoi?

Merci à vous!

P.S : j'ai essayer de rentrer le code grâce à la petite icone d'excel qui le permet mais à chaque fois il me plaçais le code en haut sans que je puisse le déplacer. Savez vous comment faire pour l'intégrer à l'endroit souhaité?


 
Hors Ligne
Rapport   Haut 

Re: Questions userform
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 16-07-2008 19h24
Bonsoir lannou, le Forum,

Tout d'abord, je te déconseille en effet l'utilisation de la propriété RowSource pour garnir ta ComboBox. J'ai, pour ma part, abandonné depuis longtemps le recours à cette propriété, trop restrictive et source de nombreux problèmes.

L'utilisation de la méthode AddItem est bien plus souple.

Le code que tu as trouvé est forcément bon puisqu'il s'agit d'une méthode fameuse de J.Walkenbach (adaptée d'une astuce de J.G. Hussey) permettant en effet de supprimer facilement les doublons d'une liste d'éléments.

Que ton code ne fonctionne pas est limite un mystère, car je viens de le tester avec succès. J'y ai toutefois apporté une ou deux "petites" modifications comme suit :
Option Explicit

Private Sub UserForm_Initialize()
' On actualise la liste de choix des n° de phase avec ceux qui ont déjà été rentrés :
Dim Cell As Range
Dim NoDupes As New Collection
Dim Item As Variant
    On Error Resume Next
    For Each Cell In Sheets("Feuil1").Range("A9:A2000")
        NoDupes.Add Cell.Value, CStr(Cell.Value)
    Next Cell
    On Error GoTo 0
    ' On ajoute les éléments non dupliqués dans la zone de liste de ComboBox3 :
    For Each Item In NoDupes
        ComboBox3.AddItem Item
    Next Item
End Sub
 
J'ai simplement ajouté la déclaration de variable Item (as Variant), précisé Sheets("Feuil1") - à adapter - devant ton Range("A9:A2000") et supprimé la notion de Création_tâche qui, je suppose, doit être le nom de ton Userform et n'est pas obligatoire ici (conseil : évite les caractères accentués dans le nom des objets VBA).

Pour peu que ton code est bien situé dans le module de code du Userform et que ta ComboBox se nomme bien ComboBox3, il n'y a pas de raison pour que ça ne fonctionne pas...

Pour comprendre le fonctionnement de ce morceau de code, l'idéal serait que tu lises les commentaires originaux de son auteur  JW (dans le lien que je mets plus haut). Si tu ne comprends toujours pas, alors j'essaierai de t'apporter le complément d'info.

Pour insérer le code VBA dans tes posts :
  1. Place d'abord le curseur d'édition à l'endroit où tu souhaites insérer ton code
  2. Clique sur le bouton d'insertion de code dans la barre d'outils
  3. Colle ton code dans le popup qui apparait et valide par OK.

Cordialement,



Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Questions userform
#5
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 17-07-2008 10h20
Bonjour à tous!

Merci pour ta réponse Didier et pour m'avoir éclairé sur ce code!
En ce qui concerne l'utilisation de la Rowsource, c'est bien ce que je pensais, je vais donc éviter de faire avec et passerai par le code.

J'ai regardé de plus près du fait que tu m'ais dit que ca aurait du marcher.
J'ai fait un pas à pas détaillé et effectivement tout le long de ma macro, la combobox se charge bien sans doublon des valeurs présentes dans ma colonne A. Par contre ces valeurs disparaissent à la toute fin de ma macro quand le pas à pas détaillé dépasse le "Unload Me", si bien que lorsque je réappuie sur le bouton commandant ma macro toutes les valeurs comprises dans ma combobox disparaissent.

En fait soit je mets "unload me" et tout disparait lorsque l'utilisateur veut rentrer de nouvelles données soit je mets "userform1.hide" et là ma combobox est bien chargé mais j'ai également les valeurs précédemment rentré par l'utilisateur alors que je souhaite quelles soient vides!

Comment faire pour que ma combobox se charge bien mais pour que mes textbox soient vides?

Merci,

Lannou
Hors Ligne
Rapport   Haut 

Re: Questions userform
#6
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 17-07-2008 14h55
Bonjour le forum!

Bon j'ai trouvé la réponse à ma question, à savoir, pourquoi ca ne marche pas!

En fait j'avais placer le code pour charger la combobox dans la macro du bouton "valider" de ma userform et non dans la macro Userform_Initialize!!! C'est pour ca que ca ne marchait pas, je suis un boulet... Mais en même temps je ne pouvais pas le savoir mais à force de me poser des questions, je viens de comprendre...

Merci pour ton aide Didier, c'est super sympa de ta part en tout cas de m'avoir aider!

Petit à petit je progresse! N'empèche que c'est incroyable ce que l'on peut faire comme choses utiles avec Excel! Il y a encore quelques semaines j'ignorais tout ca et n'utilisais que le minimum!

Encore merci,


Cordialement,

Lannou

p.S : Je ne met pas le sujet en "résolu" car j'aurai peut être une autre question (je continue de chercher par moi-même et la poserai si je suis bloqué!)


Hors Ligne
Rapport   Haut 

Re: Questions userform
#7
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 21-07-2008 13h30
Bonjour à tous!

Bon ba finalement je n'ai plus de question sur le sujet car j'ai résolu mon dernier problème par moi-même.

Je met donc le sujet en "résolu" en vous remerciant pour votre aide et vos conseils

Si, une petite question. Dans la programmation en vba, vaut il mieux faire plusieurs  macros indépendantes que l'on fait intervenir par la fonction "call" ou vaut il mieux faire le minimum de macro?

Merci à vous

++

Hors Ligne
Rapport   Haut 

Re: Questions userform
#8
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 21-07-2008 21h04
Bonsoir lannou, le Forum,

Merci de ton retour pour le [résolu].

En ce qui concerne le nombre et la taille des procédures, ce n'est pas simple de te répondre comme ça. Tout dépend de l'ampleur du projet, et des traitements par macro à réaliser.
En terme de clarté du code et en vue d'une maintenance à venir, il me paraît évident que plusieurs procédures ou fonctions bien définies et réservées chacune à une tâche bien déterminée seront toujours préférables à une seule grande procédure inextricable... 

Je pense qu'on peut imaginer un code idéal comme une procédure principale qui va représenter la trame du traitement et qui va appeler un ensemble de procédures externes pour chaque partie spécifique à réaliser.

L'objectif n'est pas non plus d'éclater un code par goût de le voir éclaté, mais tout simplement de savoir repérer les parties de traitement redondant pour les réaffecter dans des procédures externes dédiées, lesquelles seront réutilisables à volonté. Ensuite, savoir rendre ces procédures ou fonctions externes réutilisables dans différents cas de figure reste, pour moi, la vraie difficulté du développeur...

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Questions userform
#9
Aspirant XLPages

Inscription: 01/07/2008

Messages: 32

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 24-07-2008 18h32

Bonjour le forum!

Merci pour ton conseil, je vais tâcher de le suivre.

J'ai une autre question concernant ma userform. J'ai remplacé le bouton "valider" dont nous avons parlé pluh haut dans ce topic par un bouton suivant dont le but est:
- que la userform décharge les données que l'utilisateur a rentré
- ensuite, qu'elle se réaffiche vierge pour que l'utilisateur saisisse de nouvelles données.

J'ai donc pensé plusieurs solutions comme par exemple mettre à la toute fin de ma macro après le "unload me" userform.show pour qu'elle se réaffiche comme la première fois.

Le problème c’est que aucune de mes solutions ne convient puisque soit quand ma userform se réaffiche, les données précedemment saisie restent, soit mes combobox ne se chargent plus.

 

Avez-vous une idée ?

 

Merci d’avance
Hors Ligne
Rapport   Haut 

Re: Questions userform
#10
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 26-07-2008 12h25
Bonjour lannou, le Forum,

Citation :
lannou a écrit :

...quand ma userform se réaffiche, les données précedemment saisie restent...

Là, ça signifie que tu n'utilises pas Unload Me mais Me.Hide !

Citation :
lannou a écrit :

...soit mes combobox ne se chargent plus...


Sous Excel 2003, le code de ton bouton "Suivant" comme suit passe très bien :

Private Sub CommandButton1_Click()
    Unload Me
    UserForm1.Show
End Sub

Il devrait être suffisant pour décharger ton userform de la mémoire (et donc vider les données saisies par l'utilisateur) et le réafficher en rechargeant les ComboBox (dès lors où se chargement se situe bien dans l'évènement Initialize du Usf).

Maintenant, la dernière solution à ton problème peut aussi consister à effacer par le code les données saisies par l'utilisateur :

Private Sub CommandButton1_Click()
    TextBox1.Value = ""
    TextBox2.Value = ""
    'etc...
End Sub

et rendre ainsi ton Usf prêt pour une nouvelle saisie...

Cordialement,




Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes