Sub CopierVersMiseEnCommun()
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim destRow As Long
    Dim missingData As Boolean
    Dim PASSWORD As String
    Dim valeurCol11 As Double
    Dim valeurCol12 As Double
    Dim reponse As VbMsgBoxResult
    ' Définir les feuilles source et destination
    Set wsSource = ThisWorkbook.Sheets("Encodage")
    Set wsDest = ThisWorkbook.Sheets("Mise en commun")
    PASSWORD = "manu01" ' Mot de passe pour protéger/déprotéger
    ' Déprotéger la feuille "Mise en commun"
    wsDest.Unprotect PASSWORD:=PASSWORD
    ' Vérification si les cellules B1, D1, F1, B2 et D2 sont remplies
    If wsSource.Range("B1").Value = "" Or wsSource.Range("D1").Value = "" Or wsSource.Range("F1").Value = "" _
        Or wsSource.Range("B2").Value = "" Or wsSource.Range("D2").Value = "" Then
        MsgBox "Veuillez remplir toutes les cellules en jaune, merci !", vbExclamation
        Exit Sub
    End If
    ' Vérification des colonnes B et C
    missingData = False
    For i = 5 To 20
        If Trim(wsSource.Cells(i, 3).Value) <> "" And Trim(wsSource.Cells(i, 2).Value) = "" Then
            missingData = True
            Exit For
        End If
    Next i
    If missingData Then
        MsgBox "Veuillez remplir la durée, merci ! ", vbExclamation
        Exit Sub
    End If
    ' Trouver la dernière ligne non vide dans la feuille destination
    lastRow = wsDest.Cells(wsDest.Rows.Count, 1).End(xlUp).Row
    destRow = lastRow + 1 ' Première ligne vide dans la feuille de destination
    ' Copier les données fixes
    wsDest.Cells(destRow, 1).Value = wsSource.Range("J1").Value
    wsDest.Cells(destRow, 2).Value = wsSource.Range("F1").Value
    wsDest.Cells(destRow, 3).Value = wsSource.Range("D1").Value
    wsDest.Cells(destRow, 4).Value = wsSource.Range("B1").Value
    wsDest.Cells(destRow, 5).Value = wsSource.Range("D2").Value
    wsDest.Cells(destRow, 6).Value = wsSource.Range("D26").Value
    wsDest.Cells(destRow, 10).Value = wsSource.Range("A22").Value
    wsDest.Cells(destRow, 11).Value = wsSource.Range("F2").Value
    wsDest.Cells(destRow, 12).Value = wsSource.Range("B2").Value
    wsDest.Cells(destRow, 13).Value = wsSource.Range("J4").Value
    wsDest.Cells(destRow, 17).Value = wsSource.Range("D33").Value
    wsDest.Cells(destRow, 8).Value = wsSource.Range("C33").Value
    ' Calcul de la colonne 14
    If IsNumeric(wsDest.Cells(destRow, 12).Value) And IsNumeric(wsDest.Cells(destRow, 11).Value) Then
        valeurCol12 = wsDest.Cells(destRow, 12).Value ' Valeur de la colonne 12
        valeurCol11 = wsDest.Cells(destRow, 11).Value * 24 ' Conversion de l'heure en heures
        If valeurCol11 <> 0 Then
            wsDest.Cells(destRow, 14).Value = valeurCol12 / valeurCol11
        Else
            wsDest.Cells(destRow, 14).Value = "Division par zéro"
        End If
    Else
        wsDest.Cells(destRow, 14).Value = "Erreur de données"
    End If
    ' Calculs supplémentaires pour les colonnes 15 et 16
    wsDest.Cells(destRow, 15).Value = Year(wsDest.Cells(destRow, 1).Value) & "-" & WorksheetFunction.IsoWeekNum(wsDest.Cells(destRow, 1).Value)
    wsDest.Cells(destRow, 16).Value = Year(wsDest.Cells(destRow, 1).Value) & "-" & Month(wsDest.Cells(destRow, 1).Value)
