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 :

VBA - Copie de données entre deux feuilles et restructuration


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Support managérial
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Support managérial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut VBA - Copie de données entre deux feuilles et restructuration
    Bonsoir,
    Je suis débutante sous VBA et ne trouve pas de solution.
    Je dois récupérer des données excel de la feuille "donnees" et en copier certaines dans la feuille "resultat".
    Une des données (Mag1, Mag2…) est en-tête de colonnes et les autres en lignes.
    La donnée présente dans l’en-tête doit être mise en ligne, dupliquée pour chaque ligne copiée.

    Les données des colonnes (sauf en-tête colonne) Mag 1, Mag 2.. doivent être dans la même colonne Mag.
    Les mentions d'en-tête : Mag1, Mag 2 dans la colonne «*A*» face aux lignes copiées
    Cette action est à faire pour 70 colonnes

    Au final on a plus de lignes dans la feuille "resultat" et le nom des Mag sont présent en face de chaque ligne copiée.

    Mes problèmes:
    1. dupliquer la donnée Mag 1, Mag 2... dans la colonne «*A*» car le nombre de lignes est variable
    2. traiter les 70 colonnes consécutivement car la colonne de référence dans la feuille "donnees" change (+ une colonne) y compris pour le filtre.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    'Recuperation des données Mag1
        'Récupération du premier nom de Mag
        Sheets("donnees").Select
        Range("W1").Select
        Selection.Copy
        Sheets("resultat").Select
        Range("A2").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
           :=False, Transpose:=False
       nom = ActiveCell.Value
       m = ActiveCell.Row
     
        'Filtre sur premier nom de Mag pour enlever les lignes vides
        Sheets("donnees").Select
        Range("W1").Select
        ActiveSheet.Range("$A$1:$P$10000").AutoFilter Field:=23, Criteria1:="<>"
     
        'Récupération des données filtrées et copie dans la feuille "resultat"
        Range("A65536").End(xlUp).Select
        n = ActiveCell.Row
        Range("A2:A" & n).Copy Worksheets("resultat").Range("B2")
        Range("C2:D" & n).Copy Worksheets("resultat").Range("C2")
        Range("F2:L" & n).Copy Worksheets("resultat").Range("E2")
        Range("N2:O" & n).Copy Worksheets("resultat").Range("L2")
        Range("T2:T" & n).Copy Worksheets("resultat").Range("N2")
        Range("W2:W" & n).Copy Worksheets("resultat").Range("O2")
     
     
    'Ajouter le nom dans la colonne A sur les lignes copiées 
    Sheets("resultat").Select
    Dim Cell As Range
    'rechercher dernière ligne renseignée dans colonne B et ajouter nom dans la colonne "A"
    Range("B65536").End(xlUp).Select
    ActiveCell.Offset(0, -1).Select
    ActiveCell.Value = nom
    n = ActiveCell.Row
    For Each Cell In Range("A" & n - 1)
       If Cell.Value = "" Then
         ActiveCell.Value = nom
       End If
    Next Cell
     
    'Recuperation des données Mag 2
        'Traitement du deuxième Mag. Rechercher dernière ligne vide
        Sheets("donnees").Select
        Rows("1:1").Select
        ActiveSheet.ShowAllData
                'Il faudrait ajouter une colonne automatiquement
        Range("X1").Select
        Selection.Copy
        Sheets("resultat").Select
        Range("A65536").End(xlUp).Select
       p = ActiveCell.Row
        ActiveCell.Offset(1, 0).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Sheets("donnees").Select
        Range("X1").Select
                'Il faut décaler le filtre d'une colonne
        ActiveSheet.Range("$A$1:$CJ$10000").AutoFilter Field:=24, Criteria1:="<>"
     
        'Récupération des données filtrées et copie dans la feuille "resultat"
        Range("A65536").End(xlUp).Select
        n = ActiveCell.Row
        Range("A2:A" & n).Copy Worksheets("resultat").Range("B" & p + 1)
        Range("C2:D" & n).Copy Worksheets("resultat").Range("C" & p + 1)
        Range("F2:L" & n).Copy Worksheets("resultat").Range("E" & p + 1)
        Range("N2:O" & n).Copy Worksheets("resultat").Range("L" & p + 1)
        Range("T2:T" & n).Copy Worksheets("resultat").Range("N" & p + 1)
        Range("X2:X" & n).Copy Worksheets("resultat").Range("O" & p + 1)
        'Il faudrait ne pas noter X mais faire W+1 colonne
     
       'Ajouter le nom dans la colonne A sur les lignes copiées
       'rechercher dernière ligne renseignée dans colonne B
        Range("B65536").End(xlUp).Select
        e = ActiveCell.Row
    'A continuer dans la colonne "A" ajouter nom du Mag
        Range("A" & e).Select
        ActiveCell.FormulaR1C1 = "Name"
    Je vous remercie pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut Copie de données entre deux feuilles et restructuration
    Bonjour,

    Merci de donner un exemple réduit de la feuille donnée et de la feuille résultat attendu pour une meilleure compréhension.

    Penser à mettre le code entre balise : voir la balise # ci-dessus

    Cordialement.

  3. #3
    Invité
    Invité(e)
    Par défaut Bonjour,
    indépendantisme de la demande de fichier nibledispo, n'utilise pas d'active, Activate et autre select.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("donnees").Range("W1").Copy Sheets("resultat").Range("A2").PasteSpecial(Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False)

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Support managérial
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Support managérial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [XL-2007] VBA - Copie de données entre deux feuilles et restructuration
    Bonsoir,
    Je vous remercie pour vos retours et les conseils.
    J'ai joint un fichier"Test" avec plusieurs feuilles, format xls, j'espere qu'il sera bien present et exploitable.

    Cordialement
    Fichiers attachés Fichiers attachés

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 959
    Points : 28 969
    Points
    28 969
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai examiné le classeur et la demande.
    Si j'ai bien compris, il y a deux feuilles concernées par le projet. Une feuille source nommée [Données] et une feuille cible nommée [Résultat souhaité].
    Il s'agit de regrouper dans la feuille cible l'ensemble ou partie des premières colonnes de la feuille source mais en regroupant dans une colonne nommée Mag les quantités se trouvant dans les dernières colonnes de la feuille source (ici la colonne W et suivantes) et en écrivant dans la première colonne (Etiquette Nom Mag) de la feuille cible le nom du magasin (soit le nom de l'étiquette de la colonne W et suivantes).

    J'utiliserais pour cela une boucle commençant à la colonne W vers la dernière en utilisant dans la boucle le filtre avancé d'excel en mettant dans la zone de critère le nom du magasin (trouvé grâce à la boucle) comme étiquette de colonne et >0 comme critère. Comme référence de zone d'exportation la première ligne vide de la feuille cible, colonne B et en colonne A de cette même ligne le nom du magasin (Valeur de l'étiquette de la colonne traitée par la boucle (la première étant dans cet exemple la colonne W).
    Comme toutes les colonnes ne doivent pas être exportées il s'agit de prévoir une plage de cellule contenant le nom des étiquettes à exporter en paramètre et à copier coller dans la première ligne de la boucle (une de ces colonnes doit être modifié à chaque boucle en mettant Mag 1, ensuite Mag 2 et ainsi de suite sinon pas d''exportation possible.
    A la dernière ligne de la boucle (avant le Next) il faudra supprimer la ligne des titres
    Pour comprendre les filtres avancés voir ce tutoriel Les filtres avancés ou élaborés dans Excel.
    Pour voir un exemple de l'utilisation du filtre avancé en exportant vers la prochaine ligne vide de la feuille cible voir cette réponse.

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Support managérial
    Inscrit en
    Septembre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Support managérial
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [XL-2007] VBA - Copie de données entre deux feuilles et restructuration
    Bonjour,
    Je vous remercie pour votre retour et tous vos conseils.
    Votre analyse de ma demande est exacte.
    J'ai regardé votre tutoriel sur les filtres avancés et élaborés et la réponse indiquée.
    Je vais essayer de transcrire ceci pour ma demande mais il y encore des zones obscures pour moi avec toutes les variables présentes, sachant que je suis novice en écriture de boucles.
    Je vais faire un essai ce jour.
    Cordialement

Discussions similaires

  1. Copie de données entre deux feuilles avec condition "Année"
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/07/2013, 15h58
  2. [XL-2010] Copie de données entre deux feuilles sans doublons
    Par ElPibeOro dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/05/2013, 15h07
  3. Copie de données entre deux fichiers Excel
    Par qltmi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/03/2008, 19h20
  4. Copie de données entre deux serveurs mysql
    Par hugue1 dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/10/2007, 19h59
  5. Concordances de données entre deux feuilles
    Par lulu24100 dans le forum Excel
    Réponses: 7
    Dernier message: 07/08/2007, 11h55

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