IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Extraction données d'un TCD vers une autre feuille


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2007
    Messages : 33
    Points : 20
    Points
    20
    Par défaut Extraction données d'un TCD vers une autre feuille
    Bonjour,

    Je sollicite le forum car j'ai besoin d'infos pour pouvoir extraire des données d’un TCD vers un autre feuille.

    Pour faire simple :
    1- J’extrais des données via un site web (feuille data)
    2- Afin de compiler les données par magasins, j’ai créé un TCD (feuille TCD)
    3- Et pour terminer, je souhaiterai renvoyer les données du TCD dans la feuille SYNTH (comme dans l’exemple - Nom du magasisn et nbre d'emballages par type + N° bordereau) Et là, tout se complique car tous les emballages ne sont pas retournés tous les jours du coup je ne peux pas avoir de lien fixe entre mon TCD et ma feuille SYNTH !!

    Je n’arrive pas à renvoyer les données car le TCD par définition n’a pas de données fixe comme un tableau standard.
    Pour être honnête je ne suis pas expert en macro, je me débrouille juste un peu. Pourriez vous m'éclairer sur le sujet afin que je comprenne le principe à mettre en oeuvre.
    J'ai fait un petit fichier excel associé pour être plus clair. Pour plus de simplicité, j’ai allégé le fichier et retiré le code des différents liens entre fichier externes.

    Merci pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Salut jeremy383,

    Alors ta demande est très spécifique.
    Ne visualisant pas bien les modifications que tu pourras avoir à ton TCD, j'ai fait une petite macro qui fonctionne pour le fichier que tu as fourni.
    Il va y a voir des modifications à faire probablement si ton TCD change beaucoup.

    Voici ce que je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub test_export()
    Dim rng_fin As Range
    Dim rng_strt As Range
    Dim i, j, k As Integer
     
    'On set "rng_fin" sur la dernière celulle non vide de la colonne 1 de la feuille "SYNTH"
    Set rng_fin = Worksheets("SYNTH").Columns(1).Find("*", , , , , xlPrevious)
     
    'Avec la feuille "TCD"
    With Worksheets("TCD")
        'On set "rng_strt" sur la celulle "Magasin" de la colonne 1
        Set rng_strt = .Columns(1).Find("Magasin", LookIn:=xlValues, LookAt:=xlWhole)
     
        'On défini k comme étant le nombre de colonne entre "Magasin" et "(vide)"
        k = .Rows(rng_strt.Row).Find("(vide)", LookIn:=xlValues, LookAt:=xlWhole).Column - 2
     
        'On boucle de i = 1 à i = "(vide)" de la colonne 1
        For i = 1 To (.Columns(1).Find("(vide)", , , , , xlPrevious).Offset(-1, 0).Row - rng_strt.Row)
     
            'On place en rng_fin + i ligne la date du jour
            rng_fin.Offset(i, 0) = Date 'Date du jour
     
            'A toi de voir pour cette colonne
            'rng_fin.Offset(i, 1) = 'numéro de commande
     
            'On place en rng_fin + i ligne + 3 colonnes (= colonne D) le nom du magasin
            rng_fin.Offset(i, 3) = rng_strt.Offset(i, 0)
     
            'On boucle de j = 1 à k
            For j = 1 To k
                'Si rng_strt + i lignes + j colonnes est différent de rien...
                If rng_strt.Offset(i, j) <> "" Then
                    '... alors on cherche dans le tableau SYNTH le même nom que l'entête du TCD et on place la valeur à la bonne case.
                    rng_fin.Offset(i, Worksheets("SYNTH").Rows(1).Find(rng_strt.Offset(0, j), LookIn:=xlValues, LookAt:=xlWhole).Column - 1) = rng_strt.Offset(i, j)
                End If
            Next j
        Next i
    End With
     
    End Sub
    Comme je te le disais, cette macro fonctionne dans ton cas particulier.

    Par contre, il doit y avoir une modification à apporter à ta feuille SYNTH : les entêtes de tes colonnes doivent se nommer comme les entêtes de ton TCD.
    J'effectue une recherche sur les noms des différents produits pour pouvoir mapper les valeurs.
    Je pense que quelque soit la macro finale, tu devras t'astreindre à faire cela.

    N'hésites pas à revenir vers moi si tu as des questions.

    Cordialement,
    Kimy

Discussions similaires

  1. [XL-2013] Macro extraction de données vers une autre feuille Excel
    Par ImBb2 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/04/2015, 20h25
  2. Extraction colonnes d'un tableau vers une autre feuille
    Par argaz01 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/06/2010, 16h16
  3. [MySQL] href d'une donnée de ma table vers une autre donnée de ma table
    Par <-mini-> dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 27/06/2008, 10h00
  4. Transferer des données d'un table vers une autre
    Par pooi1 dans le forum VBA Access
    Réponses: 4
    Dernier message: 31/05/2007, 02h05
  5. [PostGreSQL] Transfert de données d'un table vers une autre
    Par psychomatt dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/03/2006, 17h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo