Distribuer des données

Bonjour à tous,

Je ne sais pas s'il faut se présenter quelque part...Heureux de tomber sur un forum qui a l'air aussi actif en tout cas.

Je me pose une petite question dans le cadre d'un projet. Je souhaiterais distribuer les données sous excel 2007, voici l'exemple.

Je dispose d'un tableau comme suit :

Truc1 ## Truc2 ## Truc3 ## Truc4

Truc5 ## Truc6 ## Truc7 ## Truc8

Truc9 ## Truc10 ## Truc11 ## Truc12

Et je voudrai obtenir ceci :

Truc1##Truc2

Truc1##Truc3

Truc1##Truc4

Truc5##Truc6

Truc5##Truc7

Truc5##Truc8

Truc9##Truc10

Truc9##Truc11

Truc9##Truc12

Est-ce possible? Ceci consiste en fait à mettre à plat un tableau, à distribuer toutes les données pour permettre de lier des tableaux et ainsi créer un tableau croisé dynamique tout simplement.

Merci!

Truc9

Salut,

N'y a-t-il vraiment que 4 colonnes dans ton tableau ? Si oui, voici une solution quelque soit le nombre de lignes.

Si ce n'est pas ça, joins ton fichier, stpl.

A te relire.

181truc9.zip (9.83 Ko)

Bonjour et merci pour ta réponse.

Non mon fichier contient 1200 lignes et environ 40 colonnes...ce qui risque de démultiplier d'autant plus le nombre de lignes en faisant cette manip.

Je ne peux pas filer le fichier, les données étant confidentielles.

Bien à toi,

NeBu

Salut NeBu,

En ce qui concerne les données confidentielles, tu pourrais les remplacer par des données anonymes. Par exemple où c'est marqué Madame Duchnock, tu remplaces par Nom1 (très utile pour tirer vers le bas ) et ainsi de suite.

L'essentiel pour t'aider étant de connaître la structure exacte de ton fichier (y a-t-il des titres, toutes les cellules du tableau sont-elles remplies, etc., etc.). Et si ton tableau réel comporte 1200 lignes pratiquement identiques, 20 lignes représentatives suffisent.

Tu ne dis pas grand chose de mon premier essai ? Est-ce que c'est déjà un début de solution ? Sinon, peux-tu inscrire manuellement, directement dans ton fichier-exemple, le résultat que tu désirerais automatiser ? Peut-être pas l'entièreté du tableau - 1200 lignes * 40 colonnes = 48'000 résultats - mais juste quatre à cinq exemples vers la droite et quatre à cinq exemples vers le bas.

Si tu as autant de colonnes et de lignes, désires-tu ta distribution dans les colonnes suivantes ou plutôt sur une feuille séparée ? Avec des titres ?

NeBuKaT a écrit :

...ce qui risque de démultiplier d'autant plus le nombre de lignes en faisant cette manip.

Je ne pense pas que ça fasse trop peur à Excel.

A te relire.

Bonjour Yvouille,

Tout d'abord, merci pour ton fichier qui correspond exactement à ce à quoi je souhaite arriver.

Comment crées-tu cette macro?

Voici mon fichier avec des noms modifiés.

J'aimerais donc que les ventes mensuelles, qui sont dispatchées en colonne, soient dispatchées par Vendor ID en ligne.

En gros

Vendor ID 1 # 2010 # Jan # ventejan10

Vendor ID 1 # 2010 # Fev # ventefev10

Vendor ID 1 # 2010 # Mars # ventemar10

Vendor ID 4 # 2010 # Jan # ventejan10

Vendor ID 4 # 2010 # Fev # ventefev10

etc

Merci!

Salut NeBu,

Evite d'envoyer tes fichiers par des moyens assez compliqués ; la première fois que j'ai voulu charger ton fichier, j'ai dû comprendre comment fonctionne ce site (attendre quelques secondes que ça charge, etc.) et un peu plus tard ça indiquait que ce site était indisponible pour l'instant, qu'il fallait réessayer plus tard Tu peux utiliser de préférence l'option en dessous de ton message (avec un dossier compressé si nécessaire).

