Créer un tableau dynamique en fonction d'un report BI
Bonjour,
Je rencontre une problèmatique concernant le mixte de deux tableaux.
J'ai une première partie (A:O) qui est issue d'un report BI. La part deux P:Z me permet de connaitre mes besoins.
La problématique :
Le BI se met à jour chaque matin, de nouvelleS ligneS peuvent donc venir s'y insérer, mais ma partie "à la main" ne suit pas ce changement.
par exemple, une ligne s'insère le matin en ligne 40 - mes formules en P:Z ne "suivent pas" ce changement.
De plus, j'utilise un code couleur, en colonne V, qui lui non plus ne suit pas l'évolution. -> si les couleurs ne suivent pas, ce n'est pas la priorité.
N'étant pas du tout expert en la matière, je viens chercher votre aide, avec deux possibilités que j'ai en tête.
1 - la plus efficace pour moi. Réussir à lier l'ensemble. les lignes sont comme figées et liées entre elles. Si une nouvelle ligne s'y insère
elle ne vient pas perturber le reste.
sinon
2 - avoir un onglet réservé au BI, dans un second, un duplicata de ce dernier, avec les formules. une marco qui "scanne" les deux tableaux, et si de nouvelles lignes ont été insérées dans le BI, rajouter dans l'onglet "NOUVEAU" ces nouvelles lignes qui n'existent pas dans le tableau de travail.
J'ai essayé de mettre un exemple clair via la PJ avec IDEE1 et IDEE2
Merci
Bonjour,
Si cela peu aider quelqu'un.
J'ai une macro, qui me permet de comparer ma table de données avec celle de travail.
Il y a donc un onglet :
- TABLE_DE_DONNEES -> Se met à jour chaque matin, de nouvelles données y sont intégrées, non présentes la veille.
- TABLE_DE_W -> Copie du tableau de données de base.
- NouvellesDonnees -> Chaque matin, je lance la MACRO (suivante) - elle compare la Table de données et mon tableau de travail. Chaque nouvelles données présentes dans la table données s'affiche dans cet onglet. A partir du moment où une donnée en ligne ou colonne est différente.
Ce n'est pas optimum, mais pour le moment ça fonctionne.
Sub CopierNouvellesDonnees()
Dim wsTABLE_DE_DONNEES As Worksheet
Dim wsTABLE_DE_W As Worksheet
Dim wsNouvellesDonnees As Worksheet
Dim derniereLigneTABLE_DE_DONNEES As Long
Dim derniereLigneTABLE_DE_W As Long
Dim i As Long, j As Long
Dim trouve As Boolean
Dim nbNouvellesDonnees As Long
' Définir les feuilles de calcul
Set wsTABLE_DE_DONNEES = ThisWorkbook.Sheets("TABLE_DE_DONNEES")
Set wsTABLE_DE_W = ThisWorkbook.Sheets("TABLE_DE_W")
Set wsNouvellesDonnees = ThisWorkbook.Sheets("NouvellesDonnees")
' Trouver la dernière ligne avec des données dans chaque feuille de calcul
derniereLigneTABLE_DE_DONNEES = wsTABLE_DE_DONNEES.Cells(wsTABLE_DE_DONNEES.Rows.Count, "A").End(xlUp).Row
derniereLigneTABLE_DE_W = wsTABLE_DE_W.Cells(wsTABLE_DE_W.Rows.Count, "A").End(xlUp).Row
' Vérifier si des données sont présentes dans l'onglet TABLE_DE_DONNEES
If derniereLigneTABLE_DE_DONNEES = 1 Then
MsgBox "Aucune donnée dans l'onglet TABLE_DE_DONNEES.", vbExclamation
Exit Sub
End If
' Initialiser le compteur de nouvelles données
nbNouvellesDonnees = 0
' Boucler à travers les données de l'onglet TABLE_DE_DONNEES
For i = 1 To derniereLigneTABLE_DE_DONNEES
' Réinitialiser la variable trouve pour chaque nouvelle ligne de l'onglet TABLE_DE_DONNEES
trouve = False
' Vérifier si la ligne actuelle de l'onglet TABLE_DE_DONNEES est identique à une ligne de l'onglet TABLE_DE_W
For j = 1 To derniereLigneTABLE_DE_W
Dim match As Boolean
match = True
' Vérifier si les valeurs de chaque cellule dans les colonnes A:T correspondent
For k = 1 To 20 ' Correspondant aux colonnes A:T
If wsTABLE_DE_DONNEES.Cells(i, k).Value <> wsTABLE_DE_W.Cells(j, k).Value Then
match = False
Exit For
End If
Next k
If match Then
trouve = True
Exit For
End If
Next j
' Si la ligne actuelle de l'onglet TABLE_DE_DONNEES n'est pas trouvée dans l'onglet TABLE_DE_W, copier les données dans l'onglet NOUVELLES DONNEES
If Not trouve Then
wsTABLE_DE_DONNEES.Rows(i).Copy wsNouvellesDonnees.Rows(wsNouvellesDonnees.Cells(wsNouvellesDonnees.Rows.Count, "A").End(xlUp).Row + 1)
' Incrémenter le compteur de nouvelles données
nbNouvellesDonnees = nbNouvellesDonnees + 1
End If
Next i
' Afficher un message en fonction du nombre de nouvelles données copiées
If nbNouvellesDonnees > 0 Then
MsgBox nbNouvellesDonnees & " nouvelle(s) donnée(s) copiée(s) dans l'onglet NouvellesDonnees.", vbInformation
Else
MsgBox "Aucune nouvelle donnée trouvée.", vbInformation
End If
Application.DisplayAlerts = True ' Réactiver les alertes
End SubSi vous avez des idées d'amélioration, je suis preneur :)
Merci.
Bonjour
Il faut utiliser le self referencing dans PowerQuery
https://exceleratorbi.com.au/self-referencing-tables-power-query