Compter des series de Cellules Sur Excel

navta12 - 17 févr. 2013 à 03:01
 navta12 - 28 juin 2013 à 04:04
Bonjour…je cherche de l’aide s’il vous plais



J’ais besoin de trouver une fonction en Excel ou un programme en VBA pour compter le suivant exemple en feuille excel:

F
Jour mois 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Monsieur 1 : X X X X X X X X X X X X X X X X X X X D D D D X X X X X X X X
Monsieur 2 : D D X X X X X X X X X X X X X X X X X X X X X X X X X X X X X


Résultats :
Monsieur 1 : 7 –
13 - 13
30

Monsieur 2 : 9
15 – 15
21 – 21
27
F 23



RESULTAT dois afficher dans une cellule le jour ou la série arrive a compter 7 X et afficher le deuxième jour ou il compte 6 jour successif a partir de la première X, ne pas compter les D ou autre et recommencer a compter la série de X.

Exemple :
Résultat Monsieur 1 : dois afficher dans une cellule de résultat, le numéro 7 dans deux autres cellule le numéro 13 deux fois, et recommencer a compter a partir du jour 24 les X afficher le numéro 30 une fois dans une cellule.

Monsieur 2 : résultat numéro 9 – 15 afficher dans deux cellules – 21 afficher dans deux cellules – 27 afficher dans deux cellules , 23 jour Ferrié dans une cellule


Quelqu’un a un exercice ressemblent ou un peut d’aide

Merci A bientôt.

12 réponses

pour l'espace decalé:
Janvier Février
1 2 3 4 5 6 7 8 9 .... 31 1 2 3 4 5 .. 28
M1:X X X X X X X X X .... X X D D D X .. X
M2:D D X X X X X X X .... X X X X X X .. X
M1: jour 7 - 13 -13 30
M2: jour 9 - 15 - 15 - 21 -21 - 27 F 23 comme exemple,

j’espère que quelqu’un ma compris,

merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 févr. 2013 à 08:07
Bonjour,
Je ne veux pas tout te faire, car trop simple.
J'appelle simplement ton attention sur le fait que cela revient à traiter une chaîne de caractères, que tu peux, pour chaque "Monsieur", obtenir par concaténation.
Regarde dès lors ce que ferait ceci :
Dim pos As Integer, ou As Integer, ce_monsieur As String, msg As String, cherche As String
ce_monsieur = "AXWXXcXXXXXXXXXAXXXXXXXB"
cherche = "XXXXXXX"
ou = 1
msg = "résultat(s) pour ce monsieur "
Do While InStr(ou, ce_monsieur, cherche) > 0
  pos = InStr(ou, ce_monsieur, cherche)
  msg = msg & vbCrLf & pos
  ou = pos + Len(cherche) + 1
Loop
MsgBox msg

Lance, analyse, comprends et ===>> travaille pour adapter à ton appli comme tu l'entends.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Merci Ucfoutu,

A vrais dire je ne suis pas un expert comme vous en VBA, juste je commence...,

pour

la variable
cherche = "XXXXXXX" //elle devrais chercher les concaténation.

ça m'affiche le premier numéro et non le septième comme je le veus.

ex: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX //(31 "X")
ça devrais me donner: 7-13-19-25-31
avec ton algorithme ça me donne:1-9-17-25
il y as remède?

Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
17 févr. 2013 à 20:48
1) ce n'est pas un algorithme, que je t'ai montré, mais un exemple de traitement !
dans cet exemple, je recense le rang de début de sous-chaînes
2) Toi, tu cherches un autre rang (celui de fin de sous-chaînes) ? === >> après avoir analysé et compris mon exemple, tu modifies les valeurs ou et pos en fonction de ce que tu veux
Il est maintenant vrai que si tu n'analyse pas et ne comprends pas l'exemple, tu n'y parviendras sans aucun doute pas, sauf à recevoir un code tout cuit ... et ce n'est ni la vocation de ce forum, ni ma tasse de thé !
Bonne analyse et compréhension.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

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

Posez votre question
Quelqu'un peu me guider:

>>>>de la: Range("A1:AD1").Select
je dois d'une forme selectionner les cellules qui ont des "X" (une par cellule) 7 en total comment compter 7 cellules qui ont la valeur X et les garder dans une variable, pour pouvoir les manipuller oú indiquer ?

ca marche pas avec les chaînes de caractères il faut que ca soit avec les cellules

Help Please
0
Utilisateur anonyme
18 mai 2013 à 04:30
Bonjour,
ca marche pas avec les chaînes de caractères il faut que ca soit avec les cellules


