Utiliser la formule Count avec IF [Résolu/Fermé]

Signaler
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
-
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
-
Bonjour,

Dans Word, il est possible d'utiliser des formules dans un tableau.

J'ai un formulaire qui contient un tableau avec des cases à cocher (29 lignes sur 3 colonnes). J'aimerais compter rapidement le nombre de cases cochées dans chacune des trois colonnes.

Je peux facilement compter avec la formule =COUNT(ABOVE) le nombre de cellules qui contiennent une valeur, mais que la case soit cochée ou non, ça donne le même résultat. Est-ce qu'il y a moyen d'utiliser le IF, dans Word?

J'ai essayé, mais je n'arrive pas à trouver la syntaxe.

Je ne pouvais pas créer le formulaire dans Excel, car les autres parties nécessitaient trop de mises en page.
J'aurais peut-être dû faire une section avec un tableau inséré d'Excel, mais il est trop tard, le formulaire est parti et je commence à recevoir des réponses...

Merci de m'aider, si vous le pouvez!

4 réponses

Messages postés
17156
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
23 juillet 2021
10 489
Bonsoir,

Tu parles de compter "le nombre de cases cochées" ... sans préciser ce que sont ces cases. Contrôles de contenu ? Contrôles ActiveX, Champs de formulaire ?

Ensuite, la formule dont tu parles compte des cellules, mais pas des cases. ça n'a rien à voir. Pour compter des cases, il faut passer par une macro.

m@rina
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Oui, en effet, il s'agit de contrôles de contenu.
Pour faciliter les choses, j'ai déposé mon fichier ici :
http://www.cjoint.com/c/FBynogSdOI0

À noter que je vais recevoir près d'une trentaine de ces questionnaires, alors vous comprendrez que je n'ai pas envie de tout compter à la main!

Merci de votre aide!
Messages postés
17156
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
23 juillet 2021
10 489
Bonjour,

Pour commencer, tu aurais dû utiliser des boutons d'option et non pas des cases à cocher : les boutons d'option s'éliminent alors que, là, l'utilisateur pourra cocher trois cases sur la même ligne...

Voici néanmoins un exemple de macro. Cette macro compte les cases activées dans la 3e colonne du 2e tableau :

Sub compte()
'macro écrite par m@rina
Dim tablo As Table
Set tablo = ActiveDocument.Tables(2)
x = 0
For y = 2 To tablo.Columns(3).Cells.Count
If tablo.Columns(3).Cells(y).Range.ContentControls(1).Checked = True Then
x = x + 1
End If
Next
MsgBox x
End Sub


m@rina
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Oui, j'aurais dû utiliser les boutons d'option, je trouvais cela beaucoup plus long, car avec la case à cocher, je peux faire un copier-coller...
Les boutons d'option demandent de travailler dans les propriétés, ce qui est beaucoup plus long... et chaque bouton doit être indépendant l'un de l'autre. Si je fais un copier-coller
Et surtout parce que je suis dans les contrôles de contenu, car les Contrôles ActiveX, il faut verrouiller le formulaire (en tout cas, c'est ce qu'on m'a déjà dit...
Cela dit, c'est probablement dû au fait que je ne maîtrise pas totalement ces options de Word.
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Pour ce qui est de la macro, elle fonctionne très bien... mais partiellement.

J'aurais besoin des comptes des trois colonnes, dans la msg box.
Je peux composer le texte de la msgbox (enfin, je crois)
MsgBox "Facilement = " & x & Chr(10) & "un peu = " & ...
Mais la macro compte la colonne 3 seulement.
Comme puis-je ajouter la colonne 2 et la colonne 4?

Je suis très débutante en matière de macro VBA.

J'ai tenté quelque chose, mais ça ne fonctionne pas.

Si je pouvais "pousser ma luck" (comme on dit au Québec - car j'ignore d'où vous êtes dans le monde!), j'irais jusqu'à vous demander comment je peux compter séparément les
13 premières lignes (2 à 14)
lignes suivantes (15 à 26)
puis 3 dernières lignes (27 à 29).

Merci! Merci énormément!
(Dans le fond, tout ce temps que je prends, j'en suis consciente, j'aurais eu le temps de compter manuellement les réponses, mais cela me permet par le fait même d'apprendre à automatiser les opérations, à produire des macros par moi-même pour l'avenir!)
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Ah oui, idéalement, je voudrais que les résultats s'affichent dans le document, plutôt que dans une MsgBox, sinon, je perds mes données en fermant la petite fenêtre... :)

C'est pour cette raison qu'au début j'essayais avec une formule dans les cellules...

(À bien y penser, j'aurais vraiment dû faire le tout en EXCEL!!!!)
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
En essayant d'exécuter la macro avec la colonne 4, j'obtiens un « Erreur d'exécution '6290' : Cette propriété est disponible uniquement pour les contrôles de contenu de case à cocher. »
Pourtant, j'ai copié-collé la procédure, en ne changeant que les numéros de colonnes. Ça fonctionne pour la 2 et la 3, mais pas la 4...

Sub compte_un_peu()
'macro écrite par m@rina
Dim tablo As Table
Set tablo = ActiveDocument.Tables(2)
x = 0
For y = 2 To tablo.Columns(4).Cells.Count
If tablo.Columns(4).Cells(y).Range.ContentControls(1).Checked = True Then
x = x + 1
End If
Next
MsgBox x
End Sub


Qu'est-ce qui cloche???
Messages postés
17156
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
23 juillet 2021
10 489
Bonsoir

Qu'est ce qui cloche ? :)) Ce qui cloche c'est la mauvaise gérance des contrôles de contenu par le VBA de Word ! Il y a très peu de possibilités pour macroter avec les contrôles de contenu, et surtout dans un tableau car on n'a pas la possibilité de vérifier ce que contient la cellule en matière de contrôle de contenu.
J'ai testé une autre méthode en faisant des sélections de colonnes, mais c'est toujours pareil, et vraiment j'ignore pourquoi, Word ne veut rien entendre lorsqu'il s'agit de la dernière colonne. Si tu ajoutes par exemple une cinquième colonne, bizarrement le problème ne se produit plus dans la 4e.

Il faut procéder autrement. Le mieux serait de donner un titre différent pour les contrôles d'une même colonne. Ainsi on ne s'occuperait plus des colonnes mais uniquement des contrôles de contenu qui sont dans le document et qui ont un titre commun :

For y = 1 To ActiveDocument.ContentControls.Count
If ActiveDocument.ContentControls(y).Title = "mon titre" Then
If ActiveDocument.ContentControls(y).Checked = True Then
x=x+1
End If
End If
Next


Je ne comprends pas pourquoi tu veux gérer ça avec Word, alors qu'avec Excel c'était tout simple.

Le mieux ici serait de créer un Userform... Y a pas mieux.

m@rina

Nous ne sommes pas devins : n'oubliez pas d'indiquer la version du logiciel utilisé, et comment vous avez procédé.
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Oui, mais maintenant, c'est fait.
De toute façon, je commence à recevoir des formulaire papier (tout le monde n'a pas le même intérêt pour l'utilisation des formulaires électroniques!) Je n'aurai plus le choix de compter manuellement... misère!
Merci pour le temps consacré à ma demande. Sûrement que vos macros me seront utile ultérieurement, quand même!
Prochaine fois, sans aucun doute, ce sera Excel! (Surtout qu'ironiquement, mon questionnaire portait sur Excel!) ;)
Messages postés
17156
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
23 juillet 2021
10 489
"Surtout qu'ironiquement, mon questionnaire portait sur Excel!"

mais oui !! :))) c'est bien ce que j'ai constaté.C'est drôle parce que, formatrice moi même, j'ai utilisé exactement ce type de questionnaire, et fait avec Excel ! ;)
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
Je suivrais bien l'une de vos formations... car la partie qui me manque, c'est la programmation... je ne la vois pas dans mes cours (sauf enregistrement d'une macro simple).
Messages postés
24141
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
24 juillet 2021
6 843
Bonjour,

Comme m@rina a mâché le boulot je me lance (salut m@rina ;-) )

Alors effectivement j'ai eu aussi des pb en balayant par ligne ou colonne, le dernier checkbox n'est pas vu (!?). En balayant la collection on arrive à tous les avoir.
Je n'ai pas réussi à insérer un tableau résultat dans la feuille (elle semble protégée en insertion ?), il faut donc sélectionner la 1ère ligne dispo dans la zone de commentaires (besoin de 4 lignes libres) avant de lancer la macro.
Sub compte()
'macro écrite par m@rina
    Dim resultat() As Long, ctrl As Object, gr As Long
    Dim lig As Long, col As Long, msg(1 To 3) As String

    If MsgBox("Avez-vous sélectionné l'emplacement de restitution ?", vbYesNo) = vbNo Then Exit Sub
    With ActiveDocument.Tables(2)
        ReDim resultat(1 To 3, 1 To .Columns.Count - 1)
        For Each ctrl In .Range.ContentControls
            If ctrl.Type = wdContentControlCheckBox Then
                With ctrl.Range.Cells(1)
                    Debug.Print .RowIndex, .ColumnIndex
                    Select Case .RowIndex
                    Case 2 To 14
                        gr = 1
                    Case 15 To 26
                        gr = 2
                    Case 27 To 29
                        gr = 3
                    End Select
                    If ctrl.Checked Then
                        resultat(gr, .ColumnIndex - 1) = resultat(gr, .ColumnIndex - 1) + 1
                    End If
                End With
            End If
        Next ctrl
        For lig = 1 To 3
            For col = 1 To .Columns.Count - 1
                msg(lig) = msg(lig) & ", " & resultat(lig, col)
            Next col
        Next lig
    End With
'    MsgBox msg(1) & vbLf & msg(2) & vbLf & msg(3)
    Selection.TypeText Text:="Résultat par groupe :"
    For lig = 1 To 3
        Selection.TypeParagraph
        Selection.TypeText Text:=msg(lig)
    Next lig
End Sub

En la mettant dans un module de normal.dot tu peux la lancer sur les .xlsx
https://www.cjoint.com/c/FBBmfvbhjmi
eric

Merci. J'essaierai cela lundi au bureau. La feuille n'est pas protégée, le texte est groupé, alors je n'ai qu'à me placer où je veux, en mode création, ou à dissocier une partie.
Merci beaucoup à vous deux!
Messages postés
17156
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
23 juillet 2021
10 489
Merci eriiic !
Messages postés
492
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
24 octobre 2020
29
C'est merveilleux! Ça marche!
Ah, ce que je vous envie de maîtriser tout cela... un jour, peut-être!

Merci, énormément!