Compté le nombre de ligne entre deux trait

Bonjour

j'aurai besoin d'aide sur un fichier

je voudrais calculer le nombre de ligne entre deux trait une macro ou formule

dans mon example il y a deux colonnes week et day

en A2 à A22 c'est la semaine 15 donc le resultat que je souhaite est 21

la semaine 16 il y a 23

la semaine 17 il y a 28 aussi mais on peux avoir plus....

ideal c'est avoir une autre feuille ici feuil2

En C1le resultalt de la semaine 15 ici 21

En D1 le debut de la semaine ici A2

en E1 la fin de la semaine icic A22

en C2 le resultalt de la semaine 16 ici 23

En D2 le debut de la semaine ici A23

en E2 la fin de la semaine icic A45

.......

je vous en remercie à l'avance.

12classeur1.xlsx (16.82 Ko)

......

2classeur1.xlsx (14.39 Ko)

Bonjour,

Un test

7classeur1-10.xlsm (19.42 Ko)

Bonjour,

Une autre possibilité sans VB. La fin du tableau des semaines doit être matérialisée par "FIN" dans la colonne "day" de la dernière semaine renseignée.

8classeur1-2.xlsx (12.61 Ko)

Bonjour M12 et Cylfo

Merci ca fonctionne tres bien.

mais voila, mon probleme , je ne l''ai pas signalé c'est que le Lundi n'est pas tout le temps juste apres le trait on peut y avoir des lignes entre le trait de debut de semaine

je vous ai renvoyer les fichiers en mettant bien des lignes en plus pour les lundi au dessus.

mais l'idée est tres bonne

est il possible de travailler avec le Trait et non avec le Lundi

merci

1classeur1-10.xlsm (20.18 Ko)
3classeur1-2.xlsx (12.40 Ko)
2classeur1-10.xlsm (29.32 Ko)

bonjour, il faut vérifier s'il y a une ligne horizontale et cela n'est pas possible avec des formules.

Bonjour

merci à vous deux , si quelque peut trouver une solution je suis preneur.

pour l'instant, je vais garde votre idee.

sinon j'ai réflechie dans mon projet

dans le meme principe

j'ai rajoutér une feuille3 ou on retrouve

week n week n+1 ....

mais sous le week n

il y a deux chiffre le premier c'est dans la semaine 15 c'est tous les bulk ici il y en a 4 et ensuite je fait la somme

donc ici le premier bulk est le 154126 et la somme 77 000

l 'idée , je voudrais que la feuille 3 se mette a jours en automatiques

sachant que week n c'est la semaine en cours

je vous en remerci a l'avance

3classeur2.xlsm (28.77 Ko)

re,

ce que vous demandez est différent à ce que vous demandiez au debut.

13classeur2-2.xlsm (35.21 Ko)
Sub Feuil3()
     Dim c     As Range, c3, iMax, F3, Dict, iWeek

     Set F3 = Sheets("Feuil3")
     F3.UsedRange.Offset(1).ClearContents
     Set c3 = F3.Range("B3")

     Set Dict = CreateObject("scripting.dictionary")

     With Feuil1
          iWeek = WorksheetFunction.IsoWeekNum(Date)     'cette semaine
          Set c = .Columns("A").Find(iWeek)     'trouvez-la dans la colonne A
          If c Is Nothing Then
               MsgBox "semaine est introuvable"
          Else
               iMax = .UsedRange.Row + .UsedRange.Rows.Count + 1     'dernière ligne
               Set c = c.End(xlUp)     'trouvez "debut" juste en dessus
               If StrComp(c.Value, "debut", 1) = 0 Then     'correcte, c'est "debut"
                    For i = c.Row To iMax     'boucle ces lignes
                         If IsNumeric(.Cells(i, "A")) And Len(.Cells(i, "A").Value) Then iWeek = .Cells(i, "A")    'valeur numérique en colonne A = numéro de la semaine
                         If Len(.Cells(i, "C").Value) > 0 Then     'bulk <>""
                              Dict(.Cells(i, "C").Value) = Dict(.Cells(i, "C").Value) + .Cells(i, "D").Value     'cumuler qty pour ce "bulk"
                         End If

                         If StrComp(.Cells(i + 1, "A").Value, "debut", 1) = 0 Or i = iMax Then     'prochaine ligne est de nouveau "debut" ou derniere ligne
                              If Dict.Count Then     'il y a des résultats
                                   With c3.Resize(Dict.Count)     'plage pour coller
                                        .Value = Application.Transpose(Dict.keys)     'les différents bulks
                                        .Offset(, 1).Value = Application.Transpose(Dict.items)     'ces qty cumulés
                                   End With
                              End If
                              c3.Offset(-1).Value = "Week " & iWeek     'la semaine
                              Set c3 = c3.Offset(, 2)     'cellule pour la semaine suivante
                              Dict.RemoveAll     'RAZ dictionaire
                         End If
                    Next
               End If
          End If
     End With
