Pb sur incompatibilité de type
Bonjour
J'essaie d'entrer des congés dans un palnning mais mon code plante
Pourriez-vous m'aider svp ?
Voici la situation :
J'ai une feuille conges avec 2 tableaux :
- tableau a3:g33 : liste des congés des salariés (nom, type, datedebut, date fin, nb de jours avec formule excel, nb de jours réel renseigné avec le code ci-dessous)
- tableau i2:n10 : recapitulati du nb de congés par type de congés, des dimanches tavaillés et des jours fériés travaillés)
J'ai une autre feuille 2020 ou sont corrigés les horaires annuels en tenant compte des congés des salariés.
Cette feuille 2020 est rempli automatiquement en tenant compte des horaires de la feuille "Trame de base" faite sur 4 semaines.
Le code de la procédure Sub trame1() recopie les valeurs de la trame de base sur la feuille 2020 en vérifiant que les valeurs de la colonne A de 2020 correspondent aux valeurs de la colonne D de la feuille Trame de Base (cela fonctionne trés bien).
Mon problème est le suivant :
Quand je lance la procédure Conges()
la procédure fonctionne bien pour la première ligne de la feuille Conges SOIT pour Emilie (ces conges apparaissent bien dans la feuille 2020 et dans le recapitulatif du tableau de droite de la feuille Conges)
Mais pour la seconde SOIT Lucie j'ai ce message d'erreur :
Erreur 13 : Incompatibilité de type sur cette ligne sur la valeur DateDeb mais sur Datefin, c'est étrange ???
If cell.Value >= CDate(Ddeb) And cell.Value <= CDate(Dfin) Then
Voici le code :
Sub conges()
Derlig = 0 'dernière ligne du tableau de la feuille Conges initialisé à 0
Worksheets("Conges").Activate 'active la feuille Conges
Worksheets("Conges").Range("j3:n10").Value = "" 'Efface les valeurs du tableau à droite de la feuille Conges
Derlig = Worksheets("Conges").Range("A" & Rows.Count).End(xlUp).Row 'dernière ligne du tableau a3:f5 de la feuille Conges
For i = 4 To Derlig ' Parcours le tableau a3:f... de la feuille Conges de la ligne 4 à la dernière ligne
totj = 0 ' total de jours de conges sans compter les we initialisé à 0
totdi = 0 ' total des dimanches travaillés initailisés à 0
nom = Cells(i, 1) ' nom du salarié
typ = Cells(i, 2) ' type de congé
Ddeb = Cells(i, 3) ' Date de début
Dfin = Cells(i, 4) ' Date de fin
Select Case typ
Case "ca" ' si congé est un ca (congé annuel)
p1 = 10 'n° de colonne de la feuille Congés
c1 = RGB(212, 115, 212) ' couleur de fond de la cellule de la feuille 2020
Case "caa" ' si congé est un ca (congé annuel ancienneté)
p1 = 11
c1 = RGB(219, 0, 115)
Case "cs" ' si congé est un ca (congé supp)
p1 = 12
c1 = RGB(128, 0, 128)
Case Else
End Select
Select Case nom 'selon le nom
Case "Emilie"
l1 = "i" ' colonne de début de la plage de la feuille 2020
l2 = "l" ' colonne de fin de la plage de la feuille 2020
sal1 = 3 ' n° de ligne de la feuille Conges pour le tableau i2:n10
Case "Lucie"
l1 = "o"
l2 = "r"
sal1 = 4
Case "Karen"
Case Else
l1 = "u"
l2 = "x"
End Select
Worksheets("2020").Activate 'Active la feuille 2020
Set Plage2 = ThisWorkbook.Worksheets("2020").Range("d3:d373") 'selectionne la plage des dates de la feuille 2020 de la colonne D
For Each cell In Plage2 'boucle sur la plage sékectionnée
h = cell.Row ' numéro de ligne de la cellule en cours
If cell.Value >= CDate(Ddeb) And cell.Value <= CDate(Dfin) Then ' si la date de la cellule en cours est comprise entre la date de début et la date de fin
If Format(cell.Value, "w", 2) >= 6 Then 'si le jour est un samedi ou un dimanche
Worksheets("2020").Range(l1 & h & ":" & l2 & h).Value = 1 'si oui alors valeurs de la plage égale à 1
Else
totj = totj + 1 'sinon incrémlénte le nb de jours de congés
Worksheets("2020").Range(l1 & h & ":" & l2 & h).Value = "" 'efface les valeurs de la plage
Worksheets("2020").Range(l1 & h & ":" & l2 & h).Interior.Color = c1 'met la couleur de fond correspondant au type de congé
End If
End If
If Format(cell.Value, "w", 2) > 6 Then 'si la date est un dimanche
If cell.Offset(0, 9).Value > 0 Then ' et que la cellule du total d'heure de la journée est supérieure à 0
totdi = totdi + 1 ' alors incrément le nb de dimanche travaillés
End If
End If
Next
Worksheets("Conges").Cells(i, 6) = totj 'note le total de jours de conges sans compter les weekend dans la feuille Conges dans la colonne 6 à côté du nb de jours sur la ligne du salarié coorespondant
Worksheets("Conges").Cells(sal1, p1) = Worksheets("Conges").Cells(sal1, p1) + totj 'idem dans le tableau de droite
Worksheets("Conges").Cells(sal1, 13) = Worksheets("Conges").Cells(sal1, 13) + totdi ' recopie le nb de dimanches travaillés dans le tableau de droite de la feuille Conges sur la ligne du salarié correspondant
Next i ' va a la ligne suivante pour le congé suivant du prochain salarié
End Sub
Je vous remercie beaucoup de votre aide
Cordailement
Bonsoir,
Le code suivant n'est pas bien placé :
Worksheets("Conges").Activate 'active la feuille Conges
Il doit être à la première ligne du boucle comme ceci :
For i = 4 To Derlig ' Parcours le tableau a3:f... de la feuille Conges de la ligne 4 à la dernière ligne
Worksheets("Conges").Activate 'active la feuille Conges
Car, à l'intérieur du boucle, tu passes à l'onglet 2020, d'où le problème.
merci beaucoup,
je trouve aussi étrange d'avoir le même nb de dimanches travaillés pour les 2 salariés (M4 et M5 de la feuille Congés)
Avez-vous une idée svp?
Merci encore
Cordialement
Re,
Non. Je n'ai aucune idée.
Pardon
J'ai trouvé
J'avais utilisé
cell.Offset(0, 9).Value > 0
mais j'ai remplacé 9 par une variable pour différencier les salariés
Je vous remercie beaucoup de votre aide précieuse
Bonne soirée