Utiliser la formule Count avec IF

Résolu/Fermé
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 - 23 févr. 2016 à 20:05
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 - 1 mars 2016 à 21:13
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!

A voir également:

4 réponses

m@rina Messages postés 20070 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 24 avril 2024 11 271
23 févr. 2016 à 23:50
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
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
24 févr. 2016 à 14:15
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!
0
m@rina Messages postés 20070 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 24 avril 2024 11 271
25 févr. 2016 à 03:43
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
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
Modifié par ButteDuLac le 25/02/2016 à 20:36
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.
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
25 févr. 2016 à 20:39
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!)
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
Modifié par ButteDuLac le 25/02/2016 à 20:45
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!!!!)
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
25 févr. 2016 à 20:55
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???
0
m@rina Messages postés 20070 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 24 avril 2024 11 271
Modifié par m@rina le 26/02/2016 à 04:02
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é.
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
26 févr. 2016 à 16:24
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!) ;)
0
m@rina Messages postés 20070 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 24 avril 2024 11 271
26 févr. 2016 à 21:02
"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 ! ;)
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
26 févr. 2016 à 22:10
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).
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
27 févr. 2016 à 13:10
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
0
ButteDuLac (hors connexion)
27 févr. 2016 à 13:56
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!
0
m@rina Messages postés 20070 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 24 avril 2024 11 271
28 févr. 2016 à 14:02
Merci eriiic !
0
ButteDuLac Messages postés 495 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 24 octobre 2020 40
1 mars 2016 à 21:13
C'est merveilleux! Ça marche!
Ah, ce que je vous envie de maîtriser tout cela... un jour, peut-être!

Merci, énormément!
0