End Sub

Bonjour le fil

@Olivcoco, quand vous demandez autre chose que pour la 1ère question,
merci de créer un nouveau sujet avec un nouveau titre SVP

Merci de votre compréhension

Bonjour

excusez moi mais pour moi c 'est le meme sujet.

En faite au debut je pensais recuper les cellules les copier manuellement en feuil 3 puis faire un tableau dynamics

et je me suis dit apres je pourrais tout faire en meme temps et la deuxieme methode est beaucoup mieux pour moi.

Bonjour Bart

votre methode marche tres bien et je vous en remercie.

j'aurai comme meme quelque chose encore à faire . en faite mon planning il est sur 2 ans donc il y a un probleme il trouve le premier 16 ( la semaine en cours ) mais qui est la semaine de l'année derniere donc il bloque

la solution que j'ai trouvé pour l'instant est de supprimer mes numero de semaines avant

l ideal c'est de rechercher soit le deuxieme "16" ou alors rechercher le premier "debut" je pourrais effacer manuellement tous les "debut" qui sont avant

je vous renvoie le fichier il y a deux bouton en haut en i1 c'est la macro pour feuil3

5classeur2-2.xlsm (54.83 Ko)

re,

on cherche la dernière semaine "ISO-week" dans la colonne A, les "debut" ne sont plus nécessaire, on suppose que le lundi précédent à cette semaine (en colonne B) est la première ligne de cette semaine.

6classeur2-2.xlsm (35.23 Ko)

Re,

je pense que vous avez renvoyer la premier version

Pour le Lundi je prefere garder le "debut" parce que le Lundi n'est pas toujours la premiere ligne de cette semaine

Merci

je vous renvoie le fichier

la colonne C est la meme que G et D est la meme que AC

3classeur2-3.xlsm (54.90 Ko)

bizar,

c'est la macro "Feuil3_Bis", l'autre existe encore ! Vous voulez C&D au lieu de G&AC ? (facile à modifier dans la macro, je l'ai indiqué)

6classeur2-3.xlsm (59.56 Ko)

Bonjour

Jje ne prefere pas travailler avec le Lundi .Je prefere garder le "debut" dans la colonne A et je trouve que le principe focntionne bien

Parce que je l'ai dit avant je peux avoir des ligne avant le Lundi et qui compte dans la semaine du lundi.

Mais sinon ca fonctionne bien

Merci

4classeur2-4.xlsm (58.69 Ko)

re,

avec "debut" et s'il manque avec "lundi"

7classeur2-4.xlsm (65.39 Ko)

Bonjour BSAlv

la macro fonctionne tres bien

j'aurai une petite remarque

si je modifie le nom de la feuil1 cela ne fonctionne plus que si il y a un espace dans le texte

example j'ai remplacé Feuil1 de la macro et dans l'onglet le nouveau nom ici Planning G1

et il bloque à la ligne aCol1 = Filter(Evaluate(s), "~", 0) 'tableau avec la ligne et le contenu de toutes les cellules non-vide sans "debut" de la colonne A

il met tout en jaune

parcontre si je ne met pas d'espace PlanningG1 ça fonctionne ( sans l'espace entre Planning et G1)

sinon un grand merci

je check encore mais cela focntionne tres bien

4classeur2-5-1.xlsm (81.41 Ko)

re,

j'utilise maintenant une plage nommé "BART" et "BART1" dans la macro, cela a l'air de fonctionner avec un espace. La première ligne du module est maintenant un variable que vous pouvez utiliser pour le nom de votre feuille.

Bonjour BSAlv

merci je peux utiliser maintenant mes noms de mes feuilles avec des espaces.

je vous en remercie.

je viens de remarque quelques chose

une petite remarque

quand je n 'utilise pas le "debut" c''est bon tout fonctionne il me prendre bien entre les deux "Lundi"

quand j utilise le "debut" il y a une chose qui ne fonctionne pas

example

si il y a un "debut" durant la semaine precedente et plus de "debut" apres

il va prendre deux semaine la semaine precedente et la semaine en cours apres c'est bon

L'idée de faire avec ou sans "debut" je trouve cela pas mal

il faudrait que durant la semaine en cours il recherche d'abort le "debut" et si il y a rien il prend le Lundi

