Bonjour à tous,
Je récupère une macro excel qui ne marche pas bien et que je dois corriger, mais je n'arrive pas à trouver le problème. Peut-être pouvez-vous m'aider ?
Je précise que je suis loin d'être une experte du VBA ...
Pour expliquer le fonctionnement :
On a deux feuilles (AFMon_Del et ADMon_Del) avec chacune une table liée à des listes SharePoint.
On doit donc dans un premier temps actualiser les données Sharepoint (RefreshAll), puis dans un second temps, on concatène les deux tables dans une seule table finale qui est dans la feuille "Bundle_Tracking".
La macro est lancée par un bouton situé sur la feuille finale "Bundle_Tracking".
Voilà le code :
A priori "ActiveWorkbook.RefreshAll" doit mettre à jour les liens Sharepoint --> Ca ça marche car si je regarde mes deux onglets, les données sont à jour.
Ensuite, la fonction "Concatenate_Tables" doit concaténer les tables. C'est là que ça ne marche pas. Je n'ai aucun message d'erreur qui s'affiche, pourtant, les données ne sont pas copiées.
Sachant que si je relance une deuxième fois la macro, cette fois, les données sont copiées.
C'est comme si la concaténation se faisait avant que le refresh soit fini. Est-ce possible ?
J'ai testé d'ajouter un Sleep de 10 secondes avant la fonction Concatenate_Tables mais ça n'a rien changé ...
Voilà le code de la fonction Concatenate_Tables :
Avez-vous une idée de ce qui coince ?
Merci d'avance !!
Je récupère une macro excel qui ne marche pas bien et que je dois corriger, mais je n'arrive pas à trouver le problème. Peut-être pouvez-vous m'aider ?
Je précise que je suis loin d'être une experte du VBA ...
Pour expliquer le fonctionnement :
On a deux feuilles (AFMon_Del et ADMon_Del) avec chacune une table liée à des listes SharePoint.
On doit donc dans un premier temps actualiser les données Sharepoint (RefreshAll), puis dans un second temps, on concatène les deux tables dans une seule table finale qui est dans la feuille "Bundle_Tracking".
La macro est lancée par un bouton situé sur la feuille finale "Bundle_Tracking".
Voilà le code :
VB:
Sub Refresh_D_Data_Af()
Show
DoEvents
'Clearing filters
Range("Table_KPI_Generator_Bundle_V1[[#Headers],[_id]]").Select
If ActiveWorkbook.ActiveSheet.FilterMode Or _
ActiveWorkbook.ActiveSheet.AutoFilterMode Then _
ActiveWorkbook.ActiveSheet.ShowAllData
ActiveWorkbook.RefreshAll
DoEvents
Concatenate_Tables
DoEvents
Sheets("Bundle_Tracking").Range("A1").Select
Hide
DoEvents
MsgBox "Data has been updated", vbOKOnly
End Sub
A priori "ActiveWorkbook.RefreshAll" doit mettre à jour les liens Sharepoint --> Ca ça marche car si je regarde mes deux onglets, les données sont à jour.
Ensuite, la fonction "Concatenate_Tables" doit concaténer les tables. C'est là que ça ne marche pas. Je n'ai aucun message d'erreur qui s'affiche, pourtant, les données ne sont pas copiées.
Sachant que si je relance une deuxième fois la macro, cette fois, les données sont copiées.
C'est comme si la concaténation se faisait avant que le refresh soit fini. Est-ce possible ?
J'ai testé d'ajouter un Sleep de 10 secondes avant la fonction Concatenate_Tables mais ça n'a rien changé ...
Voilà le code de la fonction Concatenate_Tables :
VB:
Sub Concatenate_Tables()
Dim MainTableD As ListObject
On Error Resume Next
Set MainTableD = ThisWorkbook.Sheets("Bundle_Tracking").ListObjects("Table_KPI_Generator_Bundle_V1")
'Sheets("Bundle_Tracking").Range("Table_KPI_Generator_Bundle_V1[[#Headers],[O Sent]:[C Need]]").Columns.Hidden = False
'Nettoyage Tableau
If Not MainTableD.DataBodyRange Is Nothing Then MainTableD.DataBodyRange.Delete
'Liste des Feuilles / Tables D
Dim ListeFeuillesTables(1 To 2, 1 To 2) As String '1 to x, 1 To Y : X =Nombre de feuilles concernées Y=Nombre de lignes (code) nécessaires
ListeFeuillesTables(1, 1) = "AFMon_Del"
ListeFeuillesTables(1, 2) = "Table_KPI_Generator_AF_V1"
ListeFeuillesTables(2, 1) = "ADMon_Del"
ListeFeuillesTables(2, 2) = "Table_KPI_Generator_AD_V1"
Dim i As Integer
For i = 1 To 2 '1 to x Nombre de feuilles concernées
'Refresh des tables D
ThisWorkbook.Sheets(ListeFeuillesTables(i, 1)).ListObjects(ListeFeuillesTables(i, 2)).Refresh
'If i = 1 Then ActiveWorkbook.Connections("KPI_Generator_AF_V1").Refresh
'Verification présence de données dans le tableau
If Not ThisWorkbook.Sheets(ListeFeuillesTables(i, 1)).ListObjects(ListeFeuillesTables(i, 2)).DataBodyRange Is Nothing Then
If MainTableD.DataBodyRange Is Nothing Then
'Copy vers Tableau
ThisWorkbook.Sheets(ListeFeuillesTables(i, 1)).ListObjects(ListeFeuillesTables(i, 2)).DataBodyRange.Copy MainTableD.Range.Cells(1, 1).Offset(MainTableD.Range.Rows.Count - 1, 0)
Else
ThisWorkbook.Sheets(ListeFeuillesTables(i, 1)).ListObjects(ListeFeuillesTables(i, 2)).DataBodyRange.Copy MainTableD.Range.Cells(1, 1).Offset(MainTableD.Range.Rows.Count, 0)
End If
End If
Next
ThisWorkbook.Sheets("Bundle_Tracking").Select
Range("Table_KPI_Generator_Bundle_V1").Select
Selection.RowHeight = 14.25
'Sheets("Table_Full_AF").Visible = False
'Sheets("Bundle_Tracking").Range("Table_KPI_Generator_Bundle_V1[[#Headers],[O Sent]:[C Need]]").Columns.Hidden = True
Sheets("Bundle_Tracking").Range("A1").Select
End Sub
Avez-vous une idée de ce qui coince ?
Merci d'avance !!