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 de données d'un tableau Excel vers un autre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut Extraction de données d'un tableau Excel vers un autre
    Bonjour le forum,

    J'ai créé une macro permettant d'extraire des données d'un classeur Excel nommé "Fiche anomalieV1.1.xlsm" vers un classeur Excel "Extraction.xlsx".

    Je souhaite que la macro compte les lignes déjà utilisées et que les données soient copiées sur la première ligne vide du classeur de destination.
    Donc la première série de données extraite sera placée dans les cellules A3:J3, la 2e dans les cellules A4:J4 ...

    Pour ce faire, j'ai repris et bidouillé un code (à la fin du code à partir de With ActiveWorkbook.Sheets("Feuil1")). Mais, en combinant les deux, cela ne fonctionne pas :

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    Sub Macro1()
    '
     
        Dim i As Long
        Dim cel As Range
        Dim pl As Range
     
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("A9").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("A3").Select
        ActiveSheet.Paste
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("B9").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("B3").Select
        ActiveSheet.Paste
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("E8").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("C3").Select
        ActiveSheet.Paste
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("E9").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("D3").Select
        ActiveSheet.Paste
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("B13").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("E3").Select
        ActiveSheet.Paste
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("E13").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("F3").Select
        ActiveSheet.Paste
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("B15").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("G3").Select
        ActiveSheet.Paste
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("E15").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("H3").Select
        ActiveSheet.Paste
     
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("B17").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("I3").Select
        ActiveSheet.Paste
     
        Windows("Fiche anomalieV1.1.xlsm").Activate
        Range("E17").Select
        Application.CutCopyMode = False
        Selection.Copy
        Windows("Extraction.xlsx").Activate
        Range("J3").Select
        ActiveSheet.Paste
     
        Range("A3:J3").Select
        With Selection.Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
     
        Range("A3:J3").Select
        Selection.FormatConditions.Delete
     
        Range("A3:J3").Select
        Selection.Validation.Delete
     
        Range("A3:J3").Select
        Selection.ClearComments
     
     
        With ActiveWorkbook.Sheets("Feuil1")
        i = .UsedRange.Rows.Count 'compte le nombre de lignes déjà utilisées dans ce fichier
        For Each cel In pl
            cel.Copy .Cells(i + 1, 1)
            i = i + 1
        Next cel
        End With
     
        End Sub
    Je pense que c'est très basique, mais je ne m'y connais pas beaucoup en macro.

    Quelqu'un pourrait-il me donner un coup de main ?

    Merci d'avance.

    Cordialement.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    tel que tu as utilisé UsedRange, c'est juste si et seulement si les données commencent en ligne 1 …

    Sinon c'est idiot !
    Car pour obtenir le numéro de la dernière ligne formatée - UsedRange ne se préoccupant pas que des saisies -
    il faut en passer par la propriété Row :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        With ActiveWorkbook.Sheets("Feuil1")
            i = .UsedRange.Rows(.UsedRange.Rows.Count).Row + 1
        End With
    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut
    Bonjour Marc-L,

    Merci pour ta réponse.

    Je n'ai peut-être pas tout compris, mais en intégrant ton code, je n'ai certes plus de bug, mais le contenu de la ligne remplie est systématiquement écrasé. La macro se place toujours sur la même ligne.
    Or, je souhaite que les données se rajoutent, le tableau d'extraction allant chercher des données dans diverses fiches Excel.

    Comment puis-je faire ?

    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    En fait la ligne n°2 de mon code représente la première ligne "vide" à cause du + 1

    Donc si tu retires ce + 1 c'est bien la dernière ligne utilisée.

    Si cela ne fonctionne toujours pas, il faudrait alors que tu vérifies la logique de ton code …

    Edit : la variable pl de la ligne n°109 est alimentée où ? …

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2013
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 114
    Par défaut
    Re-,

    Ca ne marche toujours pas, avec ou sans le + 1. Mais, j'ai sans doute compris de travers.

    Mon code d'origine était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With ActiveWorkbook.Sheets("Feuil1")
        i = .UsedRange.Rows.Count 'compte le nombre de lignes déjà utilisées dans ce fichier
        For Each cel In pl
            cel.Copy .Cells(i + 1, 1)
            i = i + 1
        Next cel
        End With

    Mon code actuel est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With ActiveWorkbook.Sheets("Feuil1")
            i = .UsedRange.Rows(.UsedRange.Rows.Count).Row + 1
        End With
    Le pl, issu d'un précédent code, faisait référence aux données que j'importais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("Feuil2")
    Set pl = Application.Union(.Cells(8, 5), .Cells(9, 1), .Cells(9, 2), .Cells(9, 5), .Cells(13, 2), .Cells(15, 2), .Cells(15, 5), .Cells(17, 2), .Cells(17, 5))
    End With
    J'ai oublié quelque chose quelque part, mais où ?

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Effectivement, il n'y a pas de Set pl = dans ton code …

Discussions similaires

  1. Copier des données d'un tableau excel vers un tableau word(gabarit)
    Par mogo107 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/07/2013, 09h16
  2. Extraction de données d'un fichier excel vers un .TXT
    Par titi_rugby dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/02/2012, 16h40
  3. [WD-2002] Extraction de données d'un tableur excel vers un document Word
    Par Vincent32 dans le forum VBA Word
    Réponses: 6
    Dernier message: 21/10/2010, 18h32
  4. [XL-2002] Recuperer des données d'un fichier excel vers un autre
    Par labinocle81 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/08/2009, 11h36
  5. Copier des données d'une feuille excel vers plusieurs autres
    Par LeeBamboo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/08/2008, 15h46

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