Compter des occurences "texte" multiples et les additionner
amiga69
Messages postés
8
Statut
Membre
-
amiga69 Messages postés 8 Statut Membre -
amiga69 Messages postés 8 Statut Membre -
Bonjour,
sur EXCEL 2007, j'ai un tableau de ce type (pour simplifier)
A (applications)
B (serveurs gérant ces applications)
C (serveurs ayant généré des incidents)
je souhaite dans une colonne D : calculer le nombre d'incidents, par application.
Mon souci, c'est qu'avec NB.SI je ne peux remonter q'un seul critère "texte" (ici un Nom de serveur), alors que la majorité des applications ont plusieurs serveurs ... je dois les additionner pour avoir la totalité des incidents pour l'application.
avec SOMME.SI ou BDNBVAL ou autres, je ne trouve pas le principe qui me convient :(
pouvez-vous me donner un coup de main svp ?
sur EXCEL 2007, j'ai un tableau de ce type (pour simplifier)
A (applications)
B (serveurs gérant ces applications)
C (serveurs ayant généré des incidents)
je souhaite dans une colonne D : calculer le nombre d'incidents, par application.
Mon souci, c'est qu'avec NB.SI je ne peux remonter q'un seul critère "texte" (ici un Nom de serveur), alors que la majorité des applications ont plusieurs serveurs ... je dois les additionner pour avoir la totalité des incidents pour l'application.
avec SOMME.SI ou BDNBVAL ou autres, je ne trouve pas le principe qui me convient :(
pouvez-vous me donner un coup de main svp ?
A voir également:
- Compter des occurences "texte" multiples et les additionner
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Excel additionner plusieurs cellules - Guide
- Transcription audio en texte word gratuit - Guide
- Excel cellule couleur si condition texte - Guide
- Texte barré whatsapp - Guide
6 réponses
Bonjour,
nb.si(...)+ nb.si(...)+...
ou
sommeprod(...)
ou
TCD (tableau croisé dynamique)
ou ???
Difficile d'être plus précis sans fichier.
cjoint.com et coller le lien fourni ici
eric
nb.si(...)+ nb.si(...)+...
ou
sommeprod(...)
ou
TCD (tableau croisé dynamique)
ou ???
Difficile d'être plus précis sans fichier.
cjoint.com et coller le lien fourni ici
eric
Merci Eric déjà pour m'avoir lu, voici un exemple neutre de ce que je cherche à faire :
https://www.cjoint.com/?BJrmThFVhKn
ps: le NB.SI + NB.SI peut fonctionner, mais certaines applis (400) ont parfois plus de 10 serveurs ... ce serait des heures et des heures d'usines à Gaz avec cette formule ;)
Stéphane
https://www.cjoint.com/?BJrmThFVhKn
ps: le NB.SI + NB.SI peut fonctionner, mais certaines applis (400) ont parfois plus de 10 serveurs ... ce serait des heures et des heures d'usines à Gaz avec cette formule ;)
Stéphane
Re,
Si tu pouvais expliquer pourquoi 4 pour A (alors que A n'est présent que sur 2 lignes) ainsi que les autres résultats stp.
On a l'impression que c'est la 1ère lettre dans la colonne D, mais elle s'appelle serveurs (?)
eric
PS: et 'incidents' c'est un n° (vu que tu as mis de 1 à 9) ou une quantité ?
Si tu pouvais expliquer pourquoi 4 pour A (alors que A n'est présent que sur 2 lignes) ainsi que les autres résultats stp.
On a l'impression que c'est la 1ère lettre dans la colonne D, mais elle s'appelle serveurs (?)
eric
PS: et 'incidents' c'est un n° (vu que tu as mis de 1 à 9) ou une quantité ?
alors,
# 4 pour "l'application A" car les serveurs liés à l'application A sont présents sur 4 incidents (ici 4 fois A101, colonne D ; ps: l'application A est représentée par 2 serveurs : A101 et A102)
en effet, en intitulé de colonne, j'aurais dû te précider Qté ... Serveurs (from liste incidents et vis-à-vis de l'app A)
# oui, c'est bien un numéro, pas une quantité.
merci
# 4 pour "l'application A" car les serveurs liés à l'application A sont présents sur 4 incidents (ici 4 fois A101, colonne D ; ps: l'application A est représentée par 2 serveurs : A101 et A102)
en effet, en intitulé de colonne, j'aurais dû te précider Qté ... Serveurs (from liste incidents et vis-à-vis de l'app A)
# oui, c'est bien un numéro, pas une quantité.
merci
Qui ne dit mot consent....
Une fonction personnalisée à mettre dans un module standard.
S'utilise comme une autre fonction native d'excel.
Syntaxe : =nbIncidents(Appli, plage BaseDeDonnées, plage Extraction)
Paramètres :
Appli : nom de l'application
plage BaseDeDonnées : équivalences Applis/Serveurs sur 2 colonnes
plage Extraction : liste des serveurs ayant généré des incidents sur 1 colonne
ex : =nbIncidents(G3;$A$3:$B$11;$E$3:$E$11)
J'ai scindé en 2 fonctions des fois que la 2nde t'intéresse : lister les serveurs pour une appli.
Syntaxe : =listeServeurs(Appli, BaseDeDonnées)
Paramètres : idem au-dessus
Ex : =listeServeurs(G3;$A$3:$B$11)
Retour : A101-A102
fichier exemple : https://www.cjoint.com/?BJrtjLeKkdC
code :
eric
Une fonction personnalisée à mettre dans un module standard.
S'utilise comme une autre fonction native d'excel.
Syntaxe : =nbIncidents(Appli, plage BaseDeDonnées, plage Extraction)
Paramètres :
Appli : nom de l'application
plage BaseDeDonnées : équivalences Applis/Serveurs sur 2 colonnes
plage Extraction : liste des serveurs ayant généré des incidents sur 1 colonne
ex : =nbIncidents(G3;$A$3:$B$11;$E$3:$E$11)
J'ai scindé en 2 fonctions des fois que la 2nde t'intéresse : lister les serveurs pour une appli.
Syntaxe : =listeServeurs(Appli, BaseDeDonnées)
Paramètres : idem au-dessus
Ex : =listeServeurs(G3;$A$3:$B$11)
Retour : A101-A102
fichier exemple : https://www.cjoint.com/?BJrtjLeKkdC
code :
Function nbIncidents(Appli As String, BaseDeDonnées As Range, Extraction As Range) As Long
Dim serveurs As Variant, lig As Long, i As Long
If Extraction.Columns.Count <> 1 Then
nbIncidents = CVErr(xlErrValue)
Exit Function
End If
serveurs = Split(listeServeurs(Appli, BaseDeDonnées), "-")
For lig = 1 To Extraction.Rows.Count
For i = 0 To UBound(serveurs)
If Extraction.Cells(lig, 1) = serveurs(i) Then
nbIncidents = nbIncidents + 1
Exit For
End If
Next i
Next lig
End Function
Function listeServeurs(Appli As String, BaseDeDonnées As Range) As String
Dim lig As Long
If BaseDeDonnées.Columns.Count <> 2 Then
listeServeurs = "Err : La plage 'BaseDeDonnées' doit avoir 2 colonnes."
Exit Function
End If
For lig = 1 To BaseDeDonnées.Rows.Count
If BaseDeDonnées.Cells(lig, 1) = Appli Then listeServeurs = listeServeurs & "-" & BaseDeDonnées.Cells(lig, 2)
Next lig
listeServeurs = Mid(listeServeurs, 2)
End Function
eric
Si je n'ouvre pas l'exemple pour éviter toute référence externe, alors ça ne marche pas. Je ne comprends pas pourquoi dans la 1ère fonction il est fait référence à des éléments dont je n'ai pas besoin et qui font planter la fonction (deboggeur)
? listeServeurs (ligne 8) --> aucune utilité, mais comme absent sur mon fichier de travail final, il n'aime pas ... en + c'est le bonus, pourquoi y faire appel ici ? (fonction nbIncidents)
n'étant pas développeur .. je coince :(
ps: si je laisse ouvert ton exemple, mon vrai fichier de travail y pompe les fonctions et ça marche étrangement ... mais je veux implémenter ton code sans cela.
source :
Function nbIncidents(Appli As String, BaseDeDonnées As Range, Extraction As Range) As Long
Dim serveurs As Variant, lig As Long, i As Long
If Extraction.Columns.Count <> 1 Then
nbIncidents = CVErr(xlErrValue)
Exit Function
End If
serveurs = Split(listeServeurs(Appli, BaseDeDonnées), "-")
For lig = 1 To Extraction.Rows.Count
For i = 0 To UBound(serveurs)
If Extraction.Cells(lig, 1) = serveurs(i) Then
nbIncidents = nbIncidents + 1
Exit For
End If
Next i
Next lig
End Function
? listeServeurs (ligne 8) --> aucune utilité, mais comme absent sur mon fichier de travail final, il n'aime pas ... en + c'est le bonus, pourquoi y faire appel ici ? (fonction nbIncidents)
n'étant pas développeur .. je coince :(
ps: si je laisse ouvert ton exemple, mon vrai fichier de travail y pompe les fonctions et ça marche étrangement ... mais je veux implémenter ton code sans cela.
source :
Function nbIncidents(Appli As String, BaseDeDonnées As Range, Extraction As Range) As Long
Dim serveurs As Variant, lig As Long, i As Long
If Extraction.Columns.Count <> 1 Then
nbIncidents = CVErr(xlErrValue)
Exit Function
End If
serveurs = Split(listeServeurs(Appli, BaseDeDonnées), "-")
For lig = 1 To Extraction.Rows.Count
For i = 0 To UBound(serveurs)
If Extraction.Cells(lig, 1) = serveurs(i) Then
nbIncidents = nbIncidents + 1
Exit For
End If
Next i
Next lig
End Function
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour (ça ne mange pas de pain...),
A vrai dire je n'aime pas trop le ton que tu emploies.
Si tu n'ouvres pas un fichier avec la fonction personnalisée et que tu ne l'as copiée pas dans ton fichier ça ne marche pas, c'est normal...
Je ne comprends pas pourquoi dans la 1ère fonction il est fait référence à des éléments dont je n'ai pas besoin
Ben si, tel que tu l'as expliqué la fonction a besoin de 3 paramètres en entrée.
A toi d'y mettre les bonnes valeurs ou plages.
listeServeurs (ligne 8) --> aucune utilité .... en + c'est le bonus, pourquoi y faire appel ici ?
Si tu sais lire j'ai écris : J'ai scindé en 2 fonctions des fois que la 2nde t'intéresse
Si tu n'en as pas l'utilité tu ne l'utilises pas, c'est tout.
C'était un exemple pour te montrer.
Et pareil que l'autre fonction, si tu ne mets pas les bons paramètres ça ne marchera pas.
Et ça sera ma dernière contribution dans ce fil, pas envie du tout de passer du temps à faire évoluer, blinder et sécuriser la fonction si c'est pour me faire eng... ensuite.
Tu as l'essentiel, ça marche très bien sur l'exemple, à toi de l'améliorer comme tu veux.
Tu as le droit de me dire merci pour ces dernières explications.
eric
edit : et pense à te remettre en cause :
1) est-ce que j'ai tout dit et tout bien expliqué ? Bref, le cahier des charges était-il complet ?
Sur le tableau que tu as fourni je note que ça marche très bien. Donc ramène-toi dans les conditions que tu as demandé.
2) est-ce que j'utilise correctement ce qu'on me propose ?
Quoiqu'il en soit, même si bug il y a, ta façon de dire c'est quoi cette m.... est très désagréable. Tu n'as pas payé pour t'autoriser ça.
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
A vrai dire je n'aime pas trop le ton que tu emploies.
Si tu n'ouvres pas un fichier avec la fonction personnalisée et que tu ne l'as copiée pas dans ton fichier ça ne marche pas, c'est normal...
Je ne comprends pas pourquoi dans la 1ère fonction il est fait référence à des éléments dont je n'ai pas besoin
Ben si, tel que tu l'as expliqué la fonction a besoin de 3 paramètres en entrée.
A toi d'y mettre les bonnes valeurs ou plages.
listeServeurs (ligne 8) --> aucune utilité .... en + c'est le bonus, pourquoi y faire appel ici ?
Si tu sais lire j'ai écris : J'ai scindé en 2 fonctions des fois que la 2nde t'intéresse
Si tu n'en as pas l'utilité tu ne l'utilises pas, c'est tout.
C'était un exemple pour te montrer.
Et pareil que l'autre fonction, si tu ne mets pas les bons paramètres ça ne marchera pas.
Et ça sera ma dernière contribution dans ce fil, pas envie du tout de passer du temps à faire évoluer, blinder et sécuriser la fonction si c'est pour me faire eng... ensuite.
Tu as l'essentiel, ça marche très bien sur l'exemple, à toi de l'améliorer comme tu veux.
Tu as le droit de me dire merci pour ces dernières explications.
eric
edit : et pense à te remettre en cause :
1) est-ce que j'ai tout dit et tout bien expliqué ? Bref, le cahier des charges était-il complet ?
Sur le tableau que tu as fourni je note que ça marche très bien. Donc ramène-toi dans les conditions que tu as demandé.
2) est-ce que j'utilise correctement ce qu'on me propose ?
Quoiqu'il en soit, même si bug il y a, ta façon de dire c'est quoi cette m.... est très désagréable. Tu n'as pas payé pour t'autoriser ça.
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Cher Eric, je suis TOUT 0 FAIT navré de t'avoir laissé une telle impression ... mais à me relire, je ne vois absolument rien de mal poli, ne serait-ce un seul adjectif innaproprié ? ... alors encore navré, mais je ne comprends pas ta réaction, je suis scotché béat devant l'écran. : N'aurais-tu pas été contrarié par ailleurs ? car aucune logique dans tes propos à mon égard :( ~
# pour le Bonjour, ok mais après je ne vais pas le mettre à chaque début de post sur le même sujet, mon 1er mot sur ce post était Bonjour, tu peux le vérifier si tu veux, ensuite ça serait peu fluide à lire pour les googlers en rech de Soluces.
# Merci : ça aussi déjà fait et je peux le réitérer, je ne suis pas avare de ce côté là ... Ctrl-F friendly.
Voilà, je suis très agacé par ta réaction, à peu près autant que par la gratitude que j'avais de ton aide, mon seul défaut est de m'être senti peu capable de maîtriser ce Vba et c'est juste ça qui transparait dans mes dernières questions ... dépit envers moi-même, rien d'autre, vraiment.
alors Merci pour tout tes apports, je vais creuser le reste seul (l'urgence m'a fais passer par les NB.SI+NB.SI mais c'est une horreur pour la suite).
Un petit conseil à mon tour : attention à vouloir tout (et mal) interpréter, on peut aller vers de graves déconvenue dans la vie (il faut mieux répondre 24H après, c'est une règle cf les mails "chauds" en entreprise, c'est l'Expérience qui parle ;-) ça te servira et tu me remercieras à ton tour).
# pour le Bonjour, ok mais après je ne vais pas le mettre à chaque début de post sur le même sujet, mon 1er mot sur ce post était Bonjour, tu peux le vérifier si tu veux, ensuite ça serait peu fluide à lire pour les googlers en rech de Soluces.
# Merci : ça aussi déjà fait et je peux le réitérer, je ne suis pas avare de ce côté là ... Ctrl-F friendly.
Voilà, je suis très agacé par ta réaction, à peu près autant que par la gratitude que j'avais de ton aide, mon seul défaut est de m'être senti peu capable de maîtriser ce Vba et c'est juste ça qui transparait dans mes dernières questions ... dépit envers moi-même, rien d'autre, vraiment.
alors Merci pour tout tes apports, je vais creuser le reste seul (l'urgence m'a fais passer par les NB.SI+NB.SI mais c'est une horreur pour la suite).
Un petit conseil à mon tour : attention à vouloir tout (et mal) interpréter, on peut aller vers de graves déconvenue dans la vie (il faut mieux répondre 24H après, c'est une règle cf les mails "chauds" en entreprise, c'est l'Expérience qui parle ;-) ça te servira et tu me remercieras à ton tour).
Bonjour
Une solution pas trés compliquée
https://www.cjoint.com/?3JstOCJzfwj
Une solution pas trés compliquée
https://www.cjoint.com/?3JstOCJzfwj