Effectivement j'avais déjà donné une solution que kaka 133 as commentée après avoir posté ce fil...Bonjour @chris
merci pour votre réactivité et collaboration habituelleBonjour,
Voici une proposition inspirée de cette vidéo (je pense idem pour la solution #4)
Cordialement
merci beaucoupBonjour,
Bonjour @chris
J'avais fait çà ce matin, puis avait pensé que vous aviez trouvé la solution dans l'autre post alors je ne l'ai pas posté.
La requête, plutôt que de faire un test sur le matricule, le type d'absence et la date, regroupe les données sur matricule et type d'absence puis traite chacun des groupes résultants.
Cordialement
Sub Regrouper()
Dim tablo, resu(), i&, n&, j%
With Feuil1 'CodeName
With .[A1].CurrentRegion.Resize(, 5)
.Sort .Cells(1), xlAscending, .Cells(1, 3), , xlAscending, .Cells(1, 4), xlAscending, Header:=xlYes
tablo = .Value2
End With
ReDim resu(1 To UBound(tablo), 1 To 6)
For i = 2 To UBound(tablo)
If tablo(i, 1) & tablo(i, 3) <> tablo(i - 1, 1) & tablo(i - 1, 3) Or tablo(i, 4) <> Val(tablo(i - 1, 4)) + 1 Then
n = n + 1
For j = 1 To 4: resu(n, j) = tablo(i, j): Next
End If
resu(n, 5) = tablo(i, 4)
resu(n, 6) = Val(resu(n, 5)) - Val(resu(n, 4)) + 1
Next
'---restitution---
If .FilterMode Then .ShowAllData 'si la feuille est filtrée
With .[G2] '1ère cellule de destination, à adapter
If n Then .Resize(n, 6) = resu
.Offset(n).Resize(Rows.Count - n - .Row + 1, 6).ClearContents 'RAZ en dessous
End With
End With
End Sub
office 2016RE à tous
Seules les solutions de Roblochon et de job75 fonctionnent dans tous les cas
Contrairement à ce que je fais habituellement et qui est mentionné dans le lien donné, dans ma solution de l'autre fil, je n'ai comparé, que les dates de la ligne suivante
Idem dans le solution Amilo.
Cela n'est pas bon dès que des congès de personnes différentes se suivent.
De plus Amilo ne fait pas de tri avant indexation ce qui ajoute au PB
@kaka 133 : il faudrait préciser quelle version d'Excel tu utilises et sur quelle étape de la requête tu rencontres le problème. Je suppose que ta version est inférieure à 365 et que c'est l'indexation qui pose problème mais précise bien ces 2 infos.
un grand merci pour votre précieux soutienBonsoir Kaka133, chris, Roblochon, Amilo,
En VBA ce n'est pas bien difficile :
A+VB:Sub Regrouper() Dim tablo, resu(), i&, n&, j% With Feuil1 'CodeName With .[A1].CurrentRegion.Resize(, 5) .Sort .Cells(1), xlAscending, .Cells(1, 3), , xlAscending, .Cells(1, 4), xlAscending, Header:=xlYes tablo = .Value2 End With ReDim resu(1 To UBound(tablo), 1 To 6) For i = 2 To UBound(tablo) If tablo(i, 1) & tablo(i, 3) <> tablo(i - 1, 1) & tablo(i - 1, 3) Or tablo(i, 4) <> Val(tablo(i - 1, 4)) + 1 Then n = n + 1 For j = 1 To 4: resu(n, j) = tablo(i, j): Next End If resu(n, 5) = tablo(i, 4) resu(n, 6) = Val(resu(n, 5)) - Val(resu(n, 4)) + 1 Next '---restitution--- If .FilterMode Then .ShowAllData 'si la feuille est filtrée With .[G2] '1ère cellule de destination, à adapter If n Then .Resize(n, 6) = resu .Offset(n).Resize(Rows.Count - n - .Row + 1, 6).ClearContents 'RAZ en dessous End With End With End Sub