Erreur execution 13
Bonjour,
je rencontre une erreur d'exécution 13 "incompatibilité de type" dans la formule ci dessous. Impossible de voir d'ou cela provient. Merci par avance pour votre aide
Private Sub Worksheet_Activate()
Dim tbU, newtbU() 'définit les tableaux de valeurs
Dim i%, k%, lig%, x%
Dim wsh, sh As Worksheet
Dim lo As ListObject
Application.ScreenUpdating = False
wsh = Array("Chirurgie1", "Chirurgie2", "UCA", "Bloc", "Caisson", "Anapath", "CS") 'tu peux rajouter des feuilles ici(tableau contenant le nom des feuilles à traiter)
Set lo = Sheets("Absences").ListObjects("tb_absences") 'définit le tableau structuré de la feuille Absences (nommé tb_absences)
With lo
If Not .DataBodyRange Is Nothing Then .DataBodyRange.Delete 'efface les données de la feuille Absences
End With
For x = LBound(wsh) To UBound(wsh) 'boucle sur chaque nom du tableau wsh
For Each sh In ThisWorkbook.Worksheets 'boucle sur chaue feuille du classeur
If sh.Name Like wsh(x) Then 'si le nom de la feuille du classeur fait partie du tableau wsh
tbU = sh.Range("E4:S" & sh.Range("E" & Rows.Count).End(xlUp).Row) 'on définit le tableau de données
k = 0 '............................................index de départ
ReDim newtbU(0 To UBound(tbU, 1), 1 To 7) '........on crée un tableau temporaire
For i = 1 To UBound(tbU, 1) '.....................on boucle sur les lignes du tableau de données
If tbU(i, 1) <> "" And tbU(i, 5) <> "" Then '....si Nom/prénom et Absences remplis
newtbU(k, 1) = tbU(i, 1) 'nom prénom
newtbU(k, 2) = sh.Name 'service
newtbU(k, 3) = tbU(i, 2) 'grade
newtbU(k, 4) = tbU(i, 5) 'absence
newtbU(k, 5) = tbU(i, 6) 'début absence
newtbU(k, 6) = tbU(i, 7) 'fin absence
newtbU(k, 7) = tbU(i, 11) 'remplacé par
k = k + 1 '................incrémente l'index
End If
Next i '......................prochaine ligne du tableau de valeur
If k > 0 Then '..............si tableau temporaire comporte au moins 1 ligne
On Error Resume Next
With lo
.ListRows.Add '............rajoute une ligne au tableau de la feuille Absences
lig = .ListColumns(1).Range.Find("", SearchDirection:=xlNext).Row '...définit la première ligne vide
Sheets("Absences").Range("B" & lig).Resize(k, 7).Value = newtbU '.....écrit les données du tableau temporaire
End With
End If
End If
Next sh '...................................................................prochaine feuille du classeur
Next x '.....................................................................prochaine valeur du tableau wsh
Erase tbU: Erase tbV: Set wsh = Nothing '......................................efface tous les tableaux (libère la mémoire)
End Sub
Bien cordialement
Bonjour,
merci pour votre réponse mais je suis loin d'être une experte du coup je ne comprends pas ce qui faut faire
Si vous pouviez me donner un exemple
Merci par avance
Cordialement
Re,
Lorsque le code plante, une ligne est surlignée en jaune, elle indique où se situe l'erreur dans le code lorsque tu cliques sur débogage...
Sur cette ligne de code:
Erase tbU: Erase tbV: Set wsh = Nothing '......................................efface tous les tableaux (libère la mémoire)
tbV n'existe pas, mais tu utilises newtbU
Dim tbU, newtbU() 'définit les tableaux de valeurs
, donc :
Erase tbU: Erase newtbU: Set wsh = Nothing '......................................efface tous les tableaux (libère la mémoire)
Cordialement,