Userform, problème bouton à cocher

remibob

XLDnaute Nouveau
Bonjour,

comme tous les ans, je me lance dans un nouveau projet Excel et je bloque toujours sur un truc (le fait est que je cherche toujours à en faire plus)...

Cette année, j'ai testé le userform avec optionbutton et une liste alimentée d'après ce bouton.

Voici le code (que j'ai fait de mes mains, d'avance je sais qu'il est super lourd :( ) :

Code:
Private Sub UserForm_Initialize()

TextBox1 = "0"

TextBox2 = "00"

End Sub


Private Sub OptionButton10_Change()
If OptionButton10 Then alimentelist Range("zone1")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton11_Change()
If OptionButton11 Then alimentelist Range("zone2")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton12_Change()
If OptionButton12 Then alimentelist Range("zone3")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton13_Change()
If OptionButton13 Then alimentelist Range("zone4")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton14_Change()
If OptionButton14 Then alimentelist Range("zone5")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton15_Change()
If OptionButton15 Then alimentelist Range("zone6")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton16_Change()
If OptionButton16 Then alimentelist Range("zone7")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton17_Change()
If OptionButton17 Then alimentelist Range("zone8")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton19_Change()
If OptionButton19 Then alimentelist Range("zone9")
ListBox1.ListIndex = 0
End Sub
Private Sub OptionButton21_Change()
If OptionButton21 Then alimentelist Range("zone10")
ListBox1.ListIndex = 0
End Sub
Sub alimentelist(zone As Range)
With ListBox1
    .Clear
    .List = zone.Value
End With
End Sub

Private Sub CommandButton1_Click()

FeuillePrecedente = ActiveSheet.Name

Sheets("Ventilation").Activate
Range("K1").Select
Selection.Copy
Range("ah65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False

Sheets("Ventilation").Activate
Range("ad65536").End(xlUp).Offset(1, 0).Select
ActiveCell = TextBox1

Sheets("Ventilation").Activate
Range("ae65536").End(xlUp).Offset(1, 0).Select
ActiveCell = TextBox2

If OptionButton2 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "KS"
End If
If OptionButton3 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "SM"
End If
If OptionButton4 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "ACC"
End If
If OptionButton5 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "SAV"
End If
If OptionButton6 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "KDI"
End If
If OptionButton7 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "VTE"
End If
If OptionButton8 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "COM/AM"
End If
If OptionButton9 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "FOOD"
End If
If OptionButton18 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "RH"
End If
If OptionButton20 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "CC"
End If
Hide

If OptionButton10 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "KS"
End If
If OptionButton11 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "SM"
End If
If OptionButton12 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "ACC"
End If
If OptionButton13 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "SAV"
End If
If OptionButton14 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "KDI"
End If
If OptionButton15 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "VTE"
End If
If OptionButton16 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "COM/AM"
End If
If OptionButton17 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "FOOD"
End If
If OptionButton19 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "RH"
End If
If OptionButton21 = True Then
Sheets("ventilation").Range("ag65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "CC"
End If
Hide

Sheets("Ventilation").Activate
Range("ai65536").End(xlUp).Offset(1, 0).Select
ActiveCell = ListBox1

Sheets(FeuillePrecedente).Select
Unload UserForm4

End Sub


Private Sub CommandButton2_Click()
Unload UserForm4
End Sub

Mon problème est le suivant :

lorsque je clique sur "X" vers C. Centrale, même lorsque je souhaite changer C. Centrale par autre chose, le bouton reste "cliqué" et donc cela plante le résultat dans mon onglet "ventilation".

Avez vous la solution? Mon code est il mauvais?

Merci d'avance pour votre aide, j'ai beau chercher, je ne trouve rien :(

Bonne journée ! ;)
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Userform, problème bouton à cocher

Bonjour Remibob, bonjour le forum,

Pour pouvoir tester et donc comprendre ton problème il nous faut carrément recréer l'UserForm, les tableaux, les plages nommées, etc. Perso je ne le ferai pas...
Je pense que tu obtiendras des réponses plus rapidement avec un fichiers exemple en pièce jointe.
 

remibob

XLDnaute Nouveau
Re : Userform, problème bouton à cocher

Re - bonjour,

je suis complètement idiot de ne pas y avoir pensé avant... Désolé !

Voici donc un fichier allégé de mon classeur.

En théorie, et vous le comprendrez, il y a un onglet par jour.

Merci encore et d'avance,

bonne journée,
 

Pièces jointes

  • ventilation forum 04.03.14.zip
    280.2 KB · Affichages: 31

Robert

XLDnaute Barbatruc
Repose en paix
Re : Userform, problème bouton à cocher

Bonjour le fil, bonjour le forum,

En pièce jointe ton fichier modifié.
Les plages nommées ont été adaptées à l'onglet Ventilation et pas "VentilationLundi". Les OptionButtons ont été réorganisés de 1 à 10 dans la Frame 1, de 11 à 20 dans la Frame2. La propriété Tag des OptionButtons 11 à 20 permet d'actualiser la ListBox1. Réorganisation des GroupName des OptionButtons. Utilisation d'un Module de Classe pour éviter d'écrire 10 fois le même code.
Regarde si ça te convient...
 

Pièces jointes

  • RemiBob_v01.zip
    306.5 KB · Affichages: 28

remibob

XLDnaute Nouveau
Re : Userform, problème bouton à cocher

Re - bonjour,

le code m'a l'air effectivement bien plus allégé, je ne connais pas du tout les modules de classe (il faut dire que j'apprends tout par moi même)...

Sur le fichier qui m'a été renvoyé, je n'ai plus que deux problèmes...

1. le temps que l'on saisi ne ressort pas ensuite (tout reste à 0)

2. lorsque je choisis sur la frame2 une option, la listbox1 reste vide,
à savoir que les listes sont des zones qui se trouvent dans les colonnes de A à J de l'onglet VentilationLundi...

Merci encore pour l'aide,

bonne soirée,
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Userform, problème bouton à cocher

Bonsoir RemiBob, bonsoir le forum,

C'est couillon de cacher l'onglet VentilationLundi ! Je ne comprenais pas le code...
J'ai donc remis les plages nomées comme dans le fichier original (mais en comprenant pourquoi cette fois). Et remplacé :
Code:
TextBox1.Value = Range("L65536").End(xlUp).Offset(1, 0).Value
TextBox2.Value = Range("M65536").End(xlUp).Offset(1, 0).Value
par :
Code:
Range("L65536").End(xlUp).Offset(1, 0).Value = TextBox1.Value
Range("M65536").End(xlUp).Offset(1, 0).Value = TextBox2.Value
ça devrait convenir...

Pour le module de classe, ça fontionne de la manière suivante :
Plutôt que de répéter 10 fois le même code :
Code:
Private Sub OptionButton11_Change()
ListBox1.List = Range(OptionButton11.Tag).Value 'alimente la ListBox1 avec la plage nommée dont le nom correspond à la propriété "Tag" du bouton d'option
ListBox1.ListIndex = 0 'affiche le premier élément de la ListBox1
End Sub
jusqu'à :
Code:
Private Sub OptionButton20_Change()
ListBox1.List = Range(OptionButton20.Tag).Value 'alimente la ListBox1 avec la plage nommée dont le nom correspond à la propriété "Tag" du bouton d'option
ListBox1.ListIndex = 0 'affiche le premier élément de la ListBox1
End Sub
On crée une classe. Dans ton fichier elles s'appelle ClassOB (= CLASSe des OptionButtons)
À l'initialisation de l'UserForm on remplit un tableau (tob dans l'exemple = Tableau des OptionButtons) contenant les OptionButtons qui vont participer à cette classe (c'est pourquoi je les ai ordonné pour faciliter le code).
Dans la classe on choisit l'événement qui va régir à l'instance (Change dans l'exemple) et on écrit le code qui réagit à cet événement.
Par la suite, si l'OptionButton est un élément du tableau, au changement de ce dernier, le code sera exécuté... Ce qui signifie que le code n'est écrit qu'une seule fois au lieu de 10...

Le fichier :
 

Pièces jointes

  • RemiBob_v02.zip
    308.2 KB · Affichages: 28

remibob

XLDnaute Nouveau
Re : Userform, problème bouton à cocher

Bonjour,

et encore merci pour toute l'aide.

Il me reste deux petites choses, et j'ai beau essayer par moi même depuis hier, je crains de ne pas comprendre (ou simplement peur de faire une boulette)...

1. lorsque dans la frame2 je choisis, par exemple, SM, la ListBox1 indique la liste d'infos de l'optionbutton suivant...
Je suis pas sur d'être clair...

2. là, ce n'est qu'une crainte personnelle, sur l'exemple donné, il n'y a que la journée de lundi, mais lorsque je vais l'inclure dans mon fichier final, avec tous les jours de la semaine, où dois et puis je changer les données?
Si je crée mon UserForm du mardi, que dois je changer? Où dois je le changer (code UserForm ou classe?)?

Merci infiniment,

bonne journée,
 

Si...

XLDnaute Barbatruc
Re : Userform, problème bouton à cocher

salut

option : là guère des boutons et tant qu'à faire, tous les jours !

Dans le formulaire de Robert, essaie de permuter (par sélection/déplacements) seulement les options du premier cadre avec ceux du second.
 

Pièces jointes

  • Formulaire (par jour).xlsm
    34.8 KB · Affichages: 28

Robert

XLDnaute Barbatruc
Repose en paix
Re : Userform, problème bouton à cocher

Bonjour le fil, bonjour le forum,

Pour ton problème 1, c'est la propriété Tag de chaque OptionButton qui définit la zone. En effet j'avais inversé et j'ai remis en ordre.
Pour le reste (problème 2), j'avoue que je ne comprends pas le fonctionnement de ton fichier. J'ai ouvert tous les onglets masqués mais ça ne m'a pas plus avancé. Je n'ai rien vu dans le code qui fasse référence à ces onglets donc l'UserForm devrait fonctionner pour tous. Si tu prends la peine de m'expliquer avec un exemple concret je pourrais peut-être t'adapter une solution...
La version 3 avec le problème 1 corrigé :
 

Pièces jointes

  • RemiBob_v03.zip
    308.2 KB · Affichages: 30

remibob

XLDnaute Nouveau
Re : Userform, problème bouton à cocher

Bonjour,

merci pour la résolution du problème 1, je vérifierais au travail si cela fonctionne ! :)

En ce qui concerne le problème 2 :

en théorie, j'ai un onglet par jour, chaque onglet à son userform (ils sont tous identiques), la seule chose qui change, c'est l'emplacement des résultats sur l'onglet ventilation.

Ex : si je saisie 1h de ventilation sur le lundi, on retrouve cette saisie sur l'onglet ventilation sous la colonne "lundi".
Si le lendemain, je saisie 0h55, on retrouvera cette saisie sur l'onglet ventilation sous la colonne "mardi".
Avant, pour changer de jour, je changer simplement la correspondance dans mon code :
Code:
Sheets("Ventilation").Activate
Range("ad65536").End(xlUp).Offset(1, 0).Select
ActiveCell = TextBox1

Sheets("Ventilation").Activate
Range("ae65536").End(xlUp).Offset(1, 0).Select
ActiveCell = TextBox2

If OptionButton2 = True Then
Sheets("ventilation").Range("af65536").End(xlUp).Offset(1, 0).Select
ActiveCell = "KS"
End If

Si ce code est celui du lundi, je remplace les "AD", "AE" et "AF" par les noms de colonnes correspondantes au mardi ou autres...

A la fin de la semaine, pour pouvoir saisir dans un autre logiciel la ventilation, je clique sur le bouton noir (de l'onglet ventilation) afin d'afficher mes tableaux croisés dynamiques par jour et récupérer l'ensemble de mes saisies sous un format plus pratique...


Ai je été plus clair ?

Je suis désolé, plus on avance dans notre discussion plus je me dis que Excel arrive a me dépasser à plein de moments...


Merci encore !

Bonne journée,
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Userform, problème bouton à cocher

Bonjour le fil, bonjour le forum,

C'est toujours pas très clair pour moi... Mais je te propose un nouvelle option.
Un seul UserForm pour tous les jours. Tu commences par sélectionner le jour de la semaine dans la ComboBox1. La variable o (=Onglet), déclarée Publique dans le Module1 fait alors référence à l'onglet correspondant (ValidationLundi si tu choisis Lundi, Validationmardi pour Mardi, etc.). Après il te faudra juste adapter le code car, comme je t'ai dit au début, c'est pas très clair.
Pour que tous les onglets de jours soient tous identiques, j'ai aussi ajouté un onglet Zones qui permet de récupérer les zones et j'ai uniformisé l'onglet ValidationLundi pour que l'adresse des cellules de destination soit la même quel que soit l'onglet. C'est pas très clair non plus, j'espère que tu comprendras...
Le fichier :
 

Pièces jointes

  • RemiBob_v04.zip
    311 KB · Affichages: 25

remibob

XLDnaute Nouveau
Re : Userform, problème bouton à cocher

Bonjour à tous !

Je vais tenter d'être plus clair...

A la base, mon classeur contient 6 onglets (lundi, mardi, mercredi, jeudi, vendredi et samedi).
Sur ces onglets se trouvent des plannings de la journée, parfois, nous devons "prendre" des personnes plannifiées sur certains services pour les "envoyer" vers un autre service (besoin d'aide ou autres).

C'est ce qu'on appelle de la ventilation d'heure.

Mon Userform sert a saisir la ventilation rapidement en cours de journée, afin qu'elle soit au plus près de la réalité terrain.

En fin de semaine, nous saisissons sous un logiciel de plannification l'ensemble de la ventilation jour par jour, services par services.

Voilà pour la mise en situation ^^

Avoir un seul Userform sur lequel on choisit la date peut être une perte de temps, n'est il pas possible que la date qui s'affiche soit automatiquelent celle du jour (et on la modifie si on souhaite saisir pour une autre journée)?


Merci encore, et n'hésitez pas si je ne suis toujours pas assez clair :)

Bonne journée,
 

Discussions similaires

Réponses
4
Affichages
217

Statistiques des forums

Discussions
312 329
Messages
2 087 331
Membres
103 519
dernier inscrit
Thomas_grc11