Macro complexe pour traitement de données importées

Bonjour à tous,

honnêtement, là je me sens impuissant. Pour diverses raisons (maladie et départ de collègues), je suis surbooké.

Pour gagner un peu de temps, je voudrais créér un outil qui me faciliterait le travaiL

En deux mots, juqu'à présent, après importation de données d'un autre programme, j'en faisais de façon empirique et manuellement un traitement multiple dans excel qui me donnait un "tableau de bord des sommes dépensées".

Je cheche une solution pour remplacer ces diverses procédures manuelles par un outil automatique.

Vous trouverez dans le fichier le début de mes besoins (en bleu). Je reste bien entendu à votre entière disposition pour tout éclaircissement.

D'avance merci pour le coup de main, d'autant plus que je sais à peu près le résultat voulu mais je n'arrive pas à trouver par quel bout commencer.

A bientôt, et d'avance, merci milles fois,

amcalement,

Elfi

Bonjour,

voici un début de solution, il me reste qu'a rafraichir le tableau principal. Au lieu d'ajouter les données qui n'était pas présentent dans les feuilles "Ligne", je me suis dit que ça serait plus rapide de tout effacer et de tout ajouter à chaque fois. Dis moi si c'est dans la bonne voie.

La procedure

Public Sub MajTableau(MaZone As Range)
    Dim MaLigne As Range
    Dim Ws As Worksheet

    'On vide les tableaux
    For Each Ws In Worksheets
        If Left(Ws.Name, 5) = "Ligne" Then

           Ws.Range("B3:E65536").ClearContents
        End If
    Next Ws

    For Each MaLigne In MaZone.Rows
        With Sheets(MaLigne.Cells(1, 3).Value)

            Dim DernLign As Integer
            DernLign = .Range("B65536").End(xlUp).Offset(1, 0).Row

            .Range("B" & DernLign).Value = MaLigne.Cells(1, 1).Value
            .Range("C" & DernLign).Value = MaLigne.Cells(1, 2).Value
            .Range("D" & DernLign).Value = MaLigne.Cells(1, 4).Value
            .Range("E" & DernLign).Value = MaLigne.Cells(1, 5).Value
        End With
    Next MaLigne

    'On rafraichis les TCD
    For Each Ws In Worksheets
        If Left(Ws.Name, 5) = "Ligne" Then
           Ws.PivotTables(1).PivotCache.Refresh
        End If
    Next Ws

End Sub

Bonjour Math,

d'ors et déjà, merci car tu t'es appoché trés vite de ce qu'il me faut.

J'ai testé ton travail et la mise à jour est super. Pour aller plus loin, deux soucis:

a) Les TCD de "ligne 2" et "ligne 3" font référence au tableau de "ligne 1".

b) Après le rafraichissement, la base du TCD intègre des cellules vides ce qui fait que je ne peux plus grouper les dates par mois et trimestre dans le TCD.

Peut-être as-tu prévu tout cela par la suite en travaillant sur le tableau principal. J'avoue que je suis assez impuissant mais j'ai confiance!

Encore une fois, merci d'avance,

A te relire,

Amicalement,

Elfi

Voici une deuxième version, je ne suis pas sur de la façon dont tu veux que les TCD foncitonnent.

J'ai essayé de cette façon, à toi de voir. Durant la mise-a-jour des données j'ai ajouté deux colonnes Mois et Trimestre qui sont calculé automatiquement.

Regarde ça et revient moi.

Bonjour.

Mes excuses pour le retard de ma réponse. Une angine en été, c'est pas de bol. J'ai regardé la deuxième mouture. Ca a l'air d'être exactement ce que je désirais.

Je teste avec le vrai fichier aujourd'hui ou demain et te tiens au courant.

En tout cas, chapeau d'avance et merci mille fois.

A +,

amicalement,

Elfi

-- Mar Aoû 17, 2010 1:24 pm --

Bonjour le forum,

Bonjour Math.

J'ai testé et ça fonctionne avec le fichier "théorique".

Avec le fichier pratique, mon problème est le suivant: mon import contient des N° et non des noms. exemple:

Colonne C de la feuille Fichier import(N° de ligne): 1459, 1448, etc.

Mon classeur lui, possède une feuille par n°, exemple feuille "1459", "1448", etc.

Comment adapter ton code sans la mention "ligne ..."?

En cas de problème, je te ferai passer le fichier original vide, peut-être cela sera-t-il plus parlant.

D'avance merci,

amicalement,

Elfi

-- Mar Aoû 17, 2010 2:32 pm --

Rebonjour,

et encore merci à Math pour sa patience.

le mieux est de faire passer le fichier original.

J'ai "collé" le travail de Math mais la mise à jour (feuille "fichier import") ne fonctionne plus. Peut-être n'est-ce pas trop grave, enfin, j'espère.

