Problème résolue: checkbox qui prennent valeurs 0 ou 1

Bonjour,

Quelqu'un peut me dire comment je peux remplacer toutes mes valeurs 1 ou 0 par des checkbox.

J'ai rempli à la main toutes les valeurs 1 et 0 car la fiche ci-joint fait parti du premier code VBA que j'ai établi et qui marche.

je voudrais remplacer ces valeurs par des checkbox sans modifier mon code principale.

Une checkbox cocher correspondrait à 1 et une checkbox non coché à 0.

Il y'a plein de checkbox à ajouter sur plusieurs colonne et ligne et je trouve pas comment faire ca proprement.

je viens de débuté en début de semaine en VBA, j'ai beaucoup progresser grâce a vos aide donc je vous remercie d'avance.

merci beaucoup

48checkbox.xlsx (16.97 Ko)

Bonjour

A voir

une fois de plus,merci de ta réponse banzai64.

J'ai peut etre pas compris quelque chose, mais les cellules ne peuvent pas être remplacé par les case à cocher directement? Parce que je veux plus voir les 1 et les 0 mais uniquement des cases à cocher.

Bonjour

Je n'ai pas voulu le faire car tu vas avoir 52 * 128 = 6656 CheckBox (bien qu'actuellement tu n'as que 23 semaines)

Et comme je suis contre la prolifération des Checkbox

Mon avis que je partage : C'est trop

Mais je n'empêche personne de le faire (heureusement)

Ca ralenti le code les checkbox?

Bonjour,

Je me suis donc servi de ce code pour essayer de remplir mes colonnes par des checkbox.

Sub Checkbox()

    With Sheets("feuil1")

ligne = Range(Selection, Selection.End(xlDown)).Select

    For i = 2 To ligne
    .Select
    .Range("A" & i) = ""
    With .CheckBoxes.Add(Range("A" & i).Left, _
    Range("A" & i).Top, Range("A" & i).Width, Range("A" & i).Height)
    .Caption = ""
    End With
    Next i
    End With

End Sub

Sauf qu'il ya pas de résultat. Sauf si je remplace ligne par un chiffre comme par exemple 200. J'ai bien 200 checkbox sur la colonne A qui s'affiche.

Et pour l'appliquer à plusieurs colonne, c'est possible ou je dois a chaque fois recopier ce bout de code?

24exemple2.xlsm (35.61 Ko)
Banzai64 a écrit :

Bonjour

Je n'ai pas voulu le faire car tu vas avoir 52 * 128 = 6656 CheckBox (bien qu'actuellement tu n'as que 23 semaines)

Et comme je suis contre la prolifération des Checkbox

Mon avis que je partage : C'est trop

Mais je n'empêche personne de le faire (heureusement)

Et je dirais en plus que de toute façons, le nombre est limité, si mes souvenirs sont bons, aux alentours de 600.

Mais si tu insiste..

Sub Checkbox()
Dim Cel As Range
Dim Wks As Worksheet
    Set Wks = Selection.Parent
    For Each Cel In Selection
        Cel.Font.ColorIndex = 2
        With Wks
            With .CheckBoxes.Add(Cel.Left, _
            Cel.Top, Cel.Height, Cel.Height)
            .Caption = ""
            .LinkedCell = Cel.Address
            End With
        End With
    Next
End Sub

Et il faut aussi avoir la valeur des checkbox, c'est ce que fait LinkedCell

Je met la cellule avec écriture blanc pour qu'il ne soit pas visible.

A+

Merci beaucoup

Mais dans le code, a aucun moment je choisi les colonnes qui doivent être en checkbox. enfin je comprend que c'est toute la feuille qui est en checkbox.

Mais non.. c'est la sélection qui est concernée, si tu sélectionne de C3 à C50 par exemple c'est la colonne C de 3 à 50 qui aura des CheckBox.

Et tu peu aussi faire une sélection multiple par exemple C3:C50 et G3:G50 et J3:J50 etc...

Ok merci, j'ai mis le code dans ma feuil concerné et selectionné les case que je voulais transformer en checkbox.

Par contre elle on aucune valeur.

Je peux rajouter à la suite du code ceci ?

rivate sub CheckBox1_Click()
 If CheckBox1.Value Then
 Range("A:Z").Value = 1
 Else
 Range("A:Z").Value = 0
 End If
 end sub

Bonjour à tous,

tu ferais mieux d'écouter banzaï et oublier de mettre autant de checkbox sur une feuille.

Excel gère très mal les objets sur une feuille et tu t'exposes à des problèmes.

Une dizaine ça va, au-delà vaut mieux faire autrement.

Tu sais, un caractère spécial en forme de coche dans une cellule c'est visuellement exactement pareil. Tu le gères avec l'évènement double-clic ce qui ne te fait qu'un seul code plus simple.

Eric

