Somme si

Résolu/Fermé
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010 - 21 févr. 2010 à 19:32
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010 - 22 févr. 2010 à 18:00
Voici mon problème.


      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

12 réponses

Le Pingou Messages postés 12222 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 3 décembre 2024 1 452
21 févr. 2010 à 21:24
Bonjour,
En [J2] taper : =NB.SI(F2:I2;0)
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
21 févr. 2010 à 22:38
Merci d'avoir répondu, mais le problème de cette fonction c'est qu'elle ne tient pas compte des cellules vides.
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
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 711
21 févr. 2010 à 22:16
bonjour

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()
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
21 févr. 2010 à 23:11
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
0
Le Pingou Messages postés 12222 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 3 décembre 2024 1 452
21 févr. 2010 à 23:32
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é.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
21 févr. 2010 à 23:59
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
0
Raymond PENTIER Messages postés 58745 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 3 décembre 2024 17 248
22 févr. 2010 à 01:22
et en remplaçant SOMME(SI( par SOMME.SI( ?
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
22 févr. 2010 à 01:49
Merci de vous intéresser à mon problème mais j'ai essayé aussi votre proposition et çà ne marche pas non plus.
Et pourtant la fonction proposée fonctionnait en 2008 avec excel 2003.
J'ai toujours excel 2003 et çà ne marche plus???
Laurent
0
Raymond PENTIER Messages postés 58745 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 3 décembre 2024 17 248
22 févr. 2010 à 02:02
Tant qu'on n'aura pas ton fichier, il sera difficile de t'aider davantage ...
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
22 févr. 2010 à 02:27
En voici un exemple.
Laurent

http://www.cijoint.fr/cjlink.php?file=cj201002/cijtLxRj2b.xls
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 711
22 févr. 2010 à 08:35
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
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
22 févr. 2010 à 10:17
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
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 416
22 févr. 2010 à 10:13
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
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
22 févr. 2010 à 10:34
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
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 416
22 févr. 2010 à 11:12
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
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
22 févr. 2010 à 17:41
Merci je vais essayer d'adapter cette fonction a mon fichier.
Laurent
0
Raymond PENTIER Messages postés 58745 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 3 décembre 2024 17 248
22 févr. 2010 à 13:10
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"))
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
22 févr. 2010 à 17:43
Merci je vais essayer d'adapter cette fonction a mon fichier.
Mais il semble que si je rajoute du texte dans certaines cellules lorsque la cellule supérieure est vide il la prend en compte hors il ne faut pas.
Laurent
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 416
22 févr. 2010 à 17:51
Re
ci joint votre fichier avec mes propositions.J'ai rajouté , en rouge,quelques cas que vous évoquez au message précédent. Dites moi ce qui ne colle pas, je n'ai peut être pas tout compris.
Crdlmnt

http://www.cijoint.fr/cjlink.php?file=cj201002/cijthN9QvK.xls
0
laryburd Messages postés 22 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 février 2010
22 févr. 2010 à 18:00
Ce que vous avez fais est excellent.
Vous m'avez apporté la solution.
Merci encore.
Laurent
0