[Résolu] Simplification code checkboxs

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

maninwhite

XLDnaute Occasionnel
Bonjour à toutes et à tous

Je reviens vers vous afin de simplifier un code que j'ai écrit comme un débutant.

Ci dessous le userform :
Lien supprimé

Ce code permet de reporter les captions des checkboxs dans un tableau.

Code:
Option Explicit

Private Sub CommandButton_suivant_Click()

With Sheets("report")

If CheckBox_précipitation.Value = True Then
            .Cells(.Cells(Rows.Count, "Z").End(xlUp).Row + 1, "Z") = CheckBox_précipitation.Caption
Else
.Cells(.Cells(Rows.Count, "Z").End(xlUp).Row + 1, "Z") = "Non applicable"
End If

If CheckBox_frustration.Value = True Then
            .Cells(.Cells(Rows.Count, "AA").End(xlUp).Row + 1, "AA") = CheckBox_frustration.Caption
Else
.Cells(.Cells(Rows.Count, "AA").End(xlUp).Row + 1, "AA") = "Non applicable"
End If

If CheckBox_fatigue.Value = True Then
            .Cells(.Cells(Rows.Count, "AB").End(xlUp).Row + 1, "AB") = CheckBox_fatigue.Caption
Else
.Cells(.Cells(Rows.Count, "AB").End(xlUp).Row + 1, "AB") = "Non applicable"
End If

If CheckBox_excès_de_confiance.Value = True Then
            .Cells(.Cells(Rows.Count, "AC").End(xlUp).Row + 1, "AC") = CheckBox_excès_de_confiance.Caption
Else
.Cells(.Cells(Rows.Count, "AC").End(xlUp).Row + 1, "AC") = "Non applicable"
End If

If CheckBox_inattention.Value = True Then
            .Cells(.Cells(Rows.Count, "AD").End(xlUp).Row + 1, "AD") = CheckBox_inattention.Caption
Else
.Cells(.Cells(Rows.Count, "AD").End(xlUp).Row + 1, "AD") = "Non applicable"
End If

If CheckBox_distraction.Value = True Then
            .Cells(.Cells(Rows.Count, "AE").End(xlUp).Row + 1, "AE") = CheckBox_distraction.Caption
Else
.Cells(.Cells(Rows.Count, "AE").End(xlUp).Row + 1, "AE") = "Non applicable"
End If

If CheckBox_ligne_de_tir.Value = True Then
            .Cells(.Cells(Rows.Count, "AF").End(xlUp).Row + 1, "AF") = CheckBox_ligne_de_tir.Caption
Else
.Cells(.Cells(Rows.Count, "AF").End(xlUp).Row + 1, "AF") = "Non applicable"
End If

If CheckBox_perte.Value = True Then
            .Cells(.Cells(Rows.Count, "AG").End(xlUp).Row + 1, "AG") = CheckBox_perte.Caption
Else
.Cells(.Cells(Rows.Count, "AG").End(xlUp).Row + 1, "AG") = "Non applicable"
End If

End With

Unload Me: reporter_un_incident_part4.Show

End Sub

2è chose, comme vous pouvez le voir sur l'userform j'ai une colonne avec état et une avec Erreur critique.

Y a t'il une possibilité de dire :

Si aucun état sélectionné, msg box
Si aucune erreur critique sélectionnée, msg box.

Merci
 
Dernière édition:
Re : Simplification code checkboxs

bonjour
tu peus deja faire cela

Code:
 .Cells(.Cells(Rows.Count, 26).End(xlUp).Row + 1, 26) = IIf(CheckBox_précipitation, CheckBox_précipitation.Caption, "Non applicable")

ect ..
apres on pourrait faire une boucle si les box pas renommees on peut le faire mais code un peu plus long

Code:
Dim i As Byte
With Sheets("report")
For i = 26 To 33
 .Cells(.Cells(Rows.Count, i).End(xlUp).Row + 1, i) = IIf(Controls("CheckBox" & (i - 25)), Controls("CheckBox" & (i - 25)).Caption, "Non applicable")
Next i
End With
 
Re : Simplification code checkboxs

Bonsoir maninwhite, Laetitiap0, le forum,

Ci-joint un classeur exemple avec modification des propriétés des CheckBox:

Il faut ajouter le repère de la colonne dans la propriété Tag. On pourrait tout aussi bien y insérer le numéro de la colonne correspondante.

Pour le reste, code identique à celui de Laeti.

Cordialement.

PS: ce serait sympa à toi, maninwhite, de joindre un fichier la prochaine fois.
 

Pièces jointes

Re : Simplification code checkboxs

re ,salut Papou-net🙂🙂

en utilisant .Tag on peut laisser les box renomées

Code:
Dim c As Control
 With Sheets("report")
 For Each c In Controls
 If c.Tag <> "" Then .Range(c.Tag & Rows.Count).End(3)(2) = IIf(c, c.Caption, "Non applicable")
 Next
 End With

si autre controls tag dans user
Code:
For Each c In Controls
 If TypeName(c) = "CheckBox" And c.Tag <> "" Then

ect...
 

Pièces jointes

Re : Simplification code checkboxs

Merci à vous deux, vos codes fonctionnent parfaitement.

Désolé Papou-net, si je n'ai pas mis le fichier joint c'est parce qu'il contient des informations confidentielles étant donné que c'est un fichier pour le travail.
Après c'est vrai que j'aurai pu en créer un juste pour l'exemple.

