Cocher automatiquement plusieurs cases a cocher (checkbox) VBA

Salut les amis,

J’ai un petit souci en VBA. J’ai une checkbox principale (appelée CheckBox_Tous_LesDevis) et 15 autres checkbox le tout sur une feuille Excel. J’essaie d’écrire un code VBA qui, une fois la checkbox principale est cochée, les 15 autres se cochent automatiquement. Aussi lorsque je décoche la checkbox principale, les autres suivent. Voici le code que j’ai écrit :

Private Sub CheckBox_Tous_LesDevis_click()

Dim i As Integer

If CheckBox_Tous_LesDevis = True Then

For i = 1 To 15

Feuil3.Controls("checkbox" & i) = True

Next i

Else

End If

A l’exécution, je reçois le message d’erreur :

compile error :

sub or fonction not define

en remplaçant feuil3.Controls("checkbox" & i) par Feuil3.CheckBox& i, j’obtiens toujours la même erreur.

j’ai grand besoin de votre aide. Fichier exemple

Bonjour,

Un essai ...

Pour tous les chechbox ...

Private Sub CheckBox_Tous_LesDevis_click()
   With ActiveSheet
      If CheckBox_Tous_LesDevis = True Then
         For Each objckbox In .OLEObjects
            If TypeName(objckbox.Object) = "CheckBox" Then objckbox.Object.Value = True
         Next objckbox
      Else
         For Each objckbox In .OLEObjects
            If TypeName(objckbox.Object) = "CheckBox" Then objckbox.Object.Value = False
         Next objckbox
      End If
   End With
End Sub

ric

Bonjour,

Une version avec limitation du nombre ...

Private Sub CheckBox_Tous_LesDevis_click()
Dim i As Long
   With ActiveSheet
      If CheckBox_Tous_LesDevis = True Then
         For i = 1 To 15
            With .OLEObjects("CheckBox" & i)
               .Object.Value = True
            End With
         Next i
      Else
         For i = 1 To 15
            With .OLEObjects("CheckBox" & i)
               .Object.Value = False
            End With
         Next i
      End If
   End With

   Application.ActiveWorkbook.RefreshAll
End Sub

ric

Bonjour RIC,

Encore merci pour les 2 solutions proposées. J'ai utilisé la version avec limitation du nombre ...car cela correspondant mieux à ma situation. le hic a l'exécution du code j'ai un arrêt au niveau du code With .OLEObjects("CheckBox" & i). j'ai fait des capture d'écran que je joint au fichier Excel.

C'est tout de même une bonne piste que je vais continuer à suivre en attendant que tu trouves ce qui cloche.

merci encore

erreur vba erreur vba 2 1

Bonjour toutes et tous

coucou Ric ^^