Pour ton fichier, j'ai repris toutes les colonnes indépendamment de leur titre (Dates ou indications "SB Subtotal" ou "Avg") et ai reporté les valeurs sur la nouvelle feuille "Date bis", basée sur la structure de ta feuille "Date" à l'aide du bouton placé dans la cellule A1.

NeBuKaT a écrit :

J'aimerais donc que les ventes mensuelles ....

Si tu ne désires vraiment que les ventes mensuelles - sans "SB Subtotal" ou "Avg" - doivent-elles être séparées par années, par exemple sur des feuilles ou des colonnes séparées ?

Dans ton fichier original, il y a des cellules comportant des messages d'erreur #DIV/0 (dès la cellule P216). Dans le fichier ci-joint, je les ai remplacés par des chiffres. Tu devrais trouver une formule qui empêche ces messages d'erreur, sinon il faudra modifier le code VBA.

A te relire

Edit à 19:00 : En fait je m'étais rendu compte que, sur ta feuille "Date", tu avais placé l'année séparément en colonne B puis j'ai complètement oublié d'inclure ça à mon code. Ceci serait normalement assez facilement réparable. De plus je me rends compte seulement maintenant que tu ne reportais que les données de l'année 2010.

Avant de corriger quoi que ce soit, je préfère attendre tes commentaires concernant toutes les questions ouvertes. Autres possibilités et ou questions : Pourquoi reporter à chaque fois la date si c'est toujours la même, si tu ne reportes les données que d'une seule année ? Si on reporte toutes les années, les inscrire dans la colonne B ou comme titre de plusieurs colonnes, séparées par année ? Veux-tu reporter les données "SB Subtotal" ou "Avg" aussi, mais dans une autre colonne, par exemple en regard des données du dernier mois de chaque vendeur ? Ou calculer, après report, le total de l'année de chacun ?

90nebukat-v1.zip (30.03 Ko)

Bonjour,

C'est exactement ce dont j'avais besoin, la distribution est parfaite.

Effectivement, je n'ai pas forcément besoin de Avg et Total.

Comment avez-vous fait cette macro? VBA? Le code est-il compliqué?

Encore merci pour votre aide,

Au plaisir,

NeBu

Salut NeBu,

Si tu es content avec cette macro imparfaite, je présume que c'était un travail unique !?

NeBuKaT a écrit :

Comment avez-vous fait cette macro? VBA? Le code est-il compliqué?

Macros et codes VBA sont selon moi synonymes. Ils sont visibles dans l'éditeur Visual Basic (Alt + F11). Voici une reproduction du code concerné :

Option Explicit
Sub a()

Dim DerLigB As Integer, DerLigA As Integer, i As Integer, j As Integer, k As Integer
Dim Réf_Vendeur As String, Réf_Titre As String, Réf_Chiffre As Integer

Application.ScreenUpdating = False

DerLigB = ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row

Sheets("Date bis").Range("A2:G65536").ClearContents
k = Cells(1, 256).End(xlToLeft).Column

For i = 2 To DerLigB ' nombre de lignes à traiter
    Réf_Vendeur = Cells(i, 2)

    For j = 3 To k ' nombre de colonnes à traiter
        Réf_Titre = Cells(1, j)
        Réf_Chiffre = Cells(i, j)
        DerLigA = Sheets("Date bis").Range("A" & Rows.Count).End(xlUp).Row

        With Sheets("Date bis")
            .Cells(DerLigA + 1, 1) = Réf_Vendeur
            .Cells(DerLigA + 1, 2) = Réf_Titre
            .Cells(DerLigA + 1, 3) = Réf_Chiffre
        End With

    Next
Next
End Sub

Bonnes salutations.

Ce n'est pas que c'est un job one shot, mais je ne connais absolument rien au code VBA!

D'ailleurs, merci beaucoup pour cette aide.

Dans l'idée, j'aimerais pouvoir m'appuyer sur cette macro pour l'utiliser sur d'autres fichiers. Le principe de cette macro restera le même pour tous mes fichiers, mais les fichiers sources seront susceptibles d'évoluer!

Une idée?

Merci!

NeBuKaT a écrit :

j'aimerais pouvoir m'appuyer sur cette macro pour l'utiliser sur d'autres fichiers.

