Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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...


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
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:

ChTi160

XLDnaute Barbatruc
Re pour ma dernière intervention lol
Tu as quoi comme Tag 1-1ou 1 oui 1
Dans ta procédure la fonction Split va scinder le .Tag en fonction des espaces entre les données de ce .Tag et(0) donnera le premier élément .
Jean marie
 

Choco2x

XLDnaute Occasionnel

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.
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...
 

JM27

XLDnaute Barbatruc
Pas du tout tu es libre d'utiliser les méthodes que tu souhaites

moi j'utilise la méthode ADD item .

toi tu fais ce que tu veux
pour l'activation de l'userform : tu ne connais pas les tenants et les aboutissants
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…