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 :

Copier des données automatiquement


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Copier des données automatiquement
    Bonjour le forum

    J'ai une feuille récapitulative et je souhaiterais que les données se ventilent dans chaque feuille par rapport au critère Direction.
    Pourriez vous m'indiquer une solution s'il vous plait.
    Je vous joins le classeur pour plus de clarté.
    Je vous en remercie
    cordialement

    ricou
    Fichiers attachés Fichiers attachés

  2. #2
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2018
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Envoyer un message dans la discussion: Copier des données automatiquement
    Bonjour ricouvbx,

    Les données sont elles le diplôme préparé ?

    Sur les feuilles DIG et DI, pas de colonne diplôme ...

    Nom : Capture1.JPG
Affichages : 59
Taille : 173,9 KoNom : Capture2.JPG
Affichages : 54
Taille : 74,6 Ko

  3. #3
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut coîer les données automatiquement
    Bonsoir thekat

    je souhaite que les données de la feuille1 alimentent automatiquement les autres feuilles par rapport à la direction
    cordialement

    ricou

  4. #4
    Membre averti Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    juin 2012
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : juin 2012
    Messages : 230
    Points : 402
    Points
    402
    Par défaut
    Bonjour,

    En PJ tu trouveras un fichier qui fait ce dispatch.

    Attention toute feuille existante dont le nom apparait dans la colonne "A" ("direction") de "feuil1" sera supprimée puis recréée.

    Le nombre de lignes à traiter s'adapte en fonction du nombre de lignes de "feuil1".

    Teste et dis-nous.
    Fichiers attachés Fichiers attachés
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

  5. #5
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut copier les données automatiquement
    bonjour Alex020181

    La macro que vous avez élaboré correspond à ce que j'avais demandé.
    je vous en remercie
    Néanmoins si j'applique cette macro entre plusieurs classeurs cela va t il fonctionner ?
    cordialement
    ricou

  6. #6
    Membre averti Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    juin 2012
    Messages
    230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : juin 2012
    Messages : 230
    Points : 402
    Points
    402
    Par défaut
    Actuellement le dispatch se fait uniquement à partir des données présentent dans la feuille "Feuil1" (donc ne pas la renommer) du fichier contenant la macro.
    Ensuite le code créé une NOUVELLE feuille (dans ce classeur) par "direction" présente dans "feuil1".
    Toute feuille dont le nom correspond à une direction déjà créée est supprimée et recrée mais toujours dans le classeur contenant la macro. S'il reste des feuilles d'un précédent dispatch mais d'une direction qui n'est pas présente dans la nouvelle liste de direction d'un nouveau dispatch alors ces feuilles subsistent.

    Si vous souhaitez dispatcher sur plusieurs fichiers à la suite il faut actuellement:
    - supprimer toutes feuilles dont le nom est une direction d'un précédent dispatch
    - copier/coller les nouvelles données (donc à partir de votre classeur externe) dans "feuil1" (en respectant l'ordre des colonnes) et leur positionnement (titres en ligne 1 puis première ligne de données en ligne 2)
    - relancer le dispatch

    La macro peut être modifiée pour aller chercher les données d'un autre classeur mais dans ce cas tous les autres classeurs doivent respecter les conditions:
    - la feuille contenant les données doit toujours s'appeler de la même façon
    - les colonnes doivent être dans le même ordre
    - le positionnement ne doit pas changer (titres en ligne 1 puis première ligne de données en ligne 2)

    Enfin pouvez-vous préciser, car je ne comprend pas, si vous souhaitez cumuler les données dispatchées dans un seul et même classeur (reprenant donc tous les classeurs externes) ou bien si chaque classeur externe doit avoir ses propres feuilles de direction créées suite au dispatch ?
    C'est toujours sympa de savoir si on vous a aidé ou non. Pensez-y

    N'hésitez pas à marquer le sujet comme résolu le cas échéant.

  7. #7
    Candidat au Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    janvier 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : janvier 2021
    Messages : 4
    Points : 2
    Points
    2
    Par défaut copier les données automatiquement
    Bonsoir Alex020181
    Merci pour ces précisions et pour la macro
    cordialement
    ricou

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    16 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 16 838
    Points : 48 410
    Points
    48 410
    Billets dans le blog
    91
    Par défaut
    Salut.

    Perso, je travaillerais avec des tableaux structurés. Je trouve le code plus simple à écrire, à lire, à maintenir avec l'utilisation de ces tableaux (listobject en VBA et références structurées). De plus, je découperais mon code en petites fonctions qui ont une responsabilité:
    • Vérifier qu'une feuille existe;
    • créer un tableau structuré;
    • transférer les données d'entête;
    • transférer les données;
    • mettre en forme.



    En procédant ainsi, je me donne les moyens de tester mes procédures une à une, je peux réutiliser du code générique (tester qu'une feuille existe devrait se trouver dans un module outils histoire de ne pas réinventer la roue, ...) et si je dois modifier du code (par exemple pour enrichir la mise en forme), je ne touche qu'à la fonction concernée sans devoir relancer tout le code durant l'élaboration de la solution.





    Voici comment je procèderais: Une procédure générale qui appelle les procédures spécifiques. Remarque que le tri sur le tableau de récap permet de transférer en bloc (toutes les lignes d'une direction d'un coup) plutôt qu'en boucle ( ligne par ligne sur le tableau de récap).

    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
    Sub Process()
      Dim row As Long, CountOf As Long
     
      SortsourceTable
      row = 1
      Do While row < Range("t_Récap").Rows.Count
        CountOf = Application.CountIfs(Range("t_récap[direction]"), Range("t_Récap[Direction]")(row).Value)
        TransferData row, CountOf
        AdaptFormats Range("t_Récap[Direction]")(row).Value
        row = row + CountOf
      Loop
    End Sub
     
    Sub SortsourceTable()
      With Range("t_Récap").ListObject.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("t_Récap[Direction]"), SortOn:=xlSortOnValues, Order:=xlAscending
      End With
    End Sub
     
    Function TransferData(row As Long, CountOf As Long)
      Dim Direction As String
      Dim sh As Worksheet
      Dim Target As Range
     
      Direction = Range("t_Récap[Direction]")(row).Value
      Set sh = GetSheet(Direction)
      GetTable Direction
      Set Target = Range("t_" & Direction).ListObject.ListRows.Add().Range
      Target.Resize(CountOf, Range("t_Récap").Columns.Count).Value = Range("t_Récap")(row, 1).Resize(CountOf, Range("t_Récap").Columns.Count).Value
    End Function
     
    Function SheetExists(Name As String, Optional wb As Workbook) As Boolean
      Dim i As Long
     
      If wb Is Nothing Then Set wb = ActiveWorkbook
      Do While i < wb.Sheets.Count And Not SheetExists
        SheetExists = (StrComp(Name, wb.Sheets(i + 1).Name, vbTextCompare) = 0)
        i = i + 1
      Loop
    End Function
     
    Function GetSheet(Name As String) As Worksheet
      If SheetExists(Name) Then
        Set GetSheet = Worksheets(Name)
        GetSheet.Cells.Clear
      Else
        Set GetSheet = Worksheets.Add()
        GetSheet.Name = Name
      End If
    End Function
     
    Function GetTable(Direction As String) As ListObject
      Set GetTable = Worksheets(Direction).ListObjects.Add(xlSrcRange, Worksheets(Direction).Range("a1"))
      GetTable.Name = "t_" & Direction
      Range("t_Récap[#Headers]").Copy
      Range("t_" & Direction & "[#Headers]").Resize(1, Range("t_Récap[#Headers]").Columns.Count).Value = Range("t_Récap[#Headers]").Value
    End Function
     
    Function AdaptFormats(Direction As String)
      Dim c As Long
     
      For c = 1 To Range("t_Récap").Columns.Count
        Range("t_" & Direction).Cells(1, c).ColumnWidth = Range("t_Récap").Cells(1, c).ColumnWidth
      Next
    End Function
    dispatch1.xlsm


    PS 1: Je n'ai pas codé ici le "code de sécurisation" qui devrait tester par exemple que le nom d'une direction est valide pour en faire un nom de feuille et de tableau. Ce code pourra être réalisé sous forme de fonction qui renvoie True si OK et False si NOK et la fonction sera appelée au tout début de la boucle dans Process

    PS 2: Si on veut dispatcher sur un nouveau classeur ou sur des nouveaux classeurs (1 par direction par exemple), les modifications à mettre en place seront minimes, vu l'architecture du code.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Je mets SYTEMATIQUEMENT un lorsque la réponse ne propose pas un tableau structuré alors que ce dernier devrait être utilisé (par ex en travaillant sur la colonne entière).
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. copier des données d'un Fichier Excel à un a autre automatiquement
    Par meuah dans le forum Macros et VBA Excel
    Réponses: 36
    Dernier message: 21/05/2008, 11h45
  2. Archivage des données automatiques
    Par Claire07 dans le forum Access
    Réponses: 10
    Dernier message: 15/06/2006, 16h08
  3. [VBA-A]Copier des données d'Excel vers Word
    Par soad029 dans le forum VBA Word
    Réponses: 15
    Dernier message: 16/03/2006, 12h56
  4. Copier des données dans le presse papier
    Par Orakle dans le forum Access
    Réponses: 11
    Dernier message: 06/12/2005, 15h11
  5. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 12h01

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