Somme des cases à cocher value libreoffice macro

Bonjour,

Je voudrais savoir, si il est possible de compter des cases à cocher.
Dans deux colonne, je dois cocher l’ensemble des cases à cocher, si j’ai 50 cases à cocher ma condition est vrai.
Si j’ai moins 50 cases à cocher ma condition est fausse, alors je dois afficher un message.
J’ai créer un contrôle checkbox qui représente l’ensemble de mes cases à cocher. Mais quand je coche les cases à cocher, si je les coches toutes, j’ai toujours le message qui s’affiche <<(“VEUILLEZ COCHER L’ENSEMBLE DES CASES”)>>.
Voici mon bout de code ci-dessous, je me suis inspiré des codes existants et adapté pour mon utilisation, je remercie d’avance la communauté du forum, si quelqu’un peut m’aider.

Private Sub CommandButton1_Click()

 Dim monControle As object,I(1), nom As String,x As Long 
 Dim oDoc as Object, feuilleDonnees as Object, Feuille as Object
 Dim oForm as Object, Combo as Object, vueCombo as Object
 Dim  oZoneListe As Object, aListe As String
 Dim  oCellListe As Object
 Dim nCount as Integer, A As Integer

	oDoc = thisComponent
	monControleur = oDoc.CurrentController


	monControleur.ActiveSheet = Feuille
	Feuille= oDoc.Sheets.getByName("Feuille1")
    	oDoc.CurrentController.ActiveSheet = Feuille
    	For x = 1 to 100 'ici débute de la boucle qui incrémente le numéro du nom du contrôle'
	'en dessous on génère le nom des contrôles (x s'incrémente à chaque tour de boucle) '
	I(0) = "CheckBox"
	I(1) = x 
	nom = join(I(),"") 'création du nom du contrôle'
	monControleur.ActiveSheet = Feuille
	Feuille= oDoc.Sheets.getByName("Feuille1")
    	oDoc.CurrentController.ActiveSheet = Feuille
	monFormulaire = Feuille.Drawpage.Forms.getByName("Formulaire") 'on récupère le formulaire'
 	monControle = monFormulaire.getByName(nom) 
	vueControle = monControleur.getControl(monControle) 
	modelControle = vueControle.Model 'on récupère le modèle du contrôle

    
		If modelControle.CurrentValue & x = True Then 'Si mon contrôle 50 cases de cochées au moins'
	 
		A = A + 1
   
	End If	 
     	next x
	
	If A < 50  Then 	'Si montrole est < 50 cases de cochées  	'
             	MsgBox ("VEUILLEZ COCHER L'ENSEMBLE DES CASES")
 
            End If
	     

End Sub

Bonjour

@Leonc2006 a écrit:

Si j’ai moins 50 cases à cocher ma condition est fausse, alors je dois afficher un message

Si le besoin est bien celui-là, tu n’as besoin d’aucune macro :

  • Définir une cellule liée pour chaque case

  • Faire la somme de ces cellules quelque part dans le tableau (peut être dans une colonne masquée ou une autre feuille) ; si la somme est < 50 afficher le texte qui convient:

    =SI(SOMME(A2:A50)<4;“Veuillez saisir l’ensemble des cases”;"")

  • On peut encore enrichir la présentation en ajoutant sur la cellule de test un formatage conditionnel affichant en rouge (par exemple) le message.

Ceci est mis en oeuvre dans le classeur exemple joint (je n’ai créé que 4 cases mais le principe reste bien sûr le même).

Si, pour une raison qui m’échappe compte tenu des éléments, tu veux quand même une macro (ce que je déconseille de manière générale pour des raisons de maintenance et parce que tu ne sais pas si les macros auront l’autorisation d’exécution sur tous les postes), avant de corriger ton code, il faudrait que tu expliques ce que tu veux dire par :

J’ai créer un contrôle checkbox qui représente l’ensemble de mes cases à cocher

[Ajout 04-06/2019 19:15]

@Leonc2006 a écrit:

mais je dois passer par une macro. Car cette feuille de maintenance, avant de exporter en PDF

Je suis désolé mais ceci est incompréhensible en ce qui me concerne… Par ailleurs tes explications supplémentaires n’en sont pas car tu redis la même chose qui n’explique pas ce que tu crois faire avec ton contrôle supplémentaire

J’ai pris le même contrôle pour mettre l’ensemble des 50 cases à cochées

“Mettre des cases à cocher” n’évoque rien pour moi… Peut-être débutes-tu en programmation ?

Si tu veux passer par une macro et si tu suis mon conseil de définir des cellules liées, il te suffit de tester la cellule où tu fais la somme des valeurs, tu n’as plus besoin de parcourir les contrôles.

Toutefois je renonce à comprendre et mets ci-dessous comment boucler sur les cases à cocher et totaliser celles qui le sont. Si le nombre est inférieur à 50 il y a affichage du message :

 Private Sub CommandButton1_Click()

  dim oDoc as object, oFeuille as object, oForm as object, oCtrl as object 
  dim iVerif as integer

  oDoc = thisComponent 
  Feuille = oDoc.Sheets.getByName("Feuille1")
  oForm = Feuille.Drawpage.Forms.getByName("Formulaire")


  for each oCtrl in oForm
	if oCtrl.supportsService("com.sun.star.awt.UnoControlCheckBoxModel") then
		iVerif = iVerif + oCtrl.state
	end if
  next oCtrl
       
  if iVerif < 50 then
	MsgBox ("VEUILLEZ COCHER L'ENSEMBLE DES CASES")    
  else	
	MsgBox ("50 cases cochées")    
  end if	
  End Sub

J’ai affecté cette procédure au bouton dans ton classeur : maintenance.ods

Cordialement

Bonjour Pierre-yves samyn,

Je te remercie de ton aide, mais je dois passer par une macro.

Car cette feuille de maintenance, avant de exporter en PDF

La condition c’est que le technicien à bien validé l’ensemble des cases à cochées, sinon un message apparait.une fois l’ensemble des cases à cochées au nombre de 50 sont cochées sur 100. Alors il peut exporter le fichier en PDF.
Ces cases à cochés au nombre de 50 dans la première colonne, elles sont utilisées pour rayer du texte si la tache a été réalisé et si n’y pas de suite.
Et l’autre colonne, il y 50 cases à cochée, elles permettent de mettre le texte en rouge, si la tache n’a pas pu être faite. l’ensemble de programme et fait en vb en Macro.

la fonction que, je recherche, c’est si les 50 cases à cochée sont bien cochées, alors je peut export mon fichier en PDF. Et si 1 cases n’est pas cochées sur 50, alors j’ai message.
MsgBox << VEUILLEZ COCHER L’ENSEMBLE DES CASE>>

Je te remercie encore de ton aide

Cordialement,
Leonc20

Merci Pierre-yves samyn,

Je te remercie beaucoup, pour la modification de mon programme.
C’est tout à fait ce que j’attendais, encore un grand merci.
Effectivement, je débute en LibreOffice, Car auparavant, je l’avais développé sous Excel.
Et j’utilisais la méthodes de la collection OLEObjects,

'Export en fichier PDF
Private Sub CommandButton1_Click()
Dim obj As OLEObject
Dim I As Integer, A As Integer
Dim Ws As Worksheet

Set Ws = Worksheets("Feuille1")

'Les objets doivent être nommés CheckBox1, CheckBox2...CheckBox4
For I = 1 To 100
    If Ws.OLEObjects("CheckBox" & I).object.Value = True Then
        A = A + 1
    End If
Next I
If A < 50 Then
    MsgBox ("VEUILLEZ COCHER L'ENSEMBLE DES CASES")
    Else: ExportePDf 'Affiche la boite de dialogue suivante
End If

End Sub

Cordialement
Leonc2006

Désolé Pierre-yves samyn,

Comme je l’ai évoqué dans le mail précédent.
J’ai créer un contrôle qui représente l’ensemble de mes cases à cochées appelé modelControl.
Avant je les déclare dans une boucle For une variable qui représente dans ma boucle for mes 100 variable x.
Et je déclare valeur I(0) = “CheckBox”, et je récupère ma variable I(1) = x
nom = join(I(),"") ‘création du nom du contrôle’.


J’ai pris le même contrôle pour mettre l’ensemble des 50 cases à cochées modelControl.State = False.
Et les 50 cases à cochées sont désélectionnées dans les colonnes.

Encore merci pour l’aide que tu m’apportesMAINTENANCE PREVENTIVE STATION.ods.
Cordialement,

Leonc2006