Et que contiennent les cellules?
Peut-être des chaînes de caractères (leur valeur ou texte)

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Sur un ligne de A1 a AD1 (30 cellules) j'ais dans chaque cellule une lettre X ou une lettre D, il peut seulement avoir une X o une D par cellule rien de plus, ej : A1=X, B1=X, C1=X, D1=X, E1=X, F1=X, G1=X, H1=D, I1=X, J1=X, K1=D, L1=D….. etc…, l’idée et de voir si il y a chaque 7 cellules continue de X, le programme dois m’indiquer le dernier jour ou se produit l’événement, dans l’exemple antérieur ça devrais m’indiquer G1 le 7° jour et me le renvoyer ver une cellule que je puisse voir ej: B1=7 afficher. C’est dans le cadre de mon travaille, j’ais a charge l’assistance d’un groupe de travailleur (120 aprox), comme ils travaillent en forme continue il ne peuvent pas reposer le dimanche, c’est pour cela qu’il doivent être comptabiliser, pour après pour pouvoir leur retourner le jour dans le prochain moi ou plus tard. (si vous voulais je peu vous envoyer un excel de l’exercice, données mois votre email, merci), actuellement je le fais manuellement, mais je sais qu’il peu avoir un autre forme de le faire, Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2013 à 07:19
Que veux-tu qu'on te dise sinon cela :
1) Dans l'exemple que je t'ai fait plus haut, je t'avais pourtant dit ce qui devrait être simple à comprendre ! Pour mémoire :
Je ne veux pas tout te faire, car trop simple.
J'appelle simplement ton attention sur le fait que cela revient à traiter une chaîne de caractères, que tu peux, pour chaque "Monsieur", obtenir par concaténation.

Et tu ne vois pas ce qu'est cette concaténation ? (celle des valeurs de tes 30 cellules) ?
2) Et tu écris :
ça m'affiche le premier numéro et non le septième comme je le veus.

Tu n'est pas capable de comprendre que si tu as le rang du 1er, tu as du même coup celui du dernier ? Tu ne vois vraiment pas comment ?
et :
3)
ca marche pas avec les chaînes de caractères il faut que ca soit avec les cellules

Ah bon ! ... Puisque c'est toi qui l'affirmes ! Revoir le point 1, hein ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2013 à 07:33
Ah ... Je viens de faire à l'instant le rapprochement de :
il faut que ca soit avec les cellules

avec :
si vous voulais je peu vous envoyer un excel de l'exercice

Eh bien === >> au boulot, donc, sur ton exercice à faire.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2013 à 07:50
Et enfin : puisque tu nous précises maintenant que tes cellules ne peuvent, chacune, contenir qu'un "X" ou un "D".
Intéresse-toi donc à l'utilisation de la fonction Split (avec "D" comme séparateur) sur la chaîne obtenue par concaténation === >> encore plus facile !
(split de renverra un array. Examine donc ses éléments, qui sont des chaînes de caractères. Ceux de longueur supérieure ou égale à 7 t'intéressent, non ? - et ceux de longueur éventuellement supérieure ou égale à un multiple de 7 encore plus, non ?)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Salut Ucfoutu, merci pour ta réponse: j'ais réussi a avoir quelque résultat, ça marche si j'ais que des X suivit, mais quand il y a une D au milieu, ça ne compte plus et ça s’arrête, es ce que tu m'aider a créer une variable pour réinitialiser une autre variable compteur pour pouvoir repartir après la D et compter le nombre de X qui suis, j’envois le script :

sur les cellules excel: de A1 a AD1 (1,2,3...,30)
de A2 a AD2 (X,X,X,...,X) ça marche mais quand:
de A2 a AD2 (X,X,X,D,X,...,X) ça ne marche plus

Macro VBA:

Sub Programme_Principal()
Dim Num_Col As Integer
Dim Col_Fin As Integer
Num_Col = 1
While Cells(2, Num_Col) = "X"
Col_Fin = Num_Col
While Cells(2, Col_Fin) = Cells(2, Col_Fin + 1)
Col_Fin = Col_Fin + 1
If Col_Fin = Count_X + 7 Then
Cells(2, 33) = Cells(1, Col_Fin)
End If
If Col_Fin = 13 Then
Cells(2, 34) = Cells(1, Col_Fin)
Cells(2, 35) = Cells(1, Col_Fin)
End If
If Col_Fin = 19 Then
Cells(2, 36) = Cells(1, Col_Fin)
Cells(2, 37) = Cells(1, Col_Fin)
End If
If Col_Fin = 25 Then
Cells(2, 38) = Cells(1, Col_Fin)
Cells(2, 39) = Cells(1, Col_Fin)
End If
Wend
Num_Col = Col_Fin + 1
Wend
End Sub
0
Sub Programme_Principal()
Dim Num_Col As Integer
Dim Col_Fin As Integer
Num_Col = 1
While Cells(2, Num_Col) = "X"
Col_Fin = Num_Col
While Cells(2, Col_Fin) = Cells(2, Col_Fin + 1)
Col_Fin = Col_Fin + 1
If Col_Fin = 7 Then
Cells(2, 33) = Cells(1, Col_Fin)
End If
If Col_Fin = 13 Then
Cells(2, 34) = Cells(1, Col_Fin)
Cells(2, 35) = Cells(1, Col_Fin)
End If
If Col_Fin = 19 Then
Cells(2, 36) = Cells(1, Col_Fin)
Cells(2, 37) = Cells(1, Col_Fin)
End If
If Col_Fin = 25 Then
Cells(2, 38) = Cells(1, Col_Fin)
Cells(2, 39) = Cells(1, Col_Fin)
End If
Wend
Num_Col = Col_Fin + 1
Wend
End Sub
0
Rejoignez-nous