Il me manque juste encore une chose.

Lorsque je clique sur mon bouton, il faut juste encore que je vérifie si au minimum un des 4 états est sélectionné et une des 4 erreurs critique.

Si aucun état coché, msg box...
Si aucune erreur critique cochée, msg box...

Merci
 
Re : Simplification code checkboxs

Bonjour maninwhite, Laetitia,

Voici ton fichier modifié. Tu noteras que j'ai remplacé l'en-tête de colonne par le n° de colonne dans le .Tag des CheckBox, ce qui facilite la lecture dans les boucles.

Comme le souligne Laetitia, il n'est nul besoin de renommer les cases à cocher.Si j'ai conservé leur nom par défaut lors de la construction du formulaire, c'est uniquement par paresse.

Cordialement.
 

Pièces jointes

Re : [Résolu] Simplification code checkboxs

Dernière question

Simplification du code ci dessous, j'arrive vraiment pas ou du moins je comprends pas comment le faire.
J'ai essayé de ré appliquer avec le code donné au dessus, mais pas moyen.

Code:
Private Sub CommandButton_enregistrer_Click()

With Sheets("report")

            .Cells(.Cells(Rows.Count, "AH").End(xlUp).Row + 1, "AH") = TextBox_actions1.Value
            .Cells(.Cells(Rows.Count, "AI").End(xlUp).Row + 1, "AI") = TextBox_date1.Value
            .Cells(.Cells(Rows.Count, "AJ").End(xlUp).Row + 1, "AJ") = ComboBox_responsable1.Value
            .Cells(.Cells(Rows.Count, "AK").End(xlUp).Row + 1, "AK") = TextBox_actions2.Value
            .Cells(.Cells(Rows.Count, "AL").End(xlUp).Row + 1, "AL") = TextBox_date2.Value
            .Cells(.Cells(Rows.Count, "AM").End(xlUp).Row + 1, "AM") = ComboBox_responsable2.Value
            .Cells(.Cells(Rows.Count, "AN").End(xlUp).Row + 1, "AN") = TextBox_actions3.Value
            .Cells(.Cells(Rows.Count, "AO").End(xlUp).Row + 1, "AO") = TextBox_date3.Value
            .Cells(.Cells(Rows.Count, "AP").End(xlUp).Row + 1, "AP") = ComboBox_responsable3.Value
            .Cells(.Cells(Rows.Count, "AQ").End(xlUp).Row + 1, "AQ") = TextBox_actions4.Value
            .Cells(.Cells(Rows.Count, "AR").End(xlUp).Row + 1, "AR") = TextBox_date4.Value
            .Cells(.Cells(Rows.Count, "AS").End(xlUp).Row + 1, "AS") = ComboBox_responsable4.Value
            .Cells(.Cells(Rows.Count, "AT").End(xlUp).Row + 1, "AT") = TextBox_actions5.Value
            .Cells(.Cells(Rows.Count, "AU").End(xlUp).Row + 1, "AU") = TextBox_date5.Value
            .Cells(.Cells(Rows.Count, "AV").End(xlUp).Row + 1, "AV") = ComboBox_responsable5.Value
            .Cells(.Cells(Rows.Count, "AW").End(xlUp).Row + 1, "AW") = TextBox_remarques.Value

 
End With

End Sub

Et rajouter la condition, que si une valeur n'est pas renseignée, peu importe quelle TextBox ou Combobox, alors = non applicable.

Et pour finir, je n'arrive pas à incrémenter de 1 une cellule.

J'ai le code
Code:
        With Sheets("report")
        
.Cells(.Cells(Rows.Count, "A").End(xlUp).Row + 1, "A") = .Cells(.Cells(Rows.Count, "A").End(xlUp).Row + 1, "A") + 1

Mais cela me copie la valeur 1 dans la cellule vide suivante et ne me l'incrémente pas.
Mais pour faire mieux, il faut partie du principe que la ligne est vide, on commence à 1 et après on incrémente

Merci
 
Dernière édition:
Re : [Résolu] Simplification code checkboxs

Bonjour maninwhite,

Avant de modifier ton code, il faut affecter les repères de colonnes à la propriété .Tag des contrôles concernés:

TextBox_actions1 ---> AH
TextBox_date1 ---> AI
ComboBox_responsable1 ---> AJ
TextBox_actions2 ---> AK
TextBox_date2 ---> AL
ComboBox_responsable2 ---> AM
etc...

Voici la macro modifiée:

Code:
Private Sub CommandButton_enregistrer_Click()
Dim Ctl As Object
With Sheets("report")
  For Each Ctl In Me.Controls
    If TypeOf Ctl Is msforms.TextBox Or TypeOf Ctl Is msforms.ComboBox Then
      .Cells(.Cells(Rows.Count, Ctl.Tag).End(xlUp).Row + 1, Ctl.Tag) = IIf(Ctl.Value = "", "non applicable", Ctl.Value)
  Next
End With
End Sub
A +

Cordialement.
 
Dernière édition:
Re : [Résolu] Simplification code checkboxs

RE:

Oups, j'ai oublié le dernier point.

Voici ta ligne d'incrémentation corrigée:

Code:
.Cells(.Cells(Rows.Count, "A").End(xlUp).Row + 1, "A") = .Cells(.Cells(Rows.Count, "A").End(xlUp).Row, "A") + 1
Cordialement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
911
Réponses
15
Affichages
786
Réponses
4
Affichages
733
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour