Somme si
Résolu
laryburd
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
laryburd Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
laryburd Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
Voici mon problème.
En J2 par exemple; j'aimerai avoir le nombre de cellules numériques restantes après la cellule E2.
(E2 étant considérée comme du texte puisqu'elle contient le terme "/".)
Tout en ne comptant pas les cellules G2 et I2 car les cellules G1 et I1 sont vides.
Le signe "/" peut se trouver aussi bien en cellule A2 que I9, il peut également ne pas y en avoir du tout ou encore en avoir jusqu'a 9 maxi par jour.
Puisque les 9 cellules concernent une journée.
Puis le lendemain 9 autres etc....
Ce qu'il me faut surtout c'est savoir le total de cellules contenant des valeurs numériques après la dernière valeur Texte de la journée.
Tout en ne tenant pas compte des cellules G2 et I2 puisque G1 et I1 sont vides.
Ce qui me donnera un Ecart pour le lendemain.
Esemple; en fin de journée, je suis dans ce cas avec un écart 2 donc le lendemain matin mon tableau affiche 2 pour "Ecart en court". Grace à une macro.
Dans ce cas il est facile de voir à l'oeil que c'est "2".
Mais le soucis c'est que je dois le faire chaque jour à la main pour plus de 300 tableaux.
Avec évidemment un grand risque d'erreur.
Les valeurs de ces tableaux changent de place chaque jour mais restent toujours sous cette forme.
A savoir : les nombres dans la ligne 1 et les valeurs correspondantes en ligne2.
Si quelqu'un a la solution, je le remercie d'avance
Laurent
A B C D E F G H I J 1 105 208 516 609 805 2 0 1,2 0 0 2,4/1,2 1,3 0 1,5 0
En J2 par exemple; j'aimerai avoir le nombre de cellules numériques restantes après la cellule E2.
(E2 étant considérée comme du texte puisqu'elle contient le terme "/".)
Tout en ne comptant pas les cellules G2 et I2 car les cellules G1 et I1 sont vides.
Le signe "/" peut se trouver aussi bien en cellule A2 que I9, il peut également ne pas y en avoir du tout ou encore en avoir jusqu'a 9 maxi par jour.
Puisque les 9 cellules concernent une journée.
Puis le lendemain 9 autres etc....
Ce qu'il me faut surtout c'est savoir le total de cellules contenant des valeurs numériques après la dernière valeur Texte de la journée.
Tout en ne tenant pas compte des cellules G2 et I2 puisque G1 et I1 sont vides.
Ce qui me donnera un Ecart pour le lendemain.
Esemple; en fin de journée, je suis dans ce cas avec un écart 2 donc le lendemain matin mon tableau affiche 2 pour "Ecart en court". Grace à une macro.
Dans ce cas il est facile de voir à l'oeil que c'est "2".
Mais le soucis c'est que je dois le faire chaque jour à la main pour plus de 300 tableaux.
Avec évidemment un grand risque d'erreur.
Les valeurs de ces tableaux changent de place chaque jour mais restent toujours sous cette forme.
A savoir : les nombres dans la ligne 1 et les valeurs correspondantes en ligne2.
Si quelqu'un a la solution, je le remercie d'avance
Laurent
A voir également:
- Somme si
- Somme si couleur - Guide
- Formule somme excel colonne - Guide
- Somme en anglais excel - Guide
- Somme excel ne fonctionne pas ✓ - Forum Excel
- Somme si oui ✓ - Forum Excel
12 réponses
bonjour
Si j'ai bien compris ton problème cette fonction devrait le résoudre
Tu peux la mettre dans un module de ton classeur PERSO
et appeler ton calcul dans la cellule souhaitée (J2 dans ton ex)
avec =PERSO.XLS!écart() ou en 2007 =PERSONAL.XLSB!écart()
Si j'ai bien compris ton problème cette fonction devrait le résoudre
Public Function écart() If Application.Caller.Row < 2 Then écart = "erreur de position" Else Dim col As Long, lig As Long écart = 0 lig = Application.Caller.Row For col = Application.Caller.Column - 1 To 1 Step -1 If Not IsNumeric(Cells(lig, col).Value) Then Exit Function If Not IsEmpty(Cells(lig - 1, col).Value) Then écart = écart + 1 Next col End If End Function
Tu peux la mettre dans un module de ton classeur PERSO
et appeler ton calcul dans la cellule souhaitée (J2 dans ton ex)
avec =PERSO.XLS!écart() ou en 2007 =PERSONAL.XLSB!écart()
Merci pour l'aide mais cela ne fonctionne pas car mon fichier se nome 003645.xls et est in crémenté de 1 chaque jour.
ex demain il s'appellera 003646.xls etc...
J'ai aussi essayé de modifier le "/" de place et il donne toujours 2.
Je sais qu'il existe une fonction simple que je peux mettre en J2 mais je n'arrive pas a la faire fonctionner.
Celle qui m'avait été donnée en 2008 était celle -ci
=SOMME(SI(NON(ESTVIDE(DECALER(A1:I1;0;col_txt;1;10-col_txt)) );1))
Mais je n'arrive à rien avec .
Je ne sais plus si s'était une matricielle.
Laurent
ex demain il s'appellera 003646.xls etc...
J'ai aussi essayé de modifier le "/" de place et il donne toujours 2.
Je sais qu'il existe une fonction simple que je peux mettre en J2 mais je n'arrive pas a la faire fonctionner.
Celle qui m'avait été donnée en 2008 était celle -ci
=SOMME(SI(NON(ESTVIDE(DECALER(A1:I1;0;col_txt;1;10-col_txt)) );1))
Mais je n'arrive à rien avec .
Je ne sais plus si s'était une matricielle.
Laurent
Bonjour,
Il me semble que la fonction de gbinforme fonctionne correctement.
Sans comprendre le but que vous voulez atteindre, je ne peux rien de plus.
Désolé.
Il me semble que la fonction de gbinforme fonctionne correctement.
Sans comprendre le but que vous voulez atteindre, je ne peux rien de plus.
Désolé.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai bien mis sa fonction dans un module de mon fichier et copier la ligne " =PERSO.XLS!écart() " dans la cellule J2.
Mais est ce la bonne manip?
Je sais appeler une macro mais pour appeler un module dans une cellule???
Laurent
Mais est ce la bonne manip?
Je sais appeler une macro mais pour appeler un module dans une cellule???
Laurent
et en remplaçant SOMME(SI( par SOMME.SI( ?
bonjour à tous les intervenants,
J'ai bien mis sa fonction dans un module de mon fichier et copier la ligne "
Ce n'est pas tout à fait ce que je t'ai dit : "Tu peux la mettre dans un module de ton classeur PERSO "
Si tu n'as pas de Perso.xls : c'est facile :
- tu ouvres un nouveau fichier
- tu enregistres une macro
en prenant soin de sélectionner "classeur de macros personnelles"
dans la liste déroulante "Enregistrer la macro dans" de la boîte de dialogue "Enregistrer une macro".
- Tu sélectionnes 2-3 cellules
- tu arrêtes l'enregistrement
- tu fermes ton classeur sans enregistrer
- tu fermes excel et tu sauvegardes ton classeur personnel
- tu ouvres excel et tu copies la fonction dans le module du classeur PERSO
- tu mets la fonction où tu veux dans tes différents classeurs et elle fonctionne.
avec =PERSO.XLS!écart() ou en 2007 =PERSONAL.XLSB!écart()
Par exemple en J2 J7 et J11 de ton exemple
J'ai bien mis sa fonction dans un module de mon fichier et copier la ligne "
Ce n'est pas tout à fait ce que je t'ai dit : "Tu peux la mettre dans un module de ton classeur PERSO "
Si tu n'as pas de Perso.xls : c'est facile :
- tu ouvres un nouveau fichier
- tu enregistres une macro
en prenant soin de sélectionner "classeur de macros personnelles"
dans la liste déroulante "Enregistrer la macro dans" de la boîte de dialogue "Enregistrer une macro".
- Tu sélectionnes 2-3 cellules
- tu arrêtes l'enregistrement
- tu fermes ton classeur sans enregistrer
- tu fermes excel et tu sauvegardes ton classeur personnel
- tu ouvres excel et tu copies la fonction dans le module du classeur PERSO
- tu mets la fonction où tu veux dans tes différents classeurs et elle fonctionne.
avec =PERSO.XLS!écart() ou en 2007 =PERSONAL.XLSB!écart()
Par exemple en J2 J7 et J11 de ton exemple
Bonjour,
J'ai essayé exactement comme tu l'as expliqué, mais lorsque je change un rapport sous un des N°, la cellule en J n'évolue pas.
Par contre si j'insère une colonne après la colonne J, donc en H ou ailleurs, et que je la supprime ensuite, j'ai remarqué que ce qu'il y a dans la cellule en colonne J a évolué, pourquoi?
Laurent
J'ai essayé exactement comme tu l'as expliqué, mais lorsque je change un rapport sous un des N°, la cellule en J n'évolue pas.
Par contre si j'insère une colonne après la colonne J, donc en H ou ailleurs, et que je la supprime ensuite, j'ai remarqué que ce qu'il y a dans la cellule en colonne J a évolué, pourquoi?
Laurent
Bonjour
une petite solution pour le fun au cas où avec une ligne suplémentaire, et uniquement si tous les formats texte comprennent un /
en suivant le tableau
_Insérer une nouvelle colonne A pour décaler les tableaux
_en B4 la formule à tirer jusqu'en J4
=SI(OU(B2=0;B3="");0;SI(NB.SI(B3:$J3;"*/*")=0;MAX($A4:A4)+1;0))
_en K3
=MAX(B4:J4) donnera sauf erreur le résultat recherché. Je répéte à condition que le slash soit dans chaque cellule texte.A redcopier sous chaque tableau.
Crdlmnt
une petite solution pour le fun au cas où avec une ligne suplémentaire, et uniquement si tous les formats texte comprennent un /
en suivant le tableau
_Insérer une nouvelle colonne A pour décaler les tableaux
_en B4 la formule à tirer jusqu'en J4
=SI(OU(B2=0;B3="");0;SI(NB.SI(B3:$J3;"*/*")=0;MAX($A4:A4)+1;0))
_en K3
=MAX(B4:J4) donnera sauf erreur le résultat recherché. Je répéte à condition que le slash soit dans chaque cellule texte.A redcopier sous chaque tableau.
Crdlmnt
Merci, cela fonctionne, mais le problème c'est que dans mon fichier d'origine (qui est beaucoup plus complexe), je ne peux pas insérer une nouvelle colonne en A.
Cette fonction devra être coller plus loin à droite dans ma feuille d'origine, en colonne "CA" .
Que dois-je modifier dans la fonction pour y arriver?
Laurent
Cette fonction devra être coller plus loin à droite dans ma feuille d'origine, en colonne "CA" .
Que dois-je modifier dans la fonction pour y arriver?
Laurent
Re
Ca devrait s'arrangter avec ça:
en B4:
=SI(OU($B2=0;$B3="");0;SI(NB.SI(B3:$J3;"*/*")>0;0;1))
et modifier la formule en C4 dans l'item max où il faut remplacer MAX($A4:A4) par MAX($B4:B4)
et tirez de B en J
ceci évite de faire référence à une colonne en amont du champ concerné par MAX
Crdlmnt
Ca devrait s'arrangter avec ça:
en B4:
=SI(OU($B2=0;$B3="");0;SI(NB.SI(B3:$J3;"*/*")>0;0;1))
et modifier la formule en C4 dans l'item max où il faut remplacer MAX($A4:A4) par MAX($B4:B4)
et tirez de B en J
ceci évite de faire référence à une colonne en amont du champ concerné par MAX
Crdlmnt
Bonjour.
Autre approche :
* En B1 la formule =SI(ESTTEXTE(B3);COLONNE();A1) à recopier jusqu'en I1
* En J2 la formule =SI(ESTTEXTE(I3);0;NB.SI(DECALER(A2;0;MAX(B1:I1);;9-MAX(B1:I1));">0"))
Autre approche :
* En B1 la formule =SI(ESTTEXTE(B3);COLONNE();A1) à recopier jusqu'en I1
* En J2 la formule =SI(ESTTEXTE(I3);0;NB.SI(DECALER(A2;0;MAX(B1:I1);;9-MAX(B1:I1));">0"))
Et le "/" peu se trouver n'importe ou sur la ligne 2.
Je dois savoir combien il me reste de cellules nom texte après la cellule E2, sachant que le "/" peu se trouver n'importe ou sur la ligne 2.
Et surtout ne pas comptabiliser les cellules G2 et I2 car G1 et I1 sont vident.
Laurent