XL 2016 CheckBox et OptionButon

Choco2x

XLDnaute Occasionnel
Bonjour à toutes et à tous !

J'ai trouvé beaucoup de réponses concernant ce que je cherche, mais chaque fois soit je n'ai pas réussi à l'adapter, soit ça ne correspondait pas à mes besoins...
Précision : je suis d'un niveau très faible en VBA, si je suis déjà allé aussi loin c'est uniquement grâce à votre aide (surtout JM27 🙏).

J'ai deux problèmes :
- J'ai un formulaire avec des CheckBox, et quand je coche les cases pour les retrouver dans la feuille "Commande", les résultats vont toujours sur la ligne 3
, remplaçant chaque fois le résultat précédent, au lieu d'aller juste en dessous, sur la ligne correspondant à la nouvelle entrée du formulaire.

- Ensuite, mais c'est plus optionnel, je n'arrive pas à remplacer les ComboBoxCivilité et ComboTps par des OptionButon, tout en résupérant les résultats dans la feuille "Commande" pour les deux, et dans la feuille "BD Patients" pour la civilité.

La userform est en vrac, je sais, mais j'ai changé si souvent que j'attends à présent que tout fonctionne pour la mettre en forme...

Quelqu'un pourrait-il m'aider ?...

Merci d'avance...
 

Pièces jointes

  • Transport Hopital 8.6 OK avant tentative BR pour XLD.xlsm
    85.6 KB · Affichages: 76

Choco2x

XLDnaute Occasionnel
J'ai juste exploré différentes pistes, sans pour autant tout comprendre...

:D
Robert > tu as raison , mais là je suis presque au bout de ma démarche, alors tant qu'à faire...
Je n'ai plus qu'un petit soucis, à ma connaissance : à présent j'ai des "vrai" et "faux" en résultat de mes OptionButton...
 

Choco2x

XLDnaute Occasionnel
Bonjour Choco2x
Bonjour le fil (Robert) ,le Forum
que contient le Tag du Ctrl
car dans la procédure de Robert tu as

et dans ton code

est ce normal ?
Pourquoi des OptionButton plus complique à gérer qu'un ComboBox
dans ton code tu as pour charger le ComboBox des Civilités
VB:
For Each Cell In .Range("AD2:AD" & .Range("AD10").End(xlUp).Row)
           Me.ComboBoxCivilité.AddItem (Cell)
Next
alors que les Civilités sont en Colonne "AA" et Non "AD"
Pour éviter une Boucle ,tu pourrais mettre
VB:
Me.ComboBoxCivilité.List = Array("", "Mme", "Melle", "M.")
Bonne journée
jean marie
Les colonnes ont été décalées par erreur, elles sont bien en AA en temps normal !
Merci pour ta vigilence !
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Le problème est que le code initial est très complexe au profit du visuel et au détriment de l'efficacité. C'est bien joli ces contrôles qui changent de couleur mais ça crée des codes à rallonge. Je ne comprends pas pourquoi les modules de classe n'ont pas été plus utilisés que les propriétés Tag "multifonctions". Je n'ai pas l'habitude de travailler comme ça et je t'avoue que je m'y perds. L'idéal pour toi serait que JM27 passe par là et ait le courage de revoir ses codes pour toi.
Perso, moi je ne l'ai pas. Encore une fois, trop complexe juste pour du visuel, à mon goût...
 

JM27

XLDnaute Barbatruc
Bonjour
Le fichier que j'ai crée a été modifié en profondeur : eh oui , il faut tout dire

Pas efficace : c'est ton avis !!
Pour valider un traitement je m'assure que les données nécessaires sont bien documentées et conformes à ce que l'on attends. normal.... non ?
la qualité d'une base de données est sa documentation: normal .... non ?

issu du fichier d'origine( feuille accueil)
Particularité de la propriété tag des objets de l'userform
Cette propriété sert d'aiguillage du traitement et du transfert des données.
Une propriété tag vide n'a aucune action.
Une propriété tag documentée comporte 3 éléments.
Ces éléments sont séparées par un espace
La première valeur est la colonne de destination dans la base de donnée
La deuxième valeur indique si la valeur saisie est impérative ou facultative ( Impérative : on impose une valeur à la saisie)
La troisième valeur est le type de données que comporte l'objet:
str : pour string
num : pour numérique
date: pour une date
Une propriété tag mal documentée entraîne un plantage de l'application


On va avoir du mal à être plus clair
 
Dernière édition:

Choco2x

XLDnaute Occasionnel
Bonjour
Le fichier que j'ai crée a été modifié en profondeur : eh oui , il faut tout dire
issu du fichier d'origine( feuille accueil)
Pas efficace : c'est ton avis !!



Particularité de la propriété tag des objets de l'userform
Cette propriété sert d'aiguillage du traitement et du transfert des données.
Une propriété tag vide n'a aucune action.
Une propriété tag documentée comporte 3 éléments.
Ces éléments sont séparées par un espace
La première valeur est la colonne de destination dans la base de donnée
La deuxième valeur indique si la valeur saisie est impérative ou facultative ( Impérative : on impose une valeur à la saisie)
La troisième valeur est le type de données que comporte l'objet:
str : pour string
num : pour numérique
date: pour une date
Une propriété tag mal documentée entraîne un plantage de l'application


On va avoir du mal à être plus clair

Bonjour JM !

