Modification VBA
M
Bonjour,
j'ai un tableau dynamique qui me permet de visualiser toutes les absences de différents services.
Tout fonctionne bien mais j'aimerai rajouter la colonne observation dans le tableau qui se trouve dans la feuille Absence j'ai essayé de modifier la formule mais en vain
En PJ le tableau
Merci par avance pour votre aide
Cordialement
Invité
Bonjour Mango19
Voici le code modifié, tout est pourtant bien indiqué
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, ColObservation As Integer
Application.ScreenUpdating = False
wsh = Array("Anesthésie SSPI", "Laboratoire", "Pharmacie", "SRPR", "Réanimation USIP", "SAMU", "SMUR", "Stérilisation", "Urgences", "DO", "CESU") '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)
ColObservation = getCol("Observations", sh, 2)
ReDim newtbU(0 To UBound(tbU, 1), 1 To 8) '........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, 5) <> "" And tbU(i, 12) <> "" 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
newtbU(k, 7) = tbU(i, colRemplacePar) 'remplacé par
newtbU(k, 8) = tbU(i, ColObservation) ' 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, 8).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
A+
f
M
Un immense merci
Bien cordialement