Problème debogage
Bonjour,
je rencontre un problème de débogage que je n'arrive pas à résoudre
en PJ mon tableau
merci par avance pour votre aide
Bien cordialement
Bonjour,
Pourras-tu copier le code de ta macro ici ?
Peux tu également nous expliquer ce que tu cherches à faire ?
CDL,
Parrish
Bonjour,
Ceci peut-être:
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
Dim colNomPrenom As Integer, colGrade As Integer, colAbsence As Integer, colDebutAbsence As Integer, _
colFinAbsence As Integer, colRemplacePar As Integer, colSpecificites As Integer, colObservations As Integer
Application.ScreenUpdating = False
wsh = Array("Imagerie", "Consultations", "USIC USIN", "Cardio froide", "UNV Neuro Cardio", "Dialyse", "EOHH", "Médecine Pneumo", "USP EVP", "HDJ", "Coronarographie") '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
Set tbU = sh.Range("A4:T" & sh.Range("E" & Rows.Count).End(xlUp).Row) 'on définit le tableau de données
k = 0 '............................................index de départ
colNomPrenom = getCol("Nom & Prénom", sh, 2)
colGrade = getCol("Grade", sh, 2)
colAbsence = getCol("Absence", sh, 2)
colDebutAbsence = getCol("Début D'absence", sh, 2)
colFinAbsence = getCol("Fin d'Absence", sh, 2)
colRemplacePar = getCol("Remplacé par", sh, 2)
colSpecificites = getCol("Spécificités", sh, 2)
colObservations = getCol("Observations", sh, 2)
ReDim newtbU(0 To UBound(tbU, 1), 1 To 9) '........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, colNomPrenom) <> "" And tbU(i, colAbsence) <> "" Then '....si Nom/prénom et Absences remplis
newtbU(k, 1) = tbU(i, colNomPrenom) '....nom prénom
newtbU(k, 2) = sh.Name '...............service
newtbU(k, 3) = tbU(i, colGrade) '........grade
newtbU(k, 4) = tbU(i, colAbsence) '......absence
newtbU(k, 5) = tbU(i, colDebutAbsence) '.début absence
newtbU(k, 6) = tbU(i, colFinAbsence) '...fin absence
Select Case sh.Name
Case "Imagerie", "Consultations", "USIC USIN", "Cardio froide", "UNV Neuro Cardio", "Dialyse", "EOHH", "Médecine Pneumo", "USP EVP", "HDJ", "Coronarographie" '........si la feuille se nomme Pharmacie ou Laboratoire
newtbU(k, 7) = IIf(tbU(i, colRemplacePar) <> "", tbU(i, colRemplacePar), "A remplacer !") 'remplacé par
Case Else '..............................sinon
newtbU(k, 7) = tbU(i, colRemplacePar)
End Select
newtbU(k, 8) = tbU(i, colSpecificites) '..observations
newtbU(k, 9) = tbU(i, colObservations) '..observations
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("A" & lig).Resize(k, UBound(newtbU, 2)).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
'.................efface tous les tableaux (libère la mémoire)
Set tbU = Nothing
Erase newtbU
End Sub
Cdlt
Bonjour,
j'aimerai que les absences de la feuille médecine s'incrémentent directement dans la feuille absence. la formule
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
Dim colNomPrenom As Integer, colGrade As Integer, colAbsence As Integer, colDebutAbsence As Integer, _
colFinAbsence As Integer, colRemplacePar As Integer, colSpecificites As Integer, colObservations As Integer
Application.ScreenUpdating = False
wsh = Array("Imagerie", "Consultations", "USIC USIN", "Cardio froide", "UNV Neuro Cardio", "Dialyse", "EOHH", "Médecine Pneumo", "USP EVP", "HDJ", "Coronarographie") '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("A4:T" & sh.Range("E" & Rows.Count).End(xlUp).Row) 'on définit le tableau de données
k = 0 '............................................index de départ
colNomPrenom = getCol("Nom & Prénom", sh, 2)
colGrade = getCol("Grade", sh, 2)
colAbsence = getCol("Absence", sh, 2)
colDebutAbsence = getCol("Début D'absence", sh, 2)
colFinAbsence = getCol("Fin d'Absence", sh, 2)
colRemplacePar = getCol("Remplacé par", sh, 2)
colSpecificites = getCol("Spécificités", sh, 2)
colObservations = getCol("Observations", sh, 2)
ReDim newtbU(0 To UBound(tbU, 1), 1 To 9) '........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, colNomPrenom) <> "" And tbU(i, colAbsence) <> "" Then '....si Nom/prénom et Absences remplis
newtbU(k, 1) = tbU(i, colNomPrenom) '....nom prénom
newtbU(k, 2) = sh.Name '...............service
newtbU(k, 3) = tbU(i, colGrade) '........grade
newtbU(k, 4) = tbU(i, colAbsence) '......absence
newtbU(k, 5) = tbU(i, colDebutAbsence) '.début absence
newtbU(k, 6) = tbU(i, colFinAbsence) '...fin absence
Select Case sh.Name
Case "Imagerie", "Consultations", "USIC USIN", "Cardio froide", "UNV Neuro Cardio", "Dialyse", "EOHH", "Médecine Pneumo", "USP EVP", "HDJ", "Coronarographie" '........si la feuille se nomme Pharmacie ou Laboratoire
newtbU(k, 7) = IIf(tbU(i, colRemplacePar) <> "", tbU(i, colRemplacePar), "A remplacer !") 'remplacé par
Case Else '..............................sinon
newtbU(k, 7) = tbU(i, colRemplacePar)
End Select
newtbU(k, 8) = tbU(i, colSpecificites) '..observations
newtbU(k, 9) = tbU(i, colObservations) '..observations
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("A" & lig).Resize(k, UBound(newtbU, 2)).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 newtbU: Set wsh = Nothing '.................efface tous les tableaux (libère la mémoire)
End Sub
Function getCol(nomCol As String, Wks As Worksheet, ligEnTete As Integer) As Integer
Dim colFin As Integer, numCol As Integer
With Wks
colFin = .Cells(ligEnTete, .Columns.Count).End(xlToLeft).Column
For j = 1 To colFin
If LCase(.Cells(ligEnTete, j)) = LCase(nomCol) Then
numCol = j
GoTo fin
End If
Next j
End With
fin:
getCol = numCol
End Function
Merci par avance
Cordialement
Bonsoir à tous,
@MANGO19 : il eût été plus simple de fournir ton dernier fichier (qui était fonctionnel) et de mentionner les modifications à apporter.
Le souci, c'est que ton tableau (feuille Médecine 1) n'est plus cohérent:
- 2 colonnes GRADE ? (déjà mentionné dans un post précédent ?)
- plus de colonnes Début d'absence (ligne de code désactivée)
- plus de colonnes Fin d'absence (ligne de code désactivée)
- pas de colonnes Spécificités (ligne de code désactivée)
- pas de colonnes Observations (ligne de code désactivée)
- Tu as modifié le titre Remplacé par--> Remplacé(e) par (corrigé)
colRemplacePar = getCol("Remplacé(e) par", sh, 2)
- La feuille Médecine 1 ne figure pas dans le tableau wsh ni dans le Select Case sh.Name (corrigé)
wsh = Array("Imagerie", "Consultations", "USIC USIN", "Cardio froide", "UNV Neuro Cardio", "Dialyse", "EOHH", "Médecine 1", "Médecine Pneumo", "USP EVP", "HDJ", "Coronarographie") 'tu peux rajouter des feuilles ici(tableau contenant le nom des feuilles à traiter)
Case "Imagerie", "Consultations", "USIC USIN", "Cardio froide", "UNV Neuro Cardio", "Dialyse", "EOHH", "Médecine 1", "Médecine Pneumo", "USP EVP", "HDJ", "Coronarographie" '........si la feuille se nomme....
Donc forcément, ton code ne pourra pas fonctionner.
Ci-joint ton fichier avec quelques corrections,
cordialement,