En effet, j'ai essayé de l'adapter à mes goûts et besoins, ainsi qu'à ceux des futures utilisatrices, après concertation.
Mais il est vrai que ni elles ni moi ne nous rendons compte des conséquences, limites, ou difficultés liées au VBA !

Pour le rappel des propriétés Tag sur la feuille d'accueil, je les ai bien mémorisées, mais après avoir trouvé d'autres choses sur les forums, étant toujours aussi nul, j'ai "tenté des choses" comme 1-1 etc. :D
C'est aussi en se plantant qu'on apprend...
 

JM27

XLDnaute Barbatruc
je ne vois pas le rapport ???
Je ne suis pas sur que c'est une usine à gaz ( en plus je commente le code)
En plus ( j'ai vérifié) que pour les propriété tag tu es adepte
https://www.excel-downloads.com/threads/formulaire-de-saisie.20009106/#post-20067681

Le problème est que le code initial est très complexe au profit du visuel et au détriment de l'efficacité. C'est bien joli ces contrôles qui changent de couleur mais ça crée des codes à rallonge.
C'est toi qui le dis , tu ne parles pas du code qui suis ,
mais c'est pas grave.....
C'est vrai que trois boucles de codes de 5 lignes pour gérer de multiples champs c'est long
La critique est facile mais l'art est difficile
Pour info : je ne vois pas ou très peu de lignes de code que tu as proposé dans ce fil.
il me semble que si tu rajoutes un établissement ou un service il faut l'ajouter dans les combo
excuses moi d'être "carré"
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Oui tu as raison JM27, adepte des Tag c'est vrai et des usines à gaz, je te rassure, j'en ai un paquet à mon actif. Mais afficher une UserForm avec :

VB:
Sub Affichage()
'   Application.ScreenUpdating = False
'   For I = 1 To Sheets.Count
'        Sheets(I).Unprotect
'   Next
    UserFormTransport.Show
    Application.GoTo reference:=Sheets("Commande").Range("A1"), Scroll:=True
End Sub

Private Sub UserForm_Initialize()
Dim Collec As New Collection
Dim Itm As Long
' je charge des différents déroulants de leurs items
With Sheets("Menus")
    For Each Cell In .Range("AD2:AD" & .Range("AD10").End(xlUp).Row)
        Me.ComboBoxCivilité.AddItem (Cell)
    Next
    For Each Cell In .Range("AA2:AA" & .Range("AA100").End(xlUp).Row)
        Me.ComboHeureDépart.AddItem (Cell.Text)
        Me.ComboHeureArrivée.AddItem (Cell.Text)
    Next
    For Each Cell In .Range("A2:A" & .Range("A1000").End(xlUp).Row)
        If .Range("A2") <> "" Then
        Me.ComboEtablissementArrivée.AddItem (Cell)
        End If
    Next
    For Each Cell In .Range("B2:B" & .Range("B1000").End(xlUp).Row)
        Me.ComboServiceArrivée.AddItem (Cell)
        Me.ComboServiceDépart.AddItem (Cell)
    Next
    For Each Cell In .Range("AB2:AB" & .Range("AB10").End(xlUp).Row)
        Me.ComboTps.AddItem (Cell)
    Next
    For Each Cell In .Range("AC2:AC" & .Range("AC10").End(xlUp).Row)
        Me.CboBoxPayeur.AddItem (Cell)
    Next
End With
' particularité du combo nom (pour eviter les doublons)
With Sheets("BD patients")
    If .Range("B3") <> "" Then
        ' j'aliment une collection
        For Each Cell In .Range("B3:B" & .Range("B10000").End(xlUp).Row)
            On Error Resume Next
            Collec.Add Cell, CStr(Cell)
            On Error GoTo 0
        Next
        'J'aliment la combo à partir des items de la collection
        For Itm = 1 To Collec.Count
            Me.ComboNom.AddItem Collec.Item(Itm)
        Next
    End If
End With
End Sub

Private Sub UserForm_Activate()
Dim I As Byte
Set MonLabel = Controls.Add("Forms.Label.1", , True)
With MonLabel
     .Caption = Right(ActiveWorkbook.Names("Auteur"), Len(ActiveWorkbook.Names("Auteur")) - 1)
    .Top = 565
    .Left = 300
    .Height = 8.4
    .Width = 100
     MemNom = True
    .Font.Bold = True
   .Font.Italic = True
   .Font.Size = 6
End With

' gestion de l'affichage de l'userform en mode " expansion"
Me.Top = Application.Top + (Application.Height / 2 - Me.Height / 2)
Me.Left = Application.Left + (Application.Width / 2 - Me.Width / 2)
MémoireHauteur = Me.Height
MemoireLargeur = Me.Width
PasHauteur = (Me.Height - 27) / 80
PasLargeur = (Me.Width - 93) / 80
Me.Height = 27
Me.Width = 93
For I = 0 To 150
If Me.Height > MémoireHauteur Then
Exit For
End If
Me.Height = Me.Height + PasHauteur
Me.Width = Me.Width + PasLargeur
' Utilisation de l'api Windows
'   Sleep (5)
Next
Me.Height = MémoireHauteur
Me.Width = MemoireLargeur
End Sub

J'avoue que c'est du grand art ! Ça sent un peu le gaz quand même...
 

Discussions similaires

Statistiques des forums

Discussions
312 393
Messages
2 087 963
Membres
103 687
dernier inscrit
olivier72