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 :

Macro ajout de feuille avec références


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 méthode maintenance
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur méthode maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Par défaut Macro ajout de feuille avec références
    Bonjour tout le monde,

    Je viens vers vous, parce que j'ai un problème que je n'arrive pas à résoudre. Je travaille actuellement sur un document Excel pour créer des gammes de maintenance préventive (que je peux vous transmettre).

    J'ai une feuille qui regroupe dans 6 tableaux les actions de maintenance préventive à effectuer suivant plusieurs critères :

    • le métier concerné (mécanicien, électrotechnicien,...)
    • sa périodicité (trimestrielle, semestrielle,...)
    • le temps de réalisation (en minutes)


    Ce que je cherche à faire c'est une macro qui ajoute une nouvelle feuille à chaque fois que je créer une nouvelle ligne dans un des 6 tableaux que j'ai.
    La feuille doit garder le format que j'ai créer et récupérer les informations de la nouvelle ligne sur le métier, la périodicité et le temps de réalisation qui se trouvent dans les tableaux.

    Pour récapituler, j'ai:

    • une feuille avec 6 tableaux récapitulatif des actions de maintenance préventive
    • une feuille qui représente une fiche opératoire, elle sert de base pour les autres, c'est le fameux format


    Pour la nouvelle feuille, j'avais commencé une macro qui copie la feuille de "référence", mais le problème c'est que cette fiche je l'ai faite pour la première ligne d'un de mes tableaux du coup quand je copie cette feuille je me retrouve donc avec les informations de ma première ligne. Et c'est là que ça coince, je ne sais pas comment faire pour récupérer les infos de la nouvelle ligne.

    Je vous met la macro pour copié la feuille de référence, je précise que c'est fait à partir de l'enregistreur de macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ajoutfeuille()
    '
    ' ajoutfeuille Macro
    '
     
    '
        Sheets("JG00").Select
        Sheets("JG00").Copy After:=Sheets(8)
        Sheets("Liste des opé vng").Select
        Selection.Copy
        Sheets("JG00 (2)").Select
     
    End Sub
    Si vous avez des pistes à me proposer je suis preneur.

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste. Adapter par rapport aux commentaires dans le code. Je n'ai rien testé donc dis moi si bugs :
    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
     
    Sub ajoutfeuille()
     
        Dim Fe As Worksheet
        Dim Ligne As Long
     
        Set Fe = Worksheets.Add(, Sheets(Sheets.Count))
     
        Fe.Name = "JG00 (2)" '<--adapter le nom si nécessaire
     
        Sheets("JG00").UsedRange.Copy , Fe.Range("A1")
     
        With Worksheets("Liste des opé vng")
     
            Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row 'recherche sur la colonne A
     
            'ici adapter les Ranges ! Pour la nouvelle feuille, la zone est A3:G3
            'et pour la feuille "Liste des opé vng" la zone est de A à G sur la dernière ligne utilisée
            Fe.Range("A3:G3").Value = .Range("A" & Ligne & ":G" & Ligne).Value
     
        End With
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur méthode maintenance
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur méthode maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Par défaut
    @Theze

    Je viens de tester, j'ai un message d'erreur quand je lance la macro. J'ai surligné en jaune dans le code où excel me dit que ça ne va pas.
    Le message c'est :
    Erreur d’exécution '450' :

    Nombres d'arguments incorrect ou affectation de propriété incorrect
    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
    Sub feuillenew()
     
        Dim Fe As Worksheet
        Dim Ligne As Long
     
        Set Fe = Worksheets.Add(, Sheets(Sheets.Count))
     
        Fe.Name = "JG00 (2)" '<--adapter le nom si nécessaire
     
        Sheets("JG00").UsedRange.Copy , Fe.Range("A1")
     
        With Worksheets("Liste des opé vng")
     
            Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row 'recherche sur la colonne A
     
            'ici adapter les Ranges ! Pour la nouvelle feuille, la zone est A3:G3
            'et pour la feuille "Liste des opé vng" la zone est de A à G sur la dernière ligne utilisée
            Fe.Range("A3:G3").Value = .Range("A" & Ligne & ":G" & Ligne).Value
     
        End With
     
    End Sub
    Je suppose que la ligne suivante c'est pour donner un nom à notre feuille ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Fe.Name = "JG00 (2)" '<--adapter le nom si nécessaire
    @Eric

    Effectivement, j'ai oublié de préciser que les tableaux sont sur la même feuille. Si ça pose problème je les mets ailleurs c'est pas un soucis.
    Pour que ce soit plus clair (j'ai pas confiance dans mes explications), je met un screen de la feuille.

    Nom : Tableaux.JPG
Affichages : 801
Taille : 57,5 Ko

    J'ai donc 6 tableaux qui s'étendent de la ligne 6 à la ligne 29 pour le moment. Sachant que je vais rajouter au fur et à mesure des lignes dans les tableaux, ça va évoluer.

    Merci en tout cas pour vos réponses

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Oups,

    une virgule qui traînait !
    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
     
    Sub ajoutfeuille()
     
        Dim Fe As Worksheet
        Dim Ligne As Long
     
        Set Fe = Worksheets.Add(, Sheets(Sheets.Count))
     
        Fe.Name = "JG00 (2)" '<--adapter le nom si nécessaire
     
        Worksheets("JG00").UsedRange.Copy Fe.Range("A6")
     
        'vide les cellules de leurs valeurs sauf les entêtes
        Fe.UsedRange.Offset(1, 0).Resize(Fe.UsedRange.Rows.Count - 1, Fe.UsedRange.Columns.Count).ClearContents
     
        With Worksheets("Liste des opé vng")
     
            Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row 'recherche sur la colonne A
     
            'la première zone devant recevoir les valeurs est A7:G7
            Fe.Range("A7:G7").Value = .Range("A" & Ligne & ":G" & Ligne).Value
     
        End With
     
    End Sub
    Je suppose que la ligne suivante c'est pour donner un nom à notre feuille ?
    -->Fe.Name = "JG00 (2)<--
    effectivement, ceci permet de donner le nom que l'on souhaite à la feuille nouvellement créée plutôt que de garder le nom par défaut dus à la copie !

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur méthode maintenance
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur méthode maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Par défaut
    Merci, il y a du mieux Ça me rapproche de ce que je cherchais Par contre la feuille qui est créer n'a pas le même format que la feuille de départ. Dans ton code tu efface le contenu entier de la page, du coup j'ai pas pris en compte la ligne suivante et ça me convient mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        'vide les cellules de leurs valeurs sauf les entêtes
        'Fe.UsedRange.Offset(1, 0).Resize(Fe.UsedRange.Rows.Count - 1, Fe.UsedRange.Columns.Count).ClearContents
    Par contre je comprend pas pourquoi j'ai un décalage de 5 lignes avec la feuille d'origine.

    En ce qui concerne les informations récupérer, j'ai n'ai besoin que des colonnes A, D et G que je doit mettre dans les cellules F4, D7 et E7.

    Je suppose que la ligne de code ressemblera à :

    Collumns F ; ligne 4
    .
    .
    .
    et ainsi de suite ?

    Je pose beaucoup de question mais je connais pas bien le langage VBA, du coup je cherche à comprendre.

    Je pense que je vais partir sur une page = un tableau, parce que là ça récupère que l'information de la dernière ligne.
    Même si en faite ça devrait pas résoudre mon problème. Il faudrait qu'à chaque fois que je lance la macro pour un nouvelle ligne dans le tableau, la macro pour la nouvelle feuille se lance en même temps et récupère les informations des cellules de la nouvelle ligne. C'est vraiment pas simple ce que je cherche ^^

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur méthode maintenance
    Inscrit en
    Septembre 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur méthode maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 14
    Par défaut
    J'ai chercher à faire autrement et j'ai réussis à trouver comment simplifier ce que je voulais faire.

    Donc l'ajout de ligne + une feuille ça donne :

    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
    Sub VNG()
     
    ' Ajoutligne VNG
     
        Range("Tableau5[Repère fiche]").Select
        Selection.ListObject.ListRows.Add AlwaysInsert:=True
        Range("A9").Select
     
    ' Copier feuille VNG
     
    Worksheets("JG00").Copy After:=Sheets(Worksheets.Count)
    Set MySheet = ActiveSheet
    With MySheet
       Name = Worksheets("JG00").Range("A3")
    End With
     
    End Sub
    Par contre maintenant je cherche à avoir autre chose. J'ai mis des formules pour récupérer les informations de mes tableaux

    Pour récupérer le repère ça me donne ça :

    ='Liste des opé vng'!A8
    Je cherche à incrémenter le A8 à chaque fois que je rajouter une feuille mais que sur la nouvelle feuille. Je sais pas si c'est clair.

    Par exemple :

    Page 1 = "='Liste des opé vng'!A8"
    Page 2 = "='Liste des opé vng'!A9"
    Page 3 = "='Liste des opé vng'!A10"

    et ainsi de suite. Je pense que le plus compliqué c'est pas d'incrémenter le A8 mais plutôt que ça soit effectif que sur la nouvelle feuille. Est-ce que vous avez une idée ?

  7. #7
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour Siriki,
    Comment et ou sont situes tes tableaux?
    Par exemple : 1er tableau à partir de la cellule A ligne 1 ou 2 ou autre, sur 3 colonnes (A,B et C) sur un nombre de lignes défini/non défini ,
    2ème tableau à partir de la cellule E1 sur 3 colonnes
    etc...
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

Discussions similaires

  1. [Toutes versions] Macro pour ajouter une feuille excel avec un nom précis
    Par luc-ratif dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/05/2014, 10h53
  2. [XL-2003] Copies de feuilles avec références
    Par Silencee dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/02/2014, 17h58
  3. [PPT-2007] Macro - Ajout de Slide avec une "disposition"
    Par indyindy dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 11/01/2013, 16h16
  4. [XL-2007] Ajouter une feuille avec un nom incrémenté
    Par tompom3108 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/11/2011, 21h11
  5. bouton d'appel d'une macro dans une feuille excel avec défilement
    Par fabrice44 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/01/2008, 16h30

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