Plage dynamique VBA
Bonjour,
Ca fait quelques jours que je cherche la solution à mon problème et j'espère la trouver sur ce forum grâce à votre aide.
On travaille avec un fichier de reporting ancien et j'essaie de l'améliorer. En effet, le fichier est alimenté chaque semaine par des nouvelles données venues d'un autre fichier. Ces données sont stockées dans les tableaux de l'onglet "Evolution" et alimentent à leur tour les graphes dynamiques pour n'afficher finalement que les données des 11 dernières semaines grâce aux boutons "Décaler S+1" et "Décaler S-1".
De ma part, j'ai rajouté un nouvel onglet que j'ai nommé "Zero Trafic" et je veux faire la même chose avec les données de cet onglet (graphe qui se met à jour chaque semaine), sachant que les données venues de l'autre fichier contient la matière brut pour alimenter cet onglet et c'est pas ça le problème. Mon problème c'est que j'ai essayé des créer un plage dynamique dans cet onglet avec Excel avec les fonctione Décaler et NBVAL sans passer par le VBA, mais la tache s'avère compliquée car à chaque fois que je nomme une plage sur cet onglet et je finis le travail, quand je clique sur le bouton "Décaler S+1", un message d'erreur s'affiche "La méthode Select de la classe Range a échoué". J'ai beau cherché mais jusqu'à l'heure je n'ai pas trouvé de solution. Finalement je me demande si c'est pas possible d'utiliser les macro DecalerPlageBAS et DecalerPlageHAUT (Boutons Décaler S+1 et S-1) et les adapter aux données de mon nouvel onglet mais je ne sais pas comment faire car j'ai pas compris le code de ces macros.
L'onglet "Zero trafic" est vide vu que les données sont confidentielles mais elles sont du format que les autres données à savoir les semaines sur les abscisses et les pourcentages sur les ordonnées.
Pourriez-vous SVP me filer un coup de main pour résoudre ce problème?
Cdt;
bonjour
il est temps de passer à Power BI Desktop gratuit pour visualiser les données (et quelle visualisation ! )
ce logiciel récupère des données de sources variées, notamment à partir de fichiers contenus dans un répertoire. Ce qui est ton cas.
Imagine récupérer d'un clic des millions de données, contenues dans des milliers de fichiers dont certains vieux de 10 ans.
c'est grâce à Power Query (disponible dans Excel aussi)
et faire des états, graphiques etc. dans PBI
sans VBA, totalement dépassé
Bonjour
Autre solution pour simplifier et moderniser.
Mettre tes sources sous forme de tableaux structurés
Leur associer un segment pour filtrer et lier les graphiques à l'ensemble du tableau : il suffit de filtrer avec le segment pour que le graphique se limite aux données filtrées.
Reste un poil de VBA si synchronisation de plusieurs sources nécessaire...
un exemple pour illustrer ce type d'approche http://www.excel-formations.fr/Trucs_astuces/GRAPH02.php
Bonjour,
Merci pour vos retour.
@Jmd, c'est la première fois que j’entends parler de ce logiciel Power Query, je vais faire quelques recherches dessus ça a l'air intéressant. Mais pour l'instant je suis dans l'urgence de trouver une solution à mon problème de graphes que je n'arrive pas à faire.
@78chris, j'ai essayé ton idée de segments et je vois que c'est une fonctionnalité fort utile. Mais pour mon cas, à chaque fois que j'insère des segments et je clique sur le bouton "Décaler S+1" (juste pour le test car j'attends aucun résultat de cette action) y l'erreur "la Méthode Select ...a échoué", en plus je ne vois pas comment je pourrai décaler mes graphes avec les segments, car pour rappel je dois avoir les 11 semaines sur les abscisses et les pourcentages sur les ordonnées. Je vous ai joints le fichier avec un échantillon de données que contiendra l'onglet "Zero Trafic".
Merci bien pour votre assistance.
re
salut Chris
comme toi alors !
le tableau des données pour le graphe doit être mis "sous forme de tableau" (un clic dans le 1er menu d'Excel, il FAUT le faire)
ensuite un segment. Mais il faut que le tableau ci-dessus possède une colonne de dates ou périodes.
d'un clic et glissé, tu mets à jour tes semaines
la concaténation des fichiers de départ peut se faire par copier/coller au clavier/souris (1 fois par semaine, c'est raisonnable, même s'il y a 5 fichiers)
encore durant 1 ou 2 mois, le temps pour toi de passer à Power BI
pour l'avenir, apprends POWER BI DESKTOP gratuit
ça va te changer la vie
et celle de tes collègues. Tu seras un dieu pour eux
RE
@78chris, j'ai essayé ton idée de segments et je vois que c'est une fonctionnalité fort utile. Mais pour mon cas, à chaque fois que j'insère des segments et je clique sur le bouton "Décaler S+1" (juste pour le test car j'attends aucun résultat de cette action)...
Je n'ai jamais écrit que cela marcherait avec ton code mais que c'était une AUTRE solution
J'ai viré les segments inutiles, adapté le segment des semaines mais ne vois pas de graphique lié à cet onglet.
J'en ai ajouté un pour que tu comprennes le principe car manifestement tu n'as pas saisi...
@78chris, oui je vois de quoi tu parles et cela je vais l'utiliser prochainement pour d'autres améliorations prévue dans l'avenir. Mais pour l'instant je suis encore coincé sur comment adapter le code existant pour mon nouvel onglet. As-tu d'autres idées pour ça ?
Personne pour l'aide ?
En gros je veux créer un graphe qui se met à jour chaque semaine après avoir cliquer sur le bouton "Décaler S+1" affecté à la macro ci-dessous:
Sub DecalerPlageBAS()
'Dim Plage As Range
Dim Nm As Name
Application.ScreenUpdating = False
'On Error Resume Next
'Sheets.Add After:=ActiveSheet
'Range("A1").Select
'Boucle sur les noms du classeur
For Each Nm In ThisWorkbook.Names
If Nm <> "=#NAME?" Then
NOMPLAGE = Nm.Name
Range(Nm).Select
premierecellule = ActiveCell.Offset(Selection.Columns.Count - 1).Address
dernierecellule = ActiveCell.Offset(Selection.Rows.Count - 1).Address
premierecelluleV2 = Range(premierecellule).Offset(1, 0).Address
dernierecelluleV2 = Range(dernierecellule).Offset(1, 0).Address
'définition de ma plage
MaPlage = premierecelluleV2 & ":" & dernierecelluleV2
'Modification de la plage
With ActiveWorkbook.Names(NOMPLAGE)
.Name = NOMPLAGE
.RefersTo = "=Evolution!" & MaPlage
End With
' ActiveCell = Nm
'ActiveCell.Offset(1, 0).Select
End If
Next Nm
Range("A1").Select
ActiveSheet.Calculate
End Sub
Le graphe doit afficher uniquement les données des onze dernières semaines d'où l'utilité de la plage dynamique.
Y a aussi un bouton "Décaler S-1" qui fait un retour en arrière et voici la macro:
Sub DecalerPlageHAUT()
'Dim Plage As Range
Dim Nm As Name
Application.ScreenUpdating = False
'On Error Resume Next
'Sheets.Add After:=ActiveSheet
'Range("A1").Select
'Boucle sur les noms du classeur
For Each Nm In ThisWorkbook.Names
If Nm <> "=#NAME?" Then
NOMPLAGE = Nm.Name
Range(Nm).Select
premierecellule = ActiveCell.Offset(Selection.Columns.Count - 1).Address
dernierecellule = ActiveCell.Offset(Selection.Rows.Count - 1).Address
premierecelluleV2 = Range(premierecellule).Offset(-1, 0).Address
dernierecelluleV2 = Range(dernierecellule).Offset(-1, 0).Address
'définition de ma plage
MaPlage = premierecelluleV2 & ":" & dernierecelluleV2
'Modification de la plage
With ActiveWorkbook.Names(NOMPLAGE)
.Name = NOMPLAGE
.RefersTo = "=Evolution!" & MaPlage
End With
' ActiveCell = Nm
'ActiveCell.Offset(1, 0).Select
End If
Next Nm
Range("A1").Select
ActiveSheet.Calculate
End Sub
Et dans la pièce jointe vous trouverez un échantillon de données qui je veux transformer en graphe.
Merci