Ceci est uniquement possible si tu sais transférer les codes d'un fichier à l'autre et que ces fichiers aient exactement la même structure que le fichier de base, sinon tu risques d'avoir des surprises !
NeBuKaT a écrit :

mais les fichiers sources seront susceptibles d'évoluer!

Selon les cas, ton code sera parfaitement utilisable ou à modifier complètement. L'idéal serait d'avoir un fichier exemple avec la structure actuelle et des indications très précises sur l'évolution possible.

A te relire

Bonjour Yvouille,

Je vais tâcher de rappliquer cette formule à mon fichier d'origine. En tout cas, merci encore pour votre aide. Je conserve précieusement ce thread dans mes favoris et n'hésiterai pas à vous contacter si un problème survient.

Bien à vous,

NeBu

-- 23 Mar 2011, 04:29 --

Bon, après avoir mis le nez dans la macro, je suis un peu perdu Je ne connais pas du tout ce langage de programmation (en fait j'en connais aucun).

J'ai fait quelques recherches sur le net pour comprendre ce langage, mais cela reste assez flou.

En fait, je ne comprends absolument pas où sont les références dans cette macro. Il n'y a pas de "noms" qui me semblent logiques et qui me permettraient donc de les modifier en fonction du fichier excel que j'utilise. Même en copie/collant cette macro dans un autre fichier excel et en utilisant la fonction de débogage, je ne vois pas le caractère à modifier.

Pourriez-vous m'éclairer sur la signification de ces termes : Dim DerLigB As Integer, DerLigA As Integer, i As Integer, j As Integer, k As Integer

Dim Réf_Vendeur As String, Réf_Titre As String, Réf_Chiffre As Integer

Merci!

Edit 04:51

Après avoir également regardé en profondeur l’exécution de la macro, il y a un problème au niveau des dates.

D'une part, j'aimerais avoir l'année et le mois sur 2 colonnes distinctes, et si ce n'est pas possible, il faudrait que la date corresponde. Ici, tout est en 2011...c'est le jour qui varie entre le 10 et le 11

Le total et la moyenne ne sont pas nécessaires par ailleurs.

Merci

Salut,

A voir certaines de tes questions, tu ne prêtes apparemment pas grande attention aux textes que je t’écris ni aux fichiers que je te fournis.

Le 5 mars j’ai dû t’écrire : « Tu ne dis pas grand-chose de mon premier essai ». Dans ton dernier message tu attends ta deuxième édition du 23 mars à 04:51 pour me dire que tu as enfin regardé en profondeur l’exécution de ma macro et que tu as constaté un problème de date. Mais je t’avais déjà informé de ce problème le 6 mars, par mon « Edit » de 19:00 !!

Tu me poses également des questions au sujet du transfert des codes d’un fichier à un autre, mais je t’ai déjà informé à ce sujet précédemment.

Yvouille a écrit :

Ceci est uniquement possible si tu sais transférer les codes d'un fichier à l'autre et que ces fichiers aient exactement la même structure que le fichier de base, sinon tu risques d'avoir des surprises !

Enfin, en ce qui concerne l’étude des codes VBA, tu ne demandes ni plus ni moins qu’un cours complet . Pour cela, il y a des tutoriels sur Internet (entre autre sur ce Forum), des bouquins, des cours ...

Je te fournis un nouveau fichier avec cette dernière correction au niveau des dates.

Yvouille a écrit :

Selon les cas, ton code sera parfaitement utilisable ou à modifier complètement. L'idéal serait d'avoir un fichier exemple avec la structure actuelle et des indications très précises sur l'évolution possible.

Bonnes salutations.

18nebukat-v2.zip (29.40 Ko)

Si si je lis...mais, c'est neuf pour moi

Je te remercie pour cette dernière modification. A part du turbo pascal lorsque j'étais en prépa, je n'ai jamais touché à la programmation. Sauf un peu sous Qlikview...mais c'est plutôt du SQL simplifié!

Donc, là, je nage en plein délire avec ton code VBA (aussi basique, simple et performant soit-il).

Je vais tâcher de regarder sur le net quelques cours. Je te remercie pour ton aide et ton temps.

Au plaisir,

NeBu

Rechercher des sujets similaires à "distribuer donnees"