Fichier a ameliorer avec macro actuelle a modifier

Bonjour ,
je suis sur un fichier qui a été modifié dernierement par Cow 18 et dont la premiere partie a besoin d’une petite evolution.
J’ai dans la première macro du fichier une execution qui va ,a partir de l’onglet « ORDO » copier et fractionner les lignes vers l’onglet « PLANIF » .
Le fractionnement se fait au niveau des quantité (colonne « E ») qui sont a repartir de la facon suivante :
1/3 la veille et 2/3 le jour J.
La macro suivante fait le job :
Sub FiltrerEtRepartirQuantite()
Dim ws As Worksheet
Dim planifWs As Worksheet
Dim lastRow As Long
Dim i As Long
Dim veilleQuantite As Double
Dim jourJQuantite As Double
Dim jourJDate As Date
Dim veilleDate As Date

' Définir la feuille de calcul active
Set ws = ThisWorkbook.Sheets("ORDO") ' Remplacez "ORDO" par le nom de votre feuille de calcul

' Créer ou sélectionner la feuille PLANIF
On Error Resume Next
Set planifWs = ThisWorkbook.Sheets("PLANIF")
If planifWs Is Nothing Then
    Set planifWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    planifWs.Name = "PLANIF"
End If
On Error GoTo 0

' Trouver la dernière ligne de la feuille active
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

' Parcourir les lignes et filtrer les lignes "EMBALLAGE"
For i = 2 To lastRow
    If ws.Cells(i, 2).Value = "EMBALLAGE" Then
        jourJDate = ws.Cells(i, 1).Value
        veilleQuantite = ws.Cells(i, 5).Value / 3
        jourJQuantite = ws.Cells(i, 5).Value * 2 / 3
        
        ' Vérifier si jour J est un lundi et planifier au vendredi précédent
        If Weekday(jourJDate, vbMonday) = 1 Then
            veilleDate = jourJDate - 3
        Else
            veilleDate = jourJDate - 1
        End If
        
        ' Copier les données dans la feuille PLANIF
        With planifWs
            .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = veilleDate
            .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0).Value = ws.Cells(i, 2).Value
            .Cells(.Rows.Count, 3).End(xlUp).Offset(1, 0).Value = ws.Cells(i, 3).Value
            .Cells(.Rows.Count, 4).End(xlUp).Offset(1, 0).Value = ws.Cells(i, 4).Value
            .Cells(.Rows.Count, 5).End(xlUp).Offset(1, 0).Value = veilleQuantite
            .Cells(.Rows.Count, 7).End(xlUp).Offset(1, 0).Value = "a"
            
            .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = jourJDate
            .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0).Value = ws.Cells(i, 2).Value
            .Cells(.Rows.Count, 3).End(xlUp).Offset(1, 0).Value = ws.Cells(i, 3).Value
            .Cells(.Rows.Count, 4).End(xlUp).Offset(1, 0).Value = ws.Cells(i, 4).Value
            .Cells(.Rows.Count, 5).End(xlUp).Offset(1, 0).Value = jourJQuantite
        End With
    End If
Next i

End Sub

Mais je souhaiterai pouvoir ajouter en colonne « G » de « PLANIF » la lettre « a » lorsqu’il s’agit d’une ligne j-1 voir j-3 lorsque J est un lundi ,j’ai bien tenté d’ajouter :
.Cells(.Rows.Count, 7).End(xlUp).Offset(1, 0).Value = « a » mais cela ajoute « a » mais pas sur toute les bonnes lignes.
Un petit coup de pouce serait une fois de plus le bienvenu.
Merci !!
test deb 2025(2)(1).xlsm (64,4 Ko)

 ' Copier les données dans la feuille PLANIF
               With planifWs.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)     'cellule Ax avec x=ligne suivante
                    .Value = veilleDate
                    .Offset(, 1).Value = ws.Cells(i, 2).Value
                    .Offset(, 2).Value = ws.Cells(i, 3).Value
                    .Offset(, 3).Value = ws.Cells(i, 4).Value
                    .Offset(, 4).Value = veilleQuantite
                    .Offset(, 6).Value = "a"

                    .Offset(1).Value = jourJDate
                    .Offset(1, 1).Value = ws.Cells(i, 2).Value
                    .Offset(1, 2).Value = ws.Cells(i, 3).Value
                    .Offset(1, 3).Value = ws.Cells(i, 4).Value
                    .Offset(1, 4).Value = jourJQuantite
               End With
          
oubien


               With planifWs.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)     'cellule Ax avec x=ligne suivante
                    .Resize(, 5).Value = Array(veilleDate, ws.Cells(i, 2).Value, ws.Cells(i, 3).Value, ws.Cells(i, 4).Value, veilleQuantite)
                    .Offset(, 6).Value = "a"

                    .Offset(1).Resize(, 5).Value = Array(jourJDate, ws.Cells(i, 2).Value, ws.Cells(i, 3).Value, ws.Cells(i, 4).Value, jourJQuantite)
               End With

la première partie est un par un, la 2eme est en blocs

Bonjour Cow18 ,
j’ai testé la premiere et deuxième modification et j’ai une erreur :

supprimez le point avant « Rows », donc
with planifWs.cells(rows.count,1).end(xlup).offset(1,0)

rows.count sera remplacé par +65.000 dans un xls et par +1.048.000 dans un xlsx,xlsm,xlsb,etc

Merci ,c’est tout bon !!
bon week-end .
Franck .

1 « J'aime »