' Début de la boucle pour copier les valeurs conditionnellement
For i = 5 To 20
    If Trim(wsSource.Cells(i, 2).Value) <> "" Or Trim(wsSource.Cells(i, 3).Value) <> "" Then
        ' Trouver la prochaine ligne vide dans la colonne G
        destRow = wsDest.Cells(wsDest.Rows.Count, 7).End(xlUp).Row + 1
        
        ' Copier toutes les données associées sur la même ligne
        wsDest.Cells(destRow, 1).Value = wsSource.Range("J1").Value ' Date
        wsDest.Cells(destRow, 2).Value = wsSource.Range("F1").Value ' Machine
        wsDest.Cells(destRow, 3).Value = wsSource.Range("D1").Value ' Opérateur
        wsDest.Cells(destRow, 4).Value = wsSource.Range("B1").Value ' Autre info
        wsDest.Cells(destRow, 5).Value = wsSource.Range("D2").Value ' Donnée additionnelle
        wsDest.Cells(destRow, 6).Value = wsSource.Range("D26").Value ' Autre donnée fixe
        wsDest.Cells(destRow, 7).Value = wsSource.Cells(i, 1).Value ' Colonne G (donnée variable de la boucle)
        wsDest.Cells(destRow, 9).Value = wsSource.Cells(i, 2).Value ' Colonne I (donnée variable de la boucle)
        wsDest.Cells(destRow, 10).Value = wsSource.Range("A22").Value ' Info supplémentaire
        wsDest.Cells(destRow, 11).Value = wsSource.Range("F2").Value
        wsDest.Cells(destRow, 12).Value = wsSource.Range("B2").Value
        wsDest.Cells(destRow, 13).Value = wsSource.Range("J4").Value
        wsDest.Cells(destRow, 17).Value = wsSource.Range("D33").Value
        wsDest.Cells(destRow, 8).Value = wsSource.Range("C33").Value ' Donnée additionnelle
        ' Calcul de la colonne 14
        If IsNumeric(wsDest.Cells(destRow, 12).Value) And IsNumeric(wsDest.Cells(destRow, 11).Value) Then
            valeurCol12 = wsDest.Cells(destRow, 12).Value ' Valeur de la colonne 12
            valeurCol11 = wsDest.Cells(destRow, 11).Value * 24 ' Conversion de l'heure en heures
            If valeurCol11 <> 0 Then
                wsDest.Cells(destRow, 14).Value = valeurCol12 / valeurCol11
            Else
                wsDest.Cells(destRow, 14).Value = "Division par zéro"
            End If
        Else
            wsDest.Cells(destRow, 14).Value = "Erreur de données"
        End If
        ' Calculs supplémentaires pour les colonnes 15 et 16
        wsDest.Cells(destRow, 15).Value = Year(wsDest.Cells(destRow, 1).Value) & "-" & WorksheetFunction.IsoWeekNum(wsDest.Cells(destRow, 1).Value)
        wsDest.Cells(destRow, 16).Value = Year(wsDest.Cells(destRow, 1).Value) & "-" & Month(wsDest.Cells(destRow, 1).Value)
    End If
Next i
 
    ' Nettoyer le presse-papiers
    Application.CutCopyMode = False
    ' Imprimer la plage A1:J27 de la feuille "Encodage" avant d'effacer les données
    With wsSource
        .PageSetup.PrintArea = "A1:J27" ' Définir la zone d'impression
        .PageSetup.Orientation = xlLandscape ' Orientation paysage
        .PageSetup.Zoom = False
        .PageSetup.FitToPagesWide = 1 ' Ajuster à 1 page en largeur
        .PageSetup.FitToPagesTall = 1 ' Ajuster à 1 page en hauteur
        ' Imprimer directement
        .PrintOut
    End With
    
   ' Afficher une boîte de dialogue pour demander à l'utilisateur s'il a fini
    reponse = MsgBox("Avez-vous terminé ?", vbQuestion + vbYesNo, "Confirmation")
    ' Vérifie la réponse
    If reponse = vbYes Then
        ' Effacer toutes les données
        wsSource.Range("B1, B2, D1, F1, D2").ClearContents
        wsSource.Range("B5:H20").ClearContents
        wsSource.Range("A22").MergeArea.ClearContents
        MsgBox "Ok", vbInformation, "Encodage terminé et imprimé, merci !"
         wsSource.Protect PASSWORD:=PASSWORD
    wsDest.Protect PASSWORD:=PASSWORD
ThisWorkbook.Save
ThisWorkbook.Close
        
    Else
        ' Effacer toutes les données sauf B1 et D1
        wsSource.Range("B2, F1, D2").ClearContents
        wsSource.Range("B5:H20").ClearContents
        wsSource.Range("A22").MergeArea.ClearContents
        MsgBox "Ok.", vbInformation, "Encodage terminé et imprimé, merci !"
    End If
    ' Protéger à nouveau les feuilles
    wsSource.Protect PASSWORD:=PASSWORD
    wsDest.Protect PASSWORD:=PASSWORD
    
    ' Sauvegarder le fichier
    ThisWorkbook.Save
End Sub