@Mastniper vérifier la checkbox3 le nom est différent des autres checkbox (checkbox 1, 2, 3 [15]

crdlt,

André

Bonjour,

Ouupppssss!!!!! > j'ai oublié de mentionner que le checkbox "Devis 3" portait un nom "checkbox_Devis_3" différent des autres ...

Désolé de mon oublie ...

Une version corrigée ...

ric

Modif ... Bonjour Andre13 ...

' ...

Bonjour,

Pour voir le nom différent sur ton fichier > menu "Développeur" > "Mode Création" > clique droit sur "Devis 3" > Propriétés > première ligne "(Name)" ...

De là > tu peux le modifier ...

ric

Merci Andre13 et grand merci a RIC,

Tout marche à merveille maintenant, désolé c'est moi qui avais mal nommé une checkbox ; c’est normal que ça coince. Merci pour le coup d'œil vous êtes des champions.

Je vais passer le problème en résolu

Bonsoir…

case appelante nommée AT alors (tout ou rien)

Private Sub AT_Click()
  Dim i As Long
  On Error Resume Next     'absence du contrôle
  For i = 1 To 100         ‘ou 1 000* , toutes les présentes
      ActiveSheet.OLEObjects("CheckBox" & i).Object = AT
  Next
End Sub

Nota : ce serait plus simple à programmer avec de fausses cases à cocher. Déjà, on n’aurait pas les problèmes dus au type de contrôles choisis (selon la version d’Excel) mais c’est une autre histoire que d’éviter une profusion de boutons ...

Bonjour toutes et tous

bravo Ordonc ^^^^,

en tout cas ton code, je ne comprends plus rien

Private Sub AT_Click()
Dim i As Long                                 ' déclaration variable çà ok
On Error Resume Next 'absence du contrôle  ' quand tu dis absence de contrôle c'est à dire  il va sur next et sort  en cas d'erreur ( à peu près compris limité à 100 ?)
checkbox_devis_3 = AT   ' alors là, je ne comprends plus , jusqu'à la fin du code
For i = 1 To 100
If i <> 3 Then ActiveSheet.OLEObjects("CheckBox" & i).Object = AT
Next
End Sub

merci snifff

Salut André.

J’aurais pu donner

Dim x, n As Byte
Private Sub AT_Click()
    For Each x In Me.OLEObjects
        n = x.Index
       ‘MsgBox x.Name & " " & x.Index  ‘seulement pour voir où on en est 
       x.Object = AT
    Next
End Sub

qui ressemble au travail plus répandu pour les noms d’onglet et leur Index.

Ici l’index est l’ordre de création des cases et la programmation est plus simple avec un ordre continu.

Le code que j'avais donné tenait compte d'un nom spécial.

Re,

merci Ordonc, laisse-moi le temps de savourer et surtout de comprendre le premier code de ton post précédent lol ^^

crdlt,

André

Re ...

Mon interprétation après bien des déboires dans mon apprentissage des outils mis à notre dispositions (comme beaucoup, connus à moins de 25% de leur potentiel) * :

- On Error Resume Next 'absence du contrôle

Ici, cette ligne permet d’éviter un arrêt accompagné d’un message d’erreur quand l’item de la boucle est absent des contrôles définis.

Elle pourrait être remplacée par une série plus ou moins longue de lignes de tests de validité.

J’ai trouvé fastidieux de les répertorier.

Elle devrait dans certains cas être accompagnée de la ligne On Error Goto 0 qui rétablit la gestion de nouvelles erreurs mais, ici, il ne s’agit que de passer aux suivants de la boucle (Next comme tu l’as trouvé).

- CheckBox :contrôle de Formulaire ou ActiveX, problématiques selon les versions d’Excel d’où le passage par la classe OLEOjects qui contient bien d’autres Classes**.

Quand un des noms n’est pas homologue aux autres (avant correction comme il a été au départ). Il est traité hors de la boucle par

checkbox_devis_3 = AT

La boucle remplace les lignes

 checkbox_1 = AT
 checkbox_2 = AT
 checkbox_4 = AT
 checkbox_5 = AT
…

Pour éviter cette litanie, on trouve, dans la boucle l’instruction

ActiveSheet.OLEObjects("CheckBox" & i).Object = AT

Un objet du type CheckBox peut prendre exclusivement une des 2 valeurs booléennes attribuées : FALSE (0) ou TRUE(1 plutôt que <> 0, sytstème binaire oblige) .Ils sont à leur création mis à FALSE (0).

De plus, le VBA d’Excel est quand même bien construit*. Dès une saisie, celle-ci elle est cherchée dans la liste des suites admises donc probables sans erreur.

Quand on écrit CheckBox = , Excel s’attend à ce que la suite soit la valeur (0 ou pas) donc, sachant cela, elle dispense du .Value .Ici, La case va prendre la valeur de la case AT. Quand on ne connait pas ce fait on écrit

checkbox_devis_3.value = AT.value
ActiveSheet.OLEObjects("CheckBox" & i).Object.Value = AT.Value

*je ne suis pas, comme certains, du genre à mettre à la poubelle des outils que je connais mal. Je préfère, comme Toi, essayer de comprendre pour parfaire mon apprentissage.

** la consultation ici amène beaucoup de renseignements :

oleobjects

Bonjour toutes et tous

Grand merci Ordonc ^^^^pour cette aide très bien expliquée , je comprends un peu mieux (même si, je dois le rerelire pour que çà rentre dans ma tête)

bon weekend

crdlt,

André

Bonjour a Tous,

Je vous remercie encore pour votre aide précieuse quand j’avais des difficultés avec les checkbox. J’ai énormément progressé dans mon projet grâce à vous. Je sollicite à nouveau votre technicité pour résoudre un problème de copie de lignes vers les d’un autre tableau.

Je m’explique dans le fichier Excel joint, j’ai un tableau SOURCE et un autre tableau appelé SAUVEGARDE. Je désire copier les données du tableau SOURCE (en commençant par la dernière ligne) vers le tableau SAUVEGARDE en prenant soin de copier chaque élément dans sa cellule équivalente dans SAUVEGARDE.

Avec le code que j’ai écrit je me rends compte que c’est une seule ligne qui est copiée.

J’ai besoin de votre aide pour copier les lignes en partant de la dernière jusqu’à la 1ere.

merci

Bonjour,

Tu copies toutes les lignes même si ce n'est pas écrit "Ouvert" dans la colonne "E" ...

Un essai ...

      For i = j To 6 Step -1     ' pas besoin de copier les entêtes, on arrête donc à la ligne 6
         Feuil9.Cells(DerniereLigne, 1) = Feuil2.Cells(i, 1)
         Feuil9.Cells(DerniereLigne, 2) = Feuil2.Cells(i, 2)
         Feuil9.Cells(DerniereLigne, 3) = Feuil2.Cells(i, 3)
         Feuil9.Cells(DerniereLigne, 4) = Feuil2.Cells(i, 4)
         Feuil9.Cells(DerniereLigne, 5) = Feuil2.Cells(i, 35)
         Feuil9.Cells(DerniereLigne, 6) = Feuil2.Cells(i, 36)
         Feuil9.Cells(DerniereLigne, 7) = "Devis Fermé"
         Feuil9.Cells(DerniereLigne, 8) = Feuil2.Cells(i, 34)
         For k = 9 To 34
            Feuil9.Cells(DerniereLigne, k) = Feuil2.Cells(i, k - 3)
         Next k
         DerniereLigne = DerniereLigne + 1      ' il faut incrémenter la ligne dans la sauvegarde 
      Next i

ric

Merci ric, une fois de plus tu me sauves.

Rechercher des sujets similaires à "cocher automatiquement cases checkbox vba"