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 :

Automatisation de copie de cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut Automatisation de copie de cellules
    Bonjour, j'utilisais jusqu'à présent cette macro pour récupérer des données dans un fichier X afin de les mettre dans le fichier AAAA.xls. Ce fichier X est en fait un fichier mis à jour deux fois par mois tandis que le fichier AAAA.xls est un fichier de synthèse dans lequel une ligne = une donnée du fichier X.

    Jusqu'à présent, je récupérais mes données dans la plage B29:T29 qui est fixe, et qui contenait des infos par sexe (colonnes B,D,F... les hommes et intercalées, les femmes)

    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
    'Copie des données
        Windows(NomFichier).Activate
        Set OngletACopier = Worksheets(NomOngletACopier)
        OngletACopier.Select
        Range("B29:T29").Select
        Application.CutCopyMode = False
        Selection.Copy
     
        'Retour au fichier récapitulatif
        Windows("AAAA.xls").Activate
     
        Set Onglet1 = Worksheets("Récap gen cumul")
        Onglet1.Select
        DerLigne = Range("B65536").End(xlUp).Row
        Onglet1.Cells(DerLigne + 1, 2).Select
        Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
     
        'Paramétrage des années
        Cells(4, 2).Select
        PremiereAnnee = Cells(4, 2).Value
        DerniereAnnee = Selection.End(xlToRight).Value
        DerniereAnneeRemplie = Annee - 56
     
        'Insertion des cellules de total toutes les 3 cases (pour chaque année)
        Cells(DerLigne + 1, 1).Value = DateValue(Jour & "/" & Mois & "/" & Annee)
        For i = 1 To (DerniereAnneeRemplie - PremiereAnnee + 1)
            Cells(DerLigne + 1, 1 + 3 * i).Select
            Selection.Insert Shift:=xlToRight
            Cells(DerLigne + 1, 1 + 3 * i).Value = Cells(DerLigne + 1, 1 + 3 * i - 2).Value + Cells(DerLigne + 1, 1 + 3 * i - 1).Value
        Next
        Cells(DerLigne + 1, 3 * i - 1).Clear
        Cells(DerLigne + 1, 3 * i).Clear
        Cells(DerLigne + 1, 3 * i + 1).Clear
     
        'Mise en forme
        Rows("6:6").Select
        Selection.Copy
        Cells(DerLigne + 1, 1).Select
        Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Application.CutCopyMode = False

    Mon problème est le suivant. Désormais la table de données n'est plus faite de la même façon, j'ai d'une part (par exemple en B29:K29) les données concernant les hommes et en B59:K59 les données concernant les femmes.
    Je récupérais auparavant la ligne entière, je changeais de fichier et je collais dans mon fichier AAAA.xls puis faisais toutes mes opérations sur ce dernier (insertion de cellules pour mettre le total hommes + femmes notamment)

    Est-ce que je suis "obligé" maintenant de récupérer une donnée, de changer de fichier avec un Windows("AAAA.xls").Activate de coller, puis de revenir dans le premier fichier pour chaque cellule, sachant que je veux garder ma disposition dans AAAA.xls ? Ca me semble assez couteux en temps et pas très joli... Peut-être que je peux stocker mes données de mon fichier initial dans un tableau ?

    Merci d'avance pour vos conseils et réponses.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Montres-nous tes deux fichiers, ça sera plus simple que nous expliquer tout ça "en l'air" comme ça. Parce que j'avoue que je n'ai pas très bien compris...

    À part ça, on n'est jamais vraiment obligé d'activer des Windows en VBA. Tout, ou presque, peut se faire par adressage direct.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut
    Bonjour et merci pour cette réponse. Je vais déjà chercher un peu l'idée de l'adressage direct.
    En attendant, j'ai commencé à utiliser les tableaux pour stocker toutes les données de mon prmier fichier avant de repasser dans le second. Mais pour l'instant j'ai un problème de dépassement de capacité lors de ma copie des données à la dernière ligne dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Windows(NomFichier).Activate
        Set OngletACopier = Worksheets(NomOngletACopier)
        OngletACopier.Select
        For i = 1 To DerniereAnnee - PremiereAnnee
        MsgBox ("i : " & i)
            TableauACopier(i, 1) = Cells(29, i + 1).Value
            TableauACopier(i, 2) = Cells(59, i + 1).Value
            TableauACopier(i, 3) = Cells(89, i + 1).Value
        Next
    Voila les fichiers pour mieux comprendre.


    NB : je sélectionne désormais en ligne 29 les données des hommes, en ligne 59 celles des femmes et en 89 celles concernant le total.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Par défaut
    Pour le dépassement de capacité j'ai résolu mon problème, il suffisait de créer un tableau de Long et non de Integer...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E]Copie de cellule
    Par Wilgard dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/05/2006, 09h29
  2. [VBA-E]automatiser "clic droit, format cellule, texte"
    Par jmlcea dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/04/2006, 16h21
  3. [VBA-E]récup controle copie de cellules de fichiers
    Par Chin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2006, 10h26
  4. [VBA-E]Erreur lors d'une copie de cellules
    Par illight dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/02/2006, 11h22
  5. Réponses: 1
    Dernier message: 07/01/2006, 23h33

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