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
' 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 valeurs fixes selon vos instructions
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
wsDest.Cells(destRow, 9).Value = wsSource.Range("B5").Value
' Autres calculs
wsDest.Cells(destRow, 15) = Year(wsDest.Cells(destRow, 1)) & "-" & WorksheetFunction.IsoWeekNum(wsDest.Cells(destRow, 1))
wsDest.Cells(destRow, 16) = Year(wsDest.Cells(destRow, 1)) & "-" & Month(wsDest.Cells(destRow, 1))
' Début de la boucle pour copier les valeurs conditionnellement
'For i = 5 To 21
'If Trim(wsSource.Cells(i, 2).Value) <> "" Or Trim(wsSource.Cells(i, 3).Value) <> "" Then
' wsDest.Cells(destRow, 7).Value = wsSource.Cells(i, 1).Value
'wsDest.Cells(destRow, 9).Value = wsSource.Cells(i, 2).Value
' wsDest.Cells(destRow, 8).Value = wsSource.Cells(i, 9).Value
' Vérification avant de faire la division
If IsNumeric(wsDest.Cells(destRow, 12).Value) And IsNumeric(wsDest.Cells(destRow, 11).Value) Then
' Convertir l'heure (F2) en nombre d'heures en multipliant par 24
Dim hours As Double
hours = wsDest.Cells(destRow, 11).Value * 24 ' Conversion de l'heure en nombre d'heures
If hours <> 0 Then
wsDest.Cells(destRow, 14).Value = wsDest.Cells(destRow, 12).Value / hours
Else
wsDest.Cells(destRow, 14).Value = "Division par zéro"
End If
Else
wsDest.Cells(destRow, 14).Value = "Erreur de données"
End If
destRow = destRow + 1
' 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
' Déprotéger la feuille "Encodage"
wsSource.Unprotect PASSWORD:=PASSWORD
' Effacer toutes les données
wsSource.Range("B1, B2, D1, F1, D2").ClearContents
wsSource.Range("B5:H20").ClearContents
wsSource.Range("A22").MergeArea.ClearContents
' Protéger à nouveau la feuille "Encodage" et "Mise en commun"
wsSource.Protect PASSWORD:=PASSWORD
wsDest.Protect PASSWORD:=PASSWORD
' Message de fin
MsgBox "Encodage terminé et imprimé, merci !", vbInformation
' Sauvegarder le fichier
ThisWorkbook.Save
'ThisWorkbook.Close
End Sub