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 :

[EXCEL-2010] Redispatcher des lignes dans différents tableurs, dans différents onglets


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut [EXCEL-2010] Redispatcher des lignes dans différents tableurs, dans différents onglets
    Bonjour,
    Avant tous, je tiens à vous remercier pour l'aide que vous m'apporterez.

    Etant utilisateur courant de macro mais ne sachant que les trouver et potentiellement les modifier pour qu'elles fassent ce que je souhaite, je suis aujourd'hui confronté à un problème plus complexe qu'a l'accoutumé.
    Je met en place un système de gestion d'équipement sur mon lieu professionnel et pour cela, un opérateur est chargé de scanner les codes-barres des équipements dans une base de donnée et en fin de journée, une macro (activé par un bouton), s'occupera de dispatcher les informations scannées en fonction de plusieurs classeurs dans les différents onglets associés.
    - Chaque classeur est nommé avec une suite de trois lettres, correspondant à la catégorie de l'équipement. Ces trois lettres sont les premières présentes sur chaque code-barre (Ex : "ARI", "MAS").
    - Chaque classeur comporte plusieurs onglets chacun nommé avec la référence complète de l'équipement (Ex : "ARIAAA0001", "ARIAAA0002").

    Ainsi, la macro doit comprendre une boucle permettant de :
    - sélectionner le classeur (nommé dans la colonne D de la BDD)
    - sélectionner l'onglet correspondant dans le classeur (nommé en colonne C de la BDD)
    - insérer l'information en haut de tableur (pour créer une chronologie inversé)
    - puis de refaire la manipulation jusqu'à ce que la dernière ligne possédant une information soit traiter dans la BDD
    - Ensuite, la BDD doit être sauvegardé dans un nouveau classeur portant la date du jour (pour créer une archive ; je n'ai pas encore cherché cette partie car il s'agit d'un plus et non d'une obligation mais je pense que je devrais pouvoir la trouver le moment voulu)
    - Pour finir, la BDD est vidé dans son intégralité, prête à être de nouveau rempli de lendemain (je possède déjà la macro pour cela).

    A ce jour, je possède une macro me permettant de dispatcher les informations de la BDD dans différents onglets présent dans le même classeur mais je n'arrive pas à faire de même dans les onglets d'autres classeurs (je vous l'ai laissé dans le classeur BDD).

    Le but final étant de possèder un historique complet de tout ce qui est fait avec un même équipement.

    Je vous ai mis en pièce jointe la BDD et deux tableurs, représentant chacun une catégorie. Des informations ont été rentrées dans la BDD afin de vous donner une idée de ce à quoi le système ressemble.

    Merci d'avance pour l'aide que vous m'apporterez.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut
    Voilà, la problématique de l'archivage est quasiment réglée (reste le reste...). La macro est simple par contre je ne comprend pas pourquoi l'archive s'enregistre à côté de la BDD et pas au chemin indiqué.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Achiver() 'copie sauvegarde classeur
    Dim nom As String
    Dim Chemin As String, Fichier As String
        Chemin = "C:\Users\XXXX\Desktop\Gestion\Archivage"
        nom = Year(Date) & "_" & Month(Date) & "_" & Day(Date) & "_" & Hour(Time) & "h" & "_" & Minute(Time) & "min"
        ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom & ".xlsm"
    End Sub
    Une idée ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour, et comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveWorkbook.SaveCopyAs chemin & "\" & nom & ".xlsm"

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut
    Merci beaucoup.

    La fonction d'archivage est prête, celle pour remettre le tableau à zéro aussi, ne manque que le morceau très compliqué qui me dépasse amplement.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Par défaut
    Bon, j'arrive à dispatcher les informations de ma base de donnée dans les onglets dont le nom est présent en colonne D mais je n'arrive pas à faire pareil vers d'autres classeurs dont le nom est présent en colonne et les feuilles présentes en colonne C.

    Voici le code pour dispatcher les informations dans les différentes feuille du même classeur.
    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
    Sub Copier_dans_l_onglet()
    Dim WsS As Worksheet, WsC As Worksheet
    Dim FinalRow As Long
    Dim FinalCol As Integer
    Dim NomFeuille As String
        Set WsS = Worksheets("BDD")
        FinalRow = WsS.Cells(Rows.Count, 1).End(xlUp).Row
        For x = 2 To FinalRow
            NomFeuille = WsS.Cells(x, 4).Value
            If FeuilleExiste(NomFeuille) Then
                Application.ScreenUpdating = False
                FinalCol = WsS.Cells(x, Columns.Count).End(xlToLeft).Column
                WsS.Range(Cells(x, 1), Cells(x, FinalCol)).Copy
                Set WsC = Worksheets(WsS.Cells(x, 4).Value)
                With WsC
                    .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).PasteSpecial _
                    Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                End With
                Application.CutCopyMode = False
                Application.ScreenUpdating = True
            End If
        Next x
        Set WsC = Nothing: Set WsS = Nothing
    End Sub
     
     
    Function FeuilleExiste(NomFeuille As String) As Boolean
    Dim Ws As Worksheet
       FeuilleExiste = False
       For Each Ws In ActiveWorkbook.Worksheets
          If Ws.Name = NomFeuille Then
             FeuilleExiste = True
          End If
       Next
    End Function
    D'un autre côté, j'arrive à créer une boucle pour ouvrir le classeur MAS.xlsm par exemple mais je n'arrive pas à insérer cette boucle dans la macro du dessus de manière à ce que la recherche de la feuille s'effectue dans le classeur souhaité et pas dans le classeur de la base de donnée.

    Avez-vous une idée ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Programmeur en temps libre
    Inscrit en
    Février 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeur en temps libre
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 68
    Par défaut
    Bonjour,

    sélectionner le classeur (nommé dans la colonne D de la BDD)
    Bon, j'arrive à dispatcher les informations de ma base de donnée dans les onglets dont le nom est présent en colonne D mais je n'arrive pas à faire pareil vers d'autres classeurs dont le nom est présent en colonne et les feuilles présentes en colonne C.


    j'ai pas compris un truc, dans ta BDD tu as dans ta colonne D, a la fois des noms d'onglets(feuilles) et des noms de classeurs ?

Discussions similaires

  1. [xl 2010] Transfert des lignes excel vers des fichier txt
    Par 0934u0aweporf dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2014, 17h48
  2. [EXCEL 2003] Coloriser des lignes de sous-totaux
    Par FINGIB dans le forum Excel
    Réponses: 4
    Dernier message: 09/11/2007, 09h05
  3. Réponses: 12
    Dernier message: 09/01/2007, 14h28
  4. Transférer des lignes d'un datastore dans une table SQL
    Par Deedoo2000 dans le forum Powerbuilder
    Réponses: 7
    Dernier message: 30/10/2006, 14h55
  5. Réponses: 4
    Dernier message: 24/04/2003, 22h28

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