si il y a "debut" c'est "debut" jusqu'au prochain "debut" ou le "Lundi"( si il n y a pas de "debut

si il n y a pas de "debut" il prend que le "Lundi" jusqu'au "Lundi" prochaine

pour info dans la colonne C il y a la date ca peux peut être vous aider.

je vosu en remercie à l'avance

bonjour,

modification de la macro, maintenant on calcule les lignes des dimanches, des lundi et des "débuts" pour chaque semaine. Je pense que la macro est aussi plus lisible.

Const Nom_Feuille = "Planning G1"

Sub Feuil3_Bis()
     Dim c     As Range, c3, iMax, F3, Dict, iDim1, iDim2, iLun1, iLun2, iDeb1, iDeb2, iJour, Dimanche, iSem

     t = Timer
     Set Dict = CreateObject("scripting.dictionary")
     Dict.comparemode = vbTextCompare

     Set F3 = Sheets("Feuil3")
     F3.UsedRange.Offset(1).ClearContents    'RAZ feuille
     Set c3 = F3.Range("B3")                 '1ière cellule pour coller
     Set F1 = Sheets(Nom_Feuille)
     With F1
          With .UsedRange
               lLigne = .Row + .Rows.Count + 1
          End With

          With .Range("A1:AC" & lLigne)
               .Resize(, 1).Name = "BART"
               adates = .Columns(3).Value2
          End With

          iMax = Application.Max(adates)     'date la plus grande de colonne B
          Dimanche = CLng(Date - WorksheetFunction.Weekday(Date, 11))
          For iJour = Dimanche To iMax - 8 Step 7     'boucle des dimanches

               iDim1 = Application.Match(iJour, adates, 0)     'ligne du dimanche de la semaine précédente
               If Not IsNumeric(iDim1) Then MsgBox "problème avec " & Format(iJour, "ddd dd-mm-yy"), vbCritical, "INTROUVABLE": Exit For
               Application.Goto .Cells(iDim1, 1), 1     'montrez ce dimanche en haut de l'écran

               iDim2 = Application.Match(iJour + 7, adates, 0)     'ligne du dimanche de cette semaine
               If Not IsNumeric(iDim2) Then MsgBox "problème avec " & Format(iJour + 7, "ddd dd-mm-yy"), vbCritical, "INTROUVABLE": Exit For

               iSem = WorksheetFunction.IsoWeekNum(iJour + 1)     '&Format(iJour + 4, "'YY-")
               iLun1 = Application.Match(iJour + 1, adates, 0)     'ligne du lundi de cette semaine
               If Not IsNumeric(iLun1) Then MsgBox "problème avec " & Format(iJour + 1, "ddd dd-mm-yy"), vbCritical, "INTROUVABLE": Exit For

               iLun2 = Application.Match(iJour + 8, adates, 0)     'ligne du lundi de la semaine prochaine
               If Not IsNumeric(iLun2) Then MsgBox "problème avec " & Format(iJour + 8, "ddd dd-mm-yy"), vbCritical, "INTROUVABLE": Exit For

               iDeb1 = Evaluate("iferror(AGGREGATE(15,6,ROW(bart)/((bart=""debut"")*(" & iDim1 & "<row(bart))*(row(bart)<=" & iDim2 & ")),1)," & iLun1 & ")")     'premier "debut" entre iDim1+1 et iDim2
               iDeb2 = Evaluate("iferror(AGGREGATE(15,6,ROW(bart)/((bart=""debut"")*(" & iDim2 & "<row(bart))),1)," & iLun2 & ")")     'premier debut apres iDim2

               i1 = Application.Min(iLun1, iDeb1)     '1ière ligne de notre plage
               i2 = Application.Min(iLun2, iDeb2)     'dernier ligne de notre plage
               Set c = .Cells(i1, "A").Resize(i2 - i1)     'notre plage
               s = Join(Array("semaine ", iSem, iDim1, iLun1, iDim2, iLun2, iDeb1, iDeb2, i1, i2, "      ", c.Address))
               Application.StatusBar = s: DoEvents
'Debug.Print s

               Dict.RemoveAll
               For Each c0 In c.Cells        'boucle cette plage
                    If c0.Offset(, 6).Value > 0 Then     'bulk <>"" (la colonne 7 = décalage de 6)
                         Dict(c0.Offset(, 6).Value) = Dict(c0.Offset(, 6).Value) + c0.Offset(, 28).Value     'cumuler qty pour ce "bulk" colonne 29 (= décalage 28) oubien 4 si AC et D sont les mêmes)
                    End If
               Next

               If Dict.Count Then            'il y a des résultats
                    With c3.Resize(Dict.Count)     'plage pour coller
                         .Value = Application.Transpose(Dict.keys)     'les différents bulks
                         .Offset(, 1).Value = Application.Transpose(Dict.items)     'ces qty cumulés
                    End With
               End If
               c3.Offset(-1).Value = "Week " & iSem     'la semaine
               Set c3 = c3.Offset(, 2)       'cellule pour la semaine suivante
               Dict.RemoveAll                'RAZ dictionaire

          Next

          Application.Goto F3.Range("A1")
          Application.StatusBar = ""
          'MsgBox Timer - t
     End With
End Sub

Rebonjour

cela semble correct.

la seul petite remarque c'est qu'on voit le macro se lancer et il va jusque en bas du fichier

avec l'ancienne macro il lancait la macro mais on voyait rien.

je reviens vers vous pour savoir si tout est ok je vais tester cela pendant quelque jours.

un Grand Merci.

Rechercher des sujets similaires à "compte nombre ligne entre deux trait"