VBA checkbox
Bonjour à tous,
Alors tout d'abor, je suis nouveau sur ce forum et je chipote un petit en excel et vba pour le boulot...
Voici ma petite question (quesqtion idiote réponse idiote)
j'ai eu bon retourner tout le moteur de recherche google et rien y fait je ne trouve pas ma réponse...
J'ai un userform, qui me sert a créer des bon de commande pour une gestion de planning ambulances...
Suite à la demande de mon chef, j'ai du ajouter des checkbox dans celui ci...
Jusqu'ici tout ce passe super bien depuis 2 ans mais je souhaiterais changer la réponse de mes checkbox qui s'inscrit dans mon tableau... C'est à dire, pour l'instant quand la checkbox est validée un VRAI s'affiche et inversement un FAUX si elle n'est pas validée..
Je souhaiterais changer ce VRAI ou FAUX par un 0 ou 1... J'ai bon essayer toute modif rien y fait...
Merci à vous tous pour vos réponses
Bonjour loulou0589 et bienvenue sur le forum,
Petite question ton VRAI ou FAUX s'affiche ou ?
Dans mon tableau apres validation de mon userform
Sans fichier difficile de répondre précisément, je te propose ce petit code à adapter à ton fichier
Private Sub CommandButton1_Click()
Dim a As Byte
If CheckBox1 = True Then a = 1 Else a = 0
Sheets("Feuil1").Cells(1, "A") = a
End Sub
Pour etre plus précis, lors d'une commande ambulances, j'ai un boutton click sur mon tableau qui ouvre un userform.
Celui contient plusieur infors (nom, service, destination, rue, n°, CP, Ville, chambre, etc).
Une fois tout remplis, j'ai un bouton click sur mon userform qui le valide, qui imprime un print screen de mon userform, qui insert toutes les info dans un tableau, qui trie le tableau par dates et heures, et qui sauvegarde mon fichier.
Dans le cas présent j'ai du rajouter des checkbox pour me donner les infos suivantes: Isolement, Oxygène, Facturation Patient, Facturation Clinique.
J'ai donc ajouter a mon tableau c'est 4 colonnes suplémentaires pour y insérer l'info.
Le problème c'est que quand je valide ou non la checkbox, l'info vient bien s'inscrire dans mon tableau mais sous forme de VRAI ou Faux et j'aurais préferé que l'information ce note sous forme de 0 ou 1 ou éventuellement oui ou non....
Merci pour ton aide
Voici mon fichier...
L'onglet principale est celui de couleur rouge (planning ambulances mensuel)
Et tu ouvre l'userform principal avec le bouton click en haut à gauche "créer une ambulances"
Attention: c'est peut etre le cafoui dans mes codes car je suis novice mais comme sa fonction très bien je ne touche plus a rien
je ne parvien pas a l'envoyer il est trop gros
essai avec Ci joint
Merci pour ton aide
Malheureusement nous n'avons pas la meme version d'excel donc je ne peux pas lancer la macro.
Je te propose de tester ceci
Private Sub Ok_Click()
dim a, b, c, d as byte 'ajout déclaration des variables
Range("A4:P4").Select
...
If Isolement.Value = true then a = 1 Else a = 0
Range("G4").value = a
If Oxygene.Value = true then b = 1 Else b = 0
Range("H4").Value = b
If Facturationpatient.Value = true then c = 1 Else c = 0
Range("I4").Value = c
If Facturationclinique.Value = true then d = 1 Else d = 0
Range("J4").Value = d
Je te confirme que ton code pourrait être quelque peu simplifié, mais je n'ai pas la bonne version d'excel pour travailler dessus.
J'ai donc mis une solution parmis tant d'autre en espérant qu'elle te convienne
Pour du texte comme "oui" ou "non"
Remplacer byte par string
0 par "non" et 1 par "oui" avec les guillemets
If Oxygene.Value = true then b = "oui" Else b = "non"
Malheureusement ca ne fonctionne pas, malgrés la ligne de code, pas de bug mais je reste avec mon vrai ou faux
Tu as bien mis cette ligne au tout début
dim a, b, c, d as byte 'ajout déclaration des variables
et remplacer
Range("G4").value = Isolement.Value
par
If Isolement.Value = true then a = 1 Else a = 0
Range("G4").value = a
Parce que je ne vois pas de raison que ça ne fonctionne pas
voilà le ligne de code:
Ecris comme ce, il me note la réponse des chexkbox dans la ligne inférieur exemple création de la ligne en A4 et il note la reponse en B4
(sorry pour la longueur... et merci encore)
Private Sub Ok_Click()
Dim a, b, c, d As Byte 'ajout déclaration des variables
Range("A4:P4").Select
If Isolement.Value = True Then a = 1 Else a = 0
Range("G4").Value = a
If Oxygene.Value = True Then b = 1 Else b = 0
Range("H4").Value = b
If Facturationpatient.Value = True Then c = 1 Else c = 0
Range("I4").Value = c
If Facturationclinique.Value = True Then d = 1 Else d = 0
Range("J4").Value = d
Range("A4:T4").Select
Selection.Insert Shift:=xlDown
Selection.Interior.ColorIndex = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
Selection.Borders(xlEdgeLeft).LineStyle = xlNone
Selection.Borders(xlEdgeTop).LineStyle = xlNone
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
Selection.Borders(xlEdgeRight).LineStyle = xlNone
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A2:T2").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
Range("A4:N4").Select
Selection.Font.Bold = False
With Selection.Font
.Name = "Arial"
.Size = 11
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
Range("A4:N4").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Range("D4:A4").Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Range("S4").Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.ShrinkToFit = False
.MergeCells = False
End With
Range("N4").NumberFormat = "000"
Range("O4").NumberFormat = "0000"
ActiveWindow.ScrollColumn = 1
Range("A2").Select
Range("A4").Value = DTPicker1.Value
Range("B4").Value = Heure.Value
Range("C4").Value = Transport.Value
Range("D4").Value = Nom.Value
Range("E4").Value = Chambre.Value
Range("F4").Value = Motif.Value
Range("K4").Value = Destination1.Value
Range("L4").Value = Destination2.Value
Range("M4").Value = Rue.Value
Range("N4").Value = N°.Value
Range("O4").Value = CP.Value
Range("P4").Value = Ville.Value
Range("Q4").Value = Remarque.Value
Range("R4").Value = Demandeur.Value
Range("S4").Value = Commandée.Value
Range("T4").Value = Jours.Value
UserForm1.PrintForm
Rows("4:500").Select
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Add _
Key:=Range("A4:A500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Add _
Key:=Range("B4:B500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort
.SetRange Range("A4:T500")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Unload UserForm1
ActiveWorkbook.Save
End Sub
Bonjour,
A tester : (j'ai un peu raccourci ton code)
Private Sub Ok_Click()
Dim a, b, c, d As Byte
Range("A4:T4").Insert Shift:=xlDown
'Partie fixe qui ne change jamais donc code inutile
With Range("A2:T2").Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 11
.ColorIndex = xlAutomatic
End With
With Range("A2:T2").Borders
.LineStyle = xlContinuous
.Weight = xlThin
End With
'Fin de la partie de code inutile
With Range("A4:T4")
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
.WrapText = False 'non util
.Orientation = 0 'non util
.AddIndent = False 'non util
.ShrinkToFit = False 'non util
.MergeCells = False 'non util
End With
Range("E4:N4").HorizontalAlignment = xlCenter
Range("N4").NumberFormat = "000"
Range("O4").NumberFormat = "0000"
Range("A4").Value = DTPicker1.Value
Range("B4").Value = Heure.Value
Range("C4").Value = Transport.Value
Range("D4").Value = Nom.Value
Range("E4").Value = Chambre.Value
Range("F4").Value = Motif.Value
If Isolement.Value = True Then a = 1 Else a = 0
Range("G4").Value = a
If Oxygene.Value = True Then b = 1 Else b = 0
Range("H4").Value = b
If Facturationpatient.Value = True Then c = 1 Else c = 0
Range("I4").Value = c
If Facturationclinique.Value = True Then d = 1 Else d = 0
Range("J4").Value = d
Range("K4").Value = Destination1.Value
Range("L4").Value = Destination2.Value
Range("M4").Value = Rue.Value
Range("N4").Value = N°.Value
Range("O4").Value = CP.Value
Range("P4").Value = Ville.Value
Range("Q4").Value = Remarque.Value
Range("R4").Value = Demandeur.Value
Range("S4").Value = Commandée.Value
Range("T4").Value = Jours.Value
UserForm1.PrintForm
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Add _
Key:=Range("A4:A500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Add _
Key:=Range("B4:B500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort
.SetRange Range("A4:T500")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Unload UserForm1
ActiveWorkbook.Save
End Sub
Bonjour Fred35,
Tout d'abor, un big merci pour l'éparation de mon code...
Celui-ci fonctionne a merveille
Malheureusement la reponse de mes checkbox reste VRAI ou FAUX dans mon tableau alors que je souhaiterais 1 ou 0 voir eventuellement oui ou non...
Décidement je vais faire attraper des cheveux blancs a tout le monde
Merci encore pour votre aide
Autre problème rencontré depuis l'épuration du code
Et oui je vais ennuyer mon monde désolé...
En fin de nuit hier, pour des raison pratique, les colonnes facturation clinique et facturation patient on été deplacer...
Bref en soit rien de garde j'ai juste modifier les importation du code... mais quid...
Range("A4").Value = DTPicker1.Value
Range("B4").Value = Heure.Value
Range("C4").Value = Transport.Value
Range("D4").Value = Nom.Value
Range("E4").Value = Chambre.Value
Range("F4").Value = Motif.Value
If Isolement.Value = True Then a = 1 Else a = 0
Range("G4").Value = a
If Oxygene.Value = True Then b = 1 Else b = 0
Range("H4").Value = b
If Facturationpatient.Value = True Then c = 1 Else c = 0
Range("I4").Value = c
If Facturationclinique.Value = True Then d = 1 Else d = 0
Range("J4").Value = d
Range("K4").Value = Destination1.Value
Range("L4").Value = Destination2.Value
Range("M4").Value = Rue.Value
Range("N4").Value = N°.Value
Range("O4").Value = CP.Value
Range("P4").Value = Ville.Value
Range("Q4").Value = Remarque.Value
Range("R4").Value = Demandeur.Value
Range("S4").Value = Commandée.Value
Range("T4").Value = Jours.Value
D'après ce code Les colonne importation patient ce trouvaient en I et J...
Maintenant elles sont en P et Q donc voici mon code
Range("A4").Value = DTPicker1.Value
Range("B4").Value = Heure.Value
Range("C4").Value = Transport.Value
Range("D4").Value = Nom.Value
Range("E4").Value = Chambre.Value
Range("F4").Value = Motif.Value
If Isolement.Value = True Then a = 1 Else a = 0
Range("G4").Value = a
If Oxygene.Value = True Then b = 1 Else b = 0
Range("H4").Value = b
If Facturationpatient.Value = True Then c = 1 Else c = 0
Range("P4").Value = c
If Facturationclinique.Value = True Then d = 1 Else d = 0
Range("Q4").Value = d
Range("I4").Value = Destination1.Value
Range("J4").Value = Destination2.Value
Range("K4").Value = Rue.Value
Range("L4").Value = N°.Value
Range("M4").Value = CP.Value
Range("N4").Value = Ville.Value
Range("O4").Value = Remarque.Value
Range("R4").Value = Demandeur.Value
Range("S4").Value = Commandée.Value
Range("T4").Value = Jours.Value
Le problème c'est qu'il m'insert le colonne R en P, la colonne P en Q et la colonne Q en R...
Pourquoiii ?
Et le souci de la réponse des checkbox dans mes colonne reste d'actualité... j'ai toujours un vrai ou faux et non un 1 et 0
Je vais m'arracher les cheveux
Vous avez remplacé votre code par le mien ?
Parce que mes tests affichent bien des 0 ou des 1 pour les valeurs des checkbox...
Je vais regarder dès que j'ai un peu de temps
Oui, j'ai fais un copie coller donc c'est exactement le meme
Bon sur ce j'ai fais mon blond
Bref j'ai copie ta ligne de code sur le fichier de novembre alors que je travaille sur celui de décembre... oupssss sorry...
Bon tout fonctionne maintenant sauf un petit truc l'info de la checbox qui doit se transcrire dans la colonne Q4 ne se note pas...
Pour le reste tout fonctionne à merveille!!!!!!!!
MERCIIIIIII Fred35
Tant que j'y suis, en plus du problème de la colonne Q4 qui ne se remplis pas avec les info de la checkbox de mon userform...
(Drole de truc car tout le reste fonctionne a merveille maintenant....
Voilà la nouvelle question avant de chlore le sujet...
Est il possible d'obliger l'utilisateur a cocher une checkbox ou l'autre mais il doit y avoir obligatoirement une des deux de remplie.
Exemple: j'ai une checkbox "Facturation Patient" (95% des cas donc elle pourrait etre automatiquement remplis) et une autre checkbox "Facturation Clinique" (5% des cas).
Mais question est:
1) Pouvons nous remplir d'office une checkbox (dans ce cas ci "Facturation Patient")?
2) Pouvons nous lorsque l'utilisateur selectionne l'autre checkbox (dans ce cas ci "Facturation Clinique") cette action surpprime la coche de la première checkbox qui elle serait remplie d'office a l'ouverture du fichier?
J'espere avoir ete claire dans ma question
Encore une big merci pour vos aides précieuses
Bonsoir,
Les 2 checkbox sont dans ce cas à remplacer par des optionbutton plus approprié dans ce cas
ensuite mettre ce code dans ton userform
Private Sub UserForm_Initialize()
Me.OptionButton1 = True
End Sub
Remplacer le code du bouton de validation par celui-ci :
(j'avais déclaré des variables dans le code précédent alors qu'il n'y en avait pas besoin)
Private Sub Ok_Click()
With Sheets("Planning Ambulances Mensuel").Range("A4:T4")
.Insert Shift:=xlDown
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlBottom
End With
With Sheets("Planning Ambulances Mensuel")
.Range("E4:N4").HorizontalAlignment = xlCenter
.Range("N4").NumberFormat = "000"
.Range("O4").NumberFormat = "0000"
.Range("A4").Value = DTPicker1.Value
.Range("B4").Value = Heure.Value
.Range("C4").Value = Transport.Value
.Range("D4").Value = Nom.Value
.Range("E4").Value = Chambre.Value
.Range("F4").Value = Motif.Value
If Isolement.Value = True Then .Range("G4").Value = 1 Else .Range("G4").Value = 0
If Oxygene.Value = True Then .Range("H4").Value = 1 Else .Range("H4").Value = 0
.Range("I4").Value = Destination1.Value
.Range("J4").Value = Destination2.Value
.Range("K4").Value = Rue.Value
.Range("L4").Value = N°.Value
.Range("M4").Value = CP.Value
.Range("N4").Value = Ville.Value
.Range("O4").Value = Remarque.Value
If Me.OptionButton1 = True Then
.Range("P4") = 1
.Range("Q4") = 0
Else
.Range("P4") = 0
.Range("Q4") = 1
End If
.Range("R4").Value = Demandeur.Value
.Range("S4").Value = Commandée.Value
.Range("T4").Value = Jours.Value
End With
UserForm1.PrintForm
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Add _
Key:=Range("A4:A500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort.SortFields.Add _
Key:=Range("B4:B500"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Planning Ambulances Mensuel").Sort
.SetRange Range("A4:T500")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Unload UserForm1
ActiveWorkbook.Save
End Sub
Si vous renommez les optionbutton, n'oubliez pas de faire de même dans la macro.
C'est parfait exactement ce que je voulais!!!!
Cepandant petit souchis qui apparait
chaque fois que j'insert une ligne (insertation sur la ligne 4 il change l'alignement du texte sur la ligne 5... Quid??
Aller plus que sa a résoudre et je pourrais mettre que mon sujet a été magnifiquement bien réglé et rapidement
Encore merci Fred35