Amicalement,

Elfi

Rebonjour le forum,

hello Math,

Coucou Claude,

Voila, grâce à Claude j'ai résolu une partie de mon problème en modifiant dans le module 'fichier' les références aux feuilles concernées.

If Ws.Name <> "évolution des sommes payées." And Ws.Name <> "Fichier import" Then

Mon problème maintenant est que la ligne

"With Sheets(MaLigne.Cells(1, 3).Value)"

m'envoie une erreur d'exécution '9': <<l'indice n'appartient pas à la sélection.>>

Là, je me sens tout petit et je ne comprend pas pourquoi.

Merci de bien vouloir éclairer ma lanterne.

Bien cordialement,

Elfi

Bonjour Elfi, content de voir que ça marche.

Pour ton problème, remplace par la ligne suivante

With Sheets(CStr(MaLigne.Cells(1, 3).Value))

tes noms de cellules sont des nombres et il semble que Excel aie de la misère à interpreter. Alors on convertit le nombre en texte et ça fonctionne.

Bonne journée

PS Claude ça serait bien que tu répondes dans le post, pour que tout le monde puisse suivre le fil.

Hello Math,

super génial, ça marche!!!!

J'essaie demain avec un véritable import et je te tiens au courant.

Ceci dit, tout ceci est pour moi du chinois. Serait-il possible de te contacter en privé (pour éviter de surcharger le forum) afin d'avoir pas à pas l'explication du code voire plus? Bien entendu, dans le respect total de ton temps disponible.

Pour ton PS, Claude n'est pas à incriminer. C'est moi qui avais fait un autre post (<<Langage VBA:choisir des feuilles bien particulières>>) afin de ne pas surcherger celui-ci. Méa-Culpa!

A te relire et encore milles fois merci,

Amicalement,

Elfi

-- Mer Aoû 18, 2010 3:53 pm --

Coucou Math, me revoilou.

Décidément, j'ai décidé de t'embêter.

Voila, je t'explique: normalement, il n'y aurait pas besoin de créer une colonne mois et trimestre. En effet, avec le TCD, on peux grouper les dates en mois et en trimestre (option grouper). Le problème est que pour cela, la base du TCD ne doit pas faire référence à des lignes vides.

Y a -t-il une solution dans le code pour ne donner en référence que les lignes remplies des tableaux après de la mise à jour et lors du raffraichissement des TCD? Sinon, pas grave, je conserverai les colonnes mois et trimestre.

A te relire,

avec toute ma reconnaissance à toi et à tous les forumeurs.

Amicalement,

Elfi

Une solution serait de définir des noms pour tes plages de données et d'y faire référence dans tes TCD. Quand on lance la mise à jour, on n'a qu'à redimensionner la liste de nom avant de mettre le TCD à jour. J'ai modifié la dernière partie du code:

    For Each Ws In Worksheets
        If Ws.Name <> "évolution des sommes payées." And Ws.Name <> "Fichier import" Then
           'Redimension des plages de données
           Dim Lgn As Integer
           Lgn = Ws.Range("B65536").End(xlUp).Offset(1, 0).Row - 1
           ActiveWorkbook.Names.Add Name:="Data" & Ws.Name, RefersTo:="=" & Ws.Name & "!$B$2:$E$" & Lgn

           Ws.PivotTables(1).PivotCache.Refresh
        End If
    Next Ws

Roule le code une première fois. Ensuite modifie tes TCD pour qu'ils aient le noms de la plages EX: Data1475 au lieu de '1475'!$B$2:$E$34.

Pour nommer les plages j'ai utilisé Data + le nom de la feuille. Pour l'option grouper, je ne la connaissais pas, j'utilise rarement les TCD. Essaie le nouveau code pour voir si ça fonctionne et donne moi des nouvelles. C'est ok si tu veux des esplications plus détaillé en privé.

Pour mon message à Claude, ce n'était nullement une attaque envers lui.

Bonjour le forum,

Bonjour Math.

Message bien reçu, la définition des noms est intéressante. Je m'y plonge et te tiens au courant.

Amicalement,

Elfi

-- Jeu Aoû 19, 2010 9:53 am --

Rebonjour à tous,

Math, Yaouh, c'est génial.

J'ai fait tout ce que tu m'as dit avec un exemple de trois lignes (feuilles, nom, etc). On arrive exactement à ce que je voulais. Mon tableau global se met à jour, mes TCD se modifient automatiquement, enfin bref, c'est fantastique.

Je te joins l'exemple pour que tu vois.

Vraiment, bravo pour ton panache et tes capacités!

Bravo aussi à ce forum génial.

Milles mercis une nouvelle fois.

Math, je reste en contact pour les explications. A bientôt,

Amicalement,

Elfi

Rechercher des sujets similaires à "macro complexe traitement donnees importees"