Non,, ça va pas aller

Tu dois tester la cellule dans lequel se trouve le checkBox

Exemple : En A1 tu à un CheckBox

    If [A1].Value = "VRAI" then [B1]=1

Si tu a déjà des données dans les cellules où tu place tes checkbox tu peu leur donner la valeur avec

Sub Checkbox()
Dim Cel As Range
Dim Wks As Worksheet
    Set Wks = Selection.Parent
    For Each Cel In Selection
        Cel.Font.ColorIndex = 2
        With Wks
            With .CheckBoxes.Add(Cel.Left, _
            Cel.Top, Cel.Height, Cel.Height)
            .Caption = ""
            .LinkedCell = Cel.Address
            .Display3DShading = True 'c'est plus zoli :)
            If Cel <> "" Then .Value = xlOn
            End With
        End With
    Next
End Sub

A+

EDIT: Bonjour Eric,

Comme apparemment les recommandations n'ont pas d'effets, laissons le faire.

Quand il arrivera à la limite il sera bien forcer de comprendre.

Mais ça peu aussi servir pour des emplois plus limités

Merci messieurs pour vos conseils.

L'idee de mettre un caractere speciale me plairai bien mais je suis une debutante en excel et vba ( et meme en programmation en generale)donc je n'ai pas la vision que vous pouvez avoir.

En faite, ce que je voudrai, c'est avoir une liste de personne regroupé par domaine. Et chaque responsable de domaine rempli puissent remplir les cases semaines. Comme vous avez vu, ds lon fichier, j'ai mis des 1 et des 0 mais visuellement c est pas pratique.

Je suis preneuse de toutes vos idées. Par contre je vois pas trop comment faire ce que vous avez dit eriiic avec les caracteres.

Voila pour les precisions!

Bonsoir,

Un exemple.

Sélectionner la plage et mettre la police Wingdings. Il faut double-cliquer sur une cellule pour changer son état.

Le code :

Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
    Dim ok As Boolean
    If Intersect(target, [A2:w128]) Is Nothing Then Exit Sub
    If target <> "" Then
        If Asc(target) = 253 Or target = 1 Then ok = True
    End If
    If ok Then
        target = Chr(254)
        target.Font.ColorIndex = 4
    Else
        target = Chr(253)
        target.Font.ColorIndex = 3
    End If
    Cancel = True
End Sub

eric

PS :

ajouté : si la cellule contient 1 une coche verte est mise, si elle est vide ou contient 0 une coche rouge est mise. Mais c'est plus simple de partir sur une feuille vierge.

29classeur1.xlsm (27.38 Ko)

MErci beaucoup. C'est nettement plus visuel que des checkbox tous de la même couleurs.

Par contre, je dois avoir un probleme de caractere car ca ouvre chez moi une sorte de dossier et non des coches.

Enfin je vois les coches rouge et verte que vous avez fait, mais quand moi j'en fais des nouvelles, ca me fait un dossier ouvert ou fermé!

bonjour,

Il faut Sélectionner toute la plage [A2:w128] et mettre la police Wingdings

Si tu utilises une plage plus grande il faut ajuster cette plage dans le code

A+

Bonjour,

Comme dit galopin, mettre la police qui va bien.

En prime, une petite macro qui t'initialise à 0 une plage sélectionnée :

Sub initPlage()
    With Selection.Font
        .Name = "Wingdings"
        .Size = 11
    End With
    Selection = Chr(253)
    Selection.Font.ColorIndex = 3
End Sub

eric

Merci Beaucoup.

Edit: je pensais mon problème résolu mais je suis tombé sur un bug.

Enfaite non

Là, j'ai exécuter mon programme.

J'ai utiliser le tableau qui réinitialise les valeurs sélectionné mais concernant le premier code, j'arrive pas à le greffer à mon code principale. comme si il y'avait pas de private sub, donc au final, la partie de mon code qui à besoin de détecter si la valeur est égale à 0 ou 1 bug.

Function ValeurAstreinte(Login, Semaine) As Integer

    ValeurAstreinte = 0

        For i = 0 To DimAstreinte

         If Login = ListAstreinte(i, 0) Then ValeurAstreinte = ListAstreinte(i, Semaine)

    Next i

End Function

Et en faite quand je met la souris sur ListAstreinte, ca me met ListAstreinte(i, Semaine) = ý

D'ailleurs, ce type de code (les deux derniers) sont des codes qu'ont utilise que une seul fois et qu'ont peut retirer ou il faut les mettre dans le code principale? car en faite, j'ai mis un bouton pour mon code principale qui l’exécute et j'ai peur que ca prenne pas en compte les deux code que vous m'avez donné.

J'ai changé le type de la variable ValeurAstreinte en Bolean

mais ca ne change pas grand chose

Rechercher des sujets similaires à "probleme resolue checkbox qui prennent valeurs"