Poser votre question
0

Somme des cases à cocher value libreoffice macro

posée 2019-06-03 12:00:59 +0100

Image Gravatar de Leonc2006

updated 2019-06-04 16:30:24 +0100

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
éditer requalifier signaler fermer fusionner supprimer

2Réponses

0

répondue 2019-06-03 17:16:10 +0100

Image Gravatar de pierre-yves samyn

updated 2019-06-04 19:30:32 +0100

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

description de l'image

  • 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 : C:\fakepath\maintenance.ods

Cordialement

éditer signaler supprimer permalien plus

Commentaires

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 ...(more)

Image Gravatar de Leonc2006Leonc2006 ( 2019-06-04 16:52:10 +0100 )éditer

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

Image Gravatar de Leonc2006Leonc2006 ( 2019-06-04 20:58:47 +0100 )éditer
0

répondue 2019-06-04 18:29:26 +0100

Image Gravatar de 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'. description de l'image 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'apportesC:\fakepath\MAINTENANCE PREVENTIVE STATION.ods. Cordialement,

Leonc2006

éditer signaler supprimer permalien plus
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2019-06-03 12:00:59 +0100

Consultée: 107 fois

Mise à jour: Jun 04