Macro que je n'arrive pas à faire (récupérer des lignes)

Bonjour,

Avant tout, bonne fin d'année à tous, et j'espère qu'elles ont bien commencé.

Je suis en train de travailler sur un projet.

J'ai des formes qui représente des régions sur une feuille TAB

J'ai trois tableau (TCD, mais cela n'a pas vraiment d'importance) qui se trouve sur une feuille Calcul.

Ces trois tableau reprennent toutes mes données.

Chaque tableau est constitué de colonnes qui correspondent à mes secteurs (ou régions si vous voulez). Ces colonnes resteront donc figées.

Seules le nombre de lignes varient, et cela pour chacun des tableau.

L'objectif est que lorsque je clique sur une forme qui correspond à un secteur sur ma feuille TAB.

Cela rempli trois tableau sur ma page TAB, en récupérant des lignes de des tableaux figurant sur la feuille Calcul.

En sachant que chacun de ces tableau à une barre de défilement (barre de formulaire classique avec cellule liée).

J'ai commencé à faire la macro et inscrire les variable.

Le début de la macro fonctionne en ce qui concerne les formes. (La forme sélectionnée change de couleur).

Je met ici ce que j'ai fait, mais bon, je ne vous cache pas que je suis à la peine.

Option Explicit

Sub forme_Interactive()

'Déclaration des variables
Dim Nomcadre As String
Dim Shape
Dim Noligne As Integer
Dim Nocolonne As Integer
Dim Nomcommercial As String
Dim Nomsecteur As String
Dim Nomproduit As String
Dim Montantcom As Currency
Dim Montantprod As Currency
Dim Montantclient As Currency
Dim Rangcom As Integer
Dim Rangprod As Integer
Dim Rangclient As Integer
Dim Pourcentagecom As Single
Dim Pourcentageprod As Single
Dim Pourcentageclient As Single

'Propriété caller : permettre d'afficher la manière dont visual basic est appelé
    Nomcadre = Application.Caller

'Mise en couleur par défaut la carte'

For Each Shape In ActiveSheet.Shapes 'Pour chacune des formes de la feuille active
   Shape.Fill.ForeColor.RGB = RGB(176, 206, 164) 'on applique une couleur à la forme
Next Shape

'on affecte une couleur lorsque la forme est sélectionnée
ActiveSheet.Shapes(Nomcadre).Fill.ForeColor.RGB = RGB(235, 241, 222)

'******************************************************************************* (le code marche jusqu'ici)

NBcom = 8 + Sheets("Calcul").Range("A1") 'selon le calcul de lignes inscrit dans la cellule A1 de la feuille calcul'
NBprod = 8 + Sheets("Calcul").Range("CC1") 'selon le calcul de lignes inscrit dans la cellule A1 de la feuille calcul'
Nbclient = 8 + Sheets("Calcul").Range("FD1") 'selon le calcul de lignes inscrit dans la cellule A1 de la feuille calcul'

'on boucle pour parcourir toute les lignes du tableau et récupérer les valeurs
For Noligne = 8 To NBcom

If Nomsecteur = Nomcadre Then 'si le nom de la région est égal au nom de la forme

Range("N" & Noligne).Select
            'On parcourt les colonnes
            'décalage d'une colonne à chaque passage de la boucle et coloriage de la ligne
            For Nocolonne = 0 To 5
                ActiveCell.Offset(0, Nocolonne).Interior.ColorIndex = 15
                ActiveCell.Offset(0, Nocolonne).Font.Color = RGB(0, 0, 255)

            Next Nocolonne

For Noligne = 8 To NBcom 'Comme on ne peut pas déterminer le nombre de ligne qui est inconnue

    'Affectation des variables
    Nomcommercial = Sheets("Calcul").Range("A" & Noligne).Value
    Nomsecteur = Sheets("Calcul").Range("Nocolonne" & 8 + Range("A1")).Value 'cela se trouve sur feuille calcul, sur la ligne 6 et les colonnes allant de B à BR'
    Montantcom = Sheets("Calcul").Range("Nocolonne" & 8 + Range("A1")).Value
    Rangcom = Sheets("Calcul").Range("Nocolonne" & 8 + Range("A1")).Value
    Pourcentagecom = Sheets("Calcul").Range("Nocolonne" & 8 + Range("A1")).Value

    'Afficher les contenus des données sélectionnées'

    Range("N6").Value = Nomcommercial
    Range("O6").Value = Nomsecteur
    Range("P6").Value = Montantcom
    Range("Q6").Value = Pourcentagecom
    Range("R6").Value = Rangcom

Next Noligne

        End If

End Sub

Si quelqu'un est assez doué pour faire que la macro fonctionne pour remplis le premier tableau de la page TAB, et le début du second, je pense que je devrais être capable de finir le reste.

Je mets le fichier joint

Merci par avance, et n'hésitez pas si vous avez des questions.

Bonsoir

A tester

Banzai64 a écrit :

Bonsoir

A tester

Bonjour Banzai64,

Cela fait plaisir d'être de nouveau en contact avec toi. J'espère que tu as passé un bon Noël et que la fin d'année se déroule bien pour toi.

Je voudrais te féliciter pour le code que tu as fait, c'est vraiment incroyable, ce que tu as réussi à faire. Je m’aperçois que j'étais parti dans un mauvaise direction, et que je n'étais pas sorti de l'auberge.

Je n'ai pas tout compris du code, il me faudra du temps pour le comprendre.

J'ai fait différents test, et j'ai ajouter une option à laquelle j'avais pensé depuis le début, mais que je ne pensais pas que cela allez poser problème.

J'ai également résolu par des astuces, certaines choses qui pouvaient poser problèmes. (exemple, imaginons que la base de données soit vierge et que l'on rentre le premier enregistrement. La macro ne fonctionnerait pas, car les colonnes des tableaux ne comporterait qu'un seul secteur (région). J'ai donc fait en sorte que les tableaux restent avec la même structure (avec ou sans données, ce qui est important surtout pour les colonnes et les noms des champs).

Je vais donc développer ici les différents points qu'il faudrait améliorer pour que le code soit vraiment fonctionnel.

Je ne vais pas les développer par ordre de difficulté, car parfois ce qui paraît simple est en réalité compliqué, et inversement.

1 point :

Pour les trois tableaux, si les montant sont vide, alors ne pas afficher les lignes correspondantes.

Sans doute faut-il créer une variable montant ou 3 pour chacun des tableaux avec

Dim Montant As Currency 'Currency comme ce sont des nombres

Si le montant est vide, n'affiche pas la ligne, sinon affiche la ligne (cela pour les trois tableaux)

Sachant que si je prends ma ligne 10 par exemple (dans la feuille Calcul), le montant de la ligne 10 du premier tableau peut être vide, mais ne pas l'être pour le tableau 2 et/ou 3.

2 point :

J'ai cru pouvoir mettre les cellules, voir la colonne Q de la feuille TAB en format pourcentage, mais dès que tu fais fonctionner la macro, cela remet les chiffres en mode normal. Impossible de les laisser en pourcentages.

De même que pour centrer les chiffres de la colonne R de la feuille TAB qui concerne les rang.

Pour les pourcentages, je pensais que dans le code il y avait une variable pour eux, et j'aurais dans ce cas, mis :

Dim Pourcentagecom As Single 'Single, c'est pour les pourcentages

Je n'ai pas la solution, peut être faut-il indiquer dans la macro que la colonne Q de la feuille TAB soit au format pourcentage, et que la colonne R doit être centré.

3 point :

J'ai rajouté un segment mois, qui permet de filtrer les données par mois ou sélection de mois.

La macro fonctionne, mais c'est vrai que je n'avais pas pensé que dans ce cas, si je clique sur mon segment "Mois", elle ne fait pas apparaître les données de ma sélection.

Pour cela, je dois de nouveau appuyer sur la forme correspondant au secteur (région voulu).

L'objectif serait que lorsque je clique sur mon segment, les données changent dans mes trois tableaux.

Alors pas de panique, j'ai peut être, je dis bien peut-être un début de solution.

Je m'explique :

Nous savons que les barres de défilement se remettent à 1 lorsque nous cliquons sur une forme.

Cela fonctionne pour le segment "Mois"

j'ai rajouter dans la feuille ThisWorkBook, le code suivant

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
        Sheets("TAB").Range("A5") = 1
        Sheets("TAB").Range("A10") = 1
        Sheets("TAB").Range("A15") = 1

 [code]  ' CallByName Banzai64, "forme_Interactive", VbMethod

End Sub

[/code]

Ce qui fait que lorsque l'on clique sur le segment Mois, les cellules liées de la barre de défilement se remettent à 1.

Ensuite, je me suis souvenu que l'on peut affecter une macro au segment.

J'ai donc essayer d'affecter la macro "Sub forme_Interactive()" mais cela ne fonctionne pas.

Alors, je me suis dis que sans doute, si je faisais comme pour les cellules liées, peut-être que cela fonctionnerait. A savoir, la macro se met en route, lorsque je clique sur le segment.

Ce qui explique que j'ai rajouté cette ligne de code dans la page ThisWorkBook, afin d'appeler l’exécution de la macro à titre événementielle

 CallByName Banzai64, "forme_Interactive", VbMethod

mais bon, comme tu peux le voir, j'ai pas su mettre cela en application en ce qui concerne la macro.

4 point :

J'ai testé le programme en enlevant tous les données.

La bonne nouvelle,c' est que j'ai pu avec des paramétrages de TCD, garder la structure des tableaux.

Cependant, la macro bug, car il ne trouve pas l'élément à aller chercher.

Sans doute faire que si l'élément est vide pour la première ligne des tableaux (Ligne 8), alors la macro ne fait rien.

Petite mauvaise nouvelle :

J'ai chercher à modifier le E (avec l'accent aigu) que je n'arrive toujours pas à faire pour le secteur l'Etang-Salé.

Bref, je n'y suis pas arrivé, et j'ai mis le E sans accent. (J'arrive à mettre l'accent en passant par insertion symbole, mais pas avec le raccourci clavier.)

Quand en plus, il faut faire cela pour nommer une forme, cela devient plus compliqué (car tu ne peux pas faire de copier coller, ni utiliser l'insertion symbole).

Bref, je ne sais pas ce que j'ai fabriqué, mais ma forme concernant l'Etang-Salé, apparaît deux fois dans mon TCD. Un avec un accent, et un autre sans accent.

Le fichier a gardé en mémoire, l'Etang-Salé écrit avec accent dans ma source de donnée, et pris en compte le nom de ma forme Etang-Salé sans accent.

Mais, les colonnes des tableaux se sont rallongées, mais cela n'affecte pas la macro. Cependant, il faudra que je règle ce problème en refaisant mon fichier, afin de remettre en ordre les colonnes des tableaux de la feuille Calcul.

Voilà, les quatre points essentiels qui feront que la macro sera fonctionnelle, et on peut le dire, parfaite.

Je mets le fichier en deux versions

Suivi avec données et suivi sans données, afin de voir ou la macro bug, quand il n'y a pas de données (c'est juste le fait qu'il ne trouve pas le premier élément à aller chercher).

Je tiens encore à te féliciter, car ce matin, quand je me suis réveillé, je n'en revenais pas de ce que tu avais réussi à faire. J'en croyais pas mes yeux, et tu m'as redonné du courage à la fois.

Merci à toi Banzai64

Bonjour

J'ai essayé de faire ce que j'ai compris, mais ton histoire de segment hé bien

Si tu veux avoir une chance que je trouve un moyen de faire ce que tu veux, il faut que tu m'expliques de la manière que tu expliquerais à un enfant de 3 ans (âge que j'aurais dans quelques jours)

Les TCD (entre autres) je n'y connais rien et je n'arrive même pas à comprendre leur utilité (surement parce que je n'en utilise pas - mais je dors bien quand même)

Donc en premier tu testes le programme et tu fais un retour

Banzai64,

Tu m'as fait rire avec les TCD.

Concernant les segments, ce sont des fenêtres qui sont liés aux des TCD.

Ces segments font office de filtres sur le ou les tableaux des TCD que tu décides de connecter.

lorsque tu créé un segment, tu peux décider avec quel TCD il sera lié.

Le segment mois que j'ai créé en deux secondes, me permet de filtrer les données par mois, et cela pour les trois tableaux de ma feuille calcul.

Quand je clique sur une forme, j'ai les données qui correspond à mon secteur, pour toutes les données de ma base.

La macro ne fait aucune distinction au niveau des dates.

Le segment mois, me permet ici de sélectionner que les mois désirés. Je peux sélectionner un ou plusieurs mois en même temps. (il faut appuyer sur la touche Ctrl, si on veut le mois de janvier et avril mai par exemple).

Ta macro marche super bien.

Le seul truc que j'ai oublié au départ, c'est cette histoire de segment.

En principe, je fais des choses avec des formules qui vont récupérer des données. Comme les formules se calcul automatiquement à chaque changement, le fait d'intégrer un segment ne pose pas de problème, puis le calcul avec les formule est automatique.

Si je clique sur mon segment, les données correpondantes à mes formules changent, et le résultat apparait instantanément.

En ce qui concerne les macros, que je ne connais pratiquement pas, si je clique sur un mois, rien ne change au niveau des chiffres dans les tableaux de ma feuille TAB.

Concernant le segment mois sur la feuille calcul, et si tu clique sur les mois, tu verras les données des tableaux de la feuille calcul changer instantanément, en fonction des mois sélectionné.

Ainsi, je n'ai pas penser à ce souci au départ pour la macro, car je raisonner comme si cela fonctionné comme des formules.

Si tu sélectionne un secteur sur la feuille TAB, tu verras changer les données dans les tableaux de la feuilles TAB

Cependant, les données de mes tableaux de la feuille calcul seront toujours les mêmes, puisqque sur ces tableaux, j'ai fait apparître toutes les données des secteurs.

Si tu cliques maintenant sur le mois de janvier du segment de la feuille TAB, tu verras que les données des tableaux de la feuille TAB ne changeront pas. Alors que les données de la feuille calcul auront toutes changées, puisque le segment aura agi sur les TCD de la feuille calcul, en faisant ressortir que les données du mois de janvier.

Pour voir apparaître les nouvelles données du secteur, tu dois donc de nouveau cliquer sur le secteur, pour voir apparaître les nouvelles données.

Exemple,

clique sur le secteur Bras-Panon, tu verras les données de ce secteurs apparaître dans les trois tableaux de la feuille TAB

Si tu clique sur le mois de janvier, tu ne verras pas de changement sur la feuille TAB, (alors que les données auront été modifiés pour les tableaux de la feuille cacul).

Maintenant, si tu cliques de nouveau sur le secteur Bras-Panon, tu verras de nouvelles données dans tes tableaux de la feuille TAB , qui correspondront aux données des tableaux de la feuille calcul..

Ce sera les données pour le mois de janvier. Ton segment aura filtré toutes les données pour tous les secteurs afin de prendre que celles qui concernent janvier.

Le truc, c'est de faire que lorsque que l'on clique sur le segment mois, les données changent automatiquement dans les tableaux de la feuilles TAB.

Exemple je clique sur Bras-Panon, (j'ai toutes les données de l'année pour Bras-Panon)

je clique sur le segment mois de janvier, et là il faudrait que les données des tableaux de la feuille TAB inscrivent les données du mois de janvier qui sont inscitent dans la feuille calcul.

Cela sans avoir besoin de cliquer de nouveau sur le secteur Bras-Panon pour faire apparaître les données. de janvier.

C'est pour cela, que je reste persuadé que la solution se trouve sur le bout de code que j'ai mis dans la feuille ThisWorkBook.

pourquoi je dis cela, car j'avais un problème a peu près similaire que l'on m'a résolu, c'est Raja qui est sur le forum qui a trouvé le truc. Au départ, il pensait que ce n'était pas possible.

En fait, je voulais que lorsque l'on clique sur le segment (sélectionne des mois ou efface le filtre en appuyant sur la petite crois rouge en haut à droite de la fenêtre segment), ma cellule liée de ma barre de défilement se remette à 0.

Ce qui fait que j'ai recopié sa ligne de code pour le fichier qui remet mes cellule liées à 1, si on clique sur le segment mois.

Et ca marche, voici ce que j'ai mis sur la feuille ThisWorkBook

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
        Sheets("TAB").Range("A5") = 1
        Sheets("TAB").Range("A10") = 1
        Sheets("TAB").Range("A15") = 1

   ' CallByName Banzai64, "forme_Interactive", VbMethod

 End Sub

Je pense que pour arriver à ce que lorsque je clique sur le segment mois, les données apparaissent dans les tableaux de la feuille *tab, il faut que lorsque je clique sur le segment mois, cela déclenche ensuite la macro forme interactive.

La macro est appelé suit à un événement, c'est ce que j'ai essayé de faire, mais je ne connais pas assez le code VBA, j'ai vue qu'il y avait Call macro, ou Excel.run,

La solution doit nécessité une ligne de code pas plus.

mais, je ne sais pas comment l'écrire pour appeler la macro forme interactive, qu'il faudra insérer dans la page Thisworkbook, avec les lignes qui remettent à 1 les cellules liées des barres, lorsque j'utilise le segment.

Voilà, il manque pas grand chose, mais c'est en même temps important

J'ai mis le fichier avec 4 lignes de codes dans thisworkbook et celle que j'ai essayé, mais il doit y avoir une erreur de syntaxe :

(' CallByName Banzai64, "forme_Interactive", VbMethod)

Si prêt du but, il juste manquer cette ligne de code à mettre dans thisworkbook

Courage,

Bonjour

N'appuie pas sur "Citer" pour répondre à un message, cela encombre le post pour rien

Tu as un bouton "Répondre" en bas à gauche du dernier message

A tester

Merci Banzai64

Le résultat est parfait, excellent, vraiment.

J'ai regarder un peu le code, mais il faudra vraiment que je passe un long moment dessus.

J'espère pour toi que la fin d'année va bien se terminer.

Et encore une fois un GRAND MERCI pour ta patience et ton travail.

je te souhaite une bonne soirée, et n'hésite pas si tu as des questions sur les TCD, car il y a plein de petits trucs à savoir et astuces.

Rechercher des sujets similaires à "macro que arrive pas recuperer lignes"