Comptage des occurrences de chaîne dans les lignes impaires (Microsoft Excel)
Jeff a une feuille de calcul avec pas mal de texte, dans la colonne C. Il aimerait compter les occurrences d’une chaîne spécifique dans la colonne C, mais uniquement pour les lignes impaires (1, 3, 5, etc.) dans les données. La chaîne qu’il recherche peut ne pas être le contenu entier de la cellule et elle peut se produire plusieurs fois dans une cellule particulière. (Si cela se produit 2 ou 3 fois dans une cellule, cela doit compter pour 2 ou 3 occurrences.) Il se demande s’il existe une formule pour le faire, sans recourir à une macro.
Une façon d’aborder cela consiste à utiliser une colonne d’assistance. Par exemple, disons que vous pouvez utiliser la colonne D comme colonne d’assistance et que la première cellule contenant des données est la cellule C2. (Peut-être que la cellule C1 contient un en-tête de colonne.) Vous pouvez utiliser la formule suivante dans la cellule D2:
=IF(MOD(ROW(),2)=1,(LEN(C2)-LEN(SUBSTITUTE(C2,"my text","")))/LEN("my text"),"")
Tout ce que vous avez à faire est de remplacer la chaîne de recherche (« mon texte ») par ce que vous recherchez. La fonction LEN est utilisée deux fois, d’abord pour trouver la longueur de ce qui se trouve dans la cellule C2, puis pour en soustraire la longueur du texte avec toutes les instances de « mon texte » supprimées. Cette valeur est ensuite divisée par la longueur de ce que vous recherchez, ce qui correspond au nombre d’occurrences du texte recherché dans la cellule. Notez que la fonction IF garantit qu’une valeur numérique est renvoyée uniquement si la ligne est une ligne impaire.
Vous pouvez copier cette formule autant de lignes que nécessaire, puis additionner la colonne. Le résultat est le nombre de fois où la chaîne apparaît dans les lignes impaires.
Si la mise en page de votre feuille de calcul ne vous permet pas d’utiliser une colonne d’assistance, vous pouvez vous fier à une formule qui fonctionne sur des tableaux de données.
En voici un qui fait l’affaire:
=SUMPRODUCT((LEN(C:C)-LEN(SUBSTITUTE(C:C,"my text","")))/LEN("my text")*ISODD(ROW(C:C)))
Cette formule fait essentiellement la même chose que la formule précédente, sauf que la fonction SOMMEPROD fait le calcul en interne pour chaque cellule de la colonne C. Vous devez vous rendre compte que puisque la formule examine toute la colonne C, cela signifie que si votre texte de recherche (« mon texte « ) apparaît dans toutes les cellules sans données de la colonne (comme un en-tête de colonne), puis il sera également inclus dans le total renvoyé.
Si vous décidez d’utiliser une macro, vous pouvez facilement créer une fonction définie par l’utilisateur qui examine une plage de cellules et détermine le nombre. Voici un exemple du type de macro que vous pouvez utiliser:
Function CountInst(rSource As Range, sSearch As String, bCaseInsensitive As Boolean) As Integer Dim c As Range Dim iCount As Integer Dim sTemp1 As String Dim sTemp2 As String sTemp2 = sSearch If bCaseInsensitive Then sTemp2 = LCase(sTemp2) iCount = 0 For Each c In rSource If c.Row Mod 2 = 1 Then sTemp1 = c.Text If bCaseInsensitive Then sTemp1 = LCase(sTemp1) iCount = iCount + (Len(sTemp1) - _ Len(Replace(sTemp1, sTemp2, ""))) / Len(sTemp2) End If Next c CountInst = iCount End Function
Pour l’utiliser, tout ce que vous avez à faire est de fournir une plage, ce que vous souhaitez rechercher et si vous souhaitez que la correspondance soit insensible à la casse ou non. Par exemple, si vous voulez rechercher « mon texte » et que la casse n’a pas d’importance, vous utiliserez ce qui suit:
=CountInst(C2:C99,"my text",TRUE)
ExcelTips est votre source pour une formation Microsoft Excel rentable.
Cette astuce (1514) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.