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 :

Code VBA et interactions inter-feuilles de feuilles pas encore créées [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    en CDD
    Inscrit en
    Juillet 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : en CDD
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2019
    Messages : 8
    Points : 8
    Points
    8
    Par défaut Code VBA et interactions inter-feuilles de feuilles pas encore créées
    Bonjour à tous,

    Contexte
    Mon code existant me permet de générer des sous fiches (feuilles sur XL) à partir d'un modèle en feuille 2 ('Modèle Fiche').
    Ces sous fiches prennent le nom un à un des BT en colonne G de la feuille 'Avancement'.
    De plus, ces feuilles générées se remplissent en fonction des informations de la colonne M, 3 tronçons en colonne M crée une liste A, B, C en colonne A de la sous fiche correspondant à ce BT.

    Voilà pour le contexte et voici le code VBA derrière ce projet (shout-out to Arturo83) :

    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 Creation_Onglets_Selon_Modele()
        Dim c As Range
        Dim Nb_Tronçon As Long
        Application.ScreenUpdating = False
        'On crée les onglets qui sont listés à partir de la cellule
        'A2 de l'onglet nommé Liste
        Set c = Worksheets("Avancement").Range("G4") 'cellule de départ
        Do Until IsEmpty(c)     'boucle tant que c est vide
            Nb_Tronçon = Worksheets("Avancement").Cells(c.Row, "M")
            'on copie le modèle en dernier
            Worksheets("Modèle Fiche").Copy After:=Worksheets(ThisWorkbook.Sheets.Count)
            With Worksheets(ThisWorkbook.Sheets.Count) 'avec l'onglet créé
                .Name = c.Value     'on renomme
                'on remplit notre modèle comme on veut...
                .Range("H1") = c.Value
                For i = 1 To Nb_Tronçon
                    .Cells(i + 7, "A") = Chr(i + 64)
                Next i
            End With
            Set c = c.Offset(1, 0)      'prochaine ligne
        Loop
        Set c = Nothing
        Application.ScreenUpdating = True
    End Sub
    Problématique :
    J'aimerais intégrer dans ce code des lignes me permettant d'accomplir la tâche suivante :
    Trouver un moyen de faire référence à ces futures feuilles (le nom de la feuille n'a pas l'air de suffire) pour :
    1) Faire la somme de la colonne M (M8:M22) de chaque sous fiches (BT-00X)
    2) Par un relation d'égalité ou autre pour que la cellule de la feuille d'Avancement soit constamment update :
    3) Remplir la colonne L de la feuille 'Avancement' avec la somme du BT correspondant.

    Cette requête doit être intégré au code car j'ai essayé avec des relations simples et même en connaissant le nom de la sous-fiches en avance, n'étant pas encore créée, XL ne fait pas référence à cette feuille après sa création, problème d'index maybe.

    Merci pour votre aide

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour iSirUsly, bonjour le forum,

    1) Faire la somme de la colonne M (M8:M22) de chaque sous fiches (BT-00X)

    Ok mais, d'une part on en fait quoi, d'autre part quel intérêt puisque le tableau est vide !?...

    2) Par un relation d'égalité ou autre pour que la cellule de la feuille d'Avancement soit constamment update :
    Pas compris !

    3) Remplir la colonne L de la feuille 'Avancement' avec la somme du BT correspondant.

    Pas compris mais doit être fait après le remplissage de la fiche. On ne peut pas intégrer le code dans celui de la création de la fiche puisqu'elle est vide

    En attendant tes réponses, ton code modifié :

    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
    Sub Creation_Onglets_Selon_Modele()
    Dim OA As Worksheet 'déclare la variable OA (Ongelt Avancement)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim NT As Long 'déclare la variable NT (Nombre de Tronçon) le type Long me semble un peu exagéré !...
    Dim OC As Worksheet 'déclare la variable OC (Ongelt Copié)
     
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Set OA = Worksheets("Avancement") 'définit l'onglet OA
    DL = OA.Cells(Application.Rows.Count, "G").End(xlUp).Row 'définit la dernière ligne éditiée DL de la colonne G de l'onglet OA
    For J = 4 To DL 'boucle des lignes a DL
        NT = Worksheets("Avancement").Cells(J, "M") 'définit le nombre de tronçons NT
        Worksheets("Modèle Fiche").Copy After:=Worksheets(ThisWorkbook.Sheets.Count) 'copie l'onglet "Modèle Fiche" en dernière position
        Set OC = ActiveSheet 'définit l'onglet copié OC
        OC.Name = OA.Cells(J, "G") 'renome l'onglet OC
        OC.Range("H1") = OA.Cells(J, "G") 'renvoie dans la cellule H1 de l'onglet copié la valeur de la cellule ligne J colonne "G" de l'onglet OA
        For I = 1 To NT 'boucle 2 : sur le nombre de tronçon NT
            OC.Cells(I + 7, "A") = Chr(I + 64) 'renvoie dans la cellule ligne I colonne "A" de l'onglet OA les lettres de l'alphabet en majuscule
        Next I 'prochaine ligne de la boucle 2
    Next J 'prochaine ligne de la boucle 1
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub

  3. #3
    Futur Membre du Club
    Femme Profil pro
    en CDD
    Inscrit en
    Juillet 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : en CDD
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2019
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Bonjour Thautheme,

    1) Faire la somme de la colonne M (M8:M22) de chaque sous fiches (BT-00X)
    Ok mais, d'une part on en fait quoi, d'autre part quel intérêt puisque le tableau est vide !?...

    Ses sous fiches permettent de gérer plus précisément chaque BT et avoir un suivi journalier, exemple, en M8 de la sous fiche BT-001, ce sera le nombre de pouces fabriqué le jour 1, en M9, l'opérateur rajoutera le nombre de pouces effectué, etc, or dans le tableau avancement, on veut seulement un aperçu du nombre de pouces effectué, que l'on peut comparer après avec la quantité attendue.
    D'où la somme de la colonne M des sous fiches à rapatrier dans la colonne L du BT correspondant.


    2) Par un relation d'égalité ou autre pour que la cellule de la feuille d'Avancement soit constamment update :
    Pas compris !

    3) Remplir la colonne L de la feuille 'Avancement' avec la somme du BT correspondant.
    Pas compris mais doit être fait après le remplissage de la fiche. On ne peut pas intégrer le code dans celui de la création de la fiche puisqu'elle est vide

    Ce sont que des hypothèses, faudrait il faire une macro qui relie les cellules entre elles et qui se lance une fois la macro 1 terminée .

    merci

  4. #4
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Re,

    J'ai enfin compris !... Le code modifié :

    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 Creation_Onglets_Selon_Modele()
    Dim OA As Worksheet 'déclare la variable OA (Ongelt Avancement)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim NT As Long 'déclare la variable NT (Nombre de Tronçon) le type Long me semble un peu exagéré !...
    Dim OC As Worksheet 'déclare la variable OC (Ongelt Copié)
     
    Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
    Set OA = Worksheets("Avancement") 'définit l'onglet OA
    DL = OA.Cells(Application.Rows.Count, "G").End(xlUp).Row 'définit la dernière ligne éditiée DL de la colonne G de l'onglet OA
    For j = 4 To DL 'boucle des lignes a DL
        NT = Worksheets("Avancement").Cells(j, "M") 'définit le nombre de tronçons NT
        Worksheets("Modèle Fiche").Copy After:=Worksheets(ThisWorkbook.Sheets.Count) 'copie l'onglet "Modèle Fiche" en dernière position
        Set OC = ActiveSheet 'définit l'onglet copié OC
        OC.Name = OA.Cells(j, "G") 'renome l'onglet OC
        OC.Range("H1") = OA.Cells(j, "G") 'renvoie dans la cellule H1 de l'onglet copié la valeur de la cellule ligne J colonne "G" de l'onglet OA
        For I = 1 To NT 'boucle 2 : sur le nombre de tronçon NT
            OC.Cells(I + 7, "A") = Chr(I + 64) 'renvoie dans la cellule ligne I colonne "A" de l'onglet OA les lettres de l'alphabet en majuscule
        Next I 'prochaine ligne de la boucle 2
        OA.Cells(j, "L").Formula = "=SUM('" & OC.Name & "'!M8:M22)" 'renvoie dans la cellule ligne J colonne "L" de l'onglet OA la formule de la somme de M8 a M22 de l'onglet OC
    Next j 'prochaine ligne de la boucle 1
    Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
    End Sub

  5. #5
    Futur Membre du Club
    Femme Profil pro
    en CDD
    Inscrit en
    Juillet 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : en CDD
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2019
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Merci infiniment Thautheme,

    C'est exactement ce que je cherchais à faire, plus qu'à adapter ça à mes autres colonnes.
    Les annotations vont bien m'aider

    Bonne journée à toi.

    SirUsly

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

Discussions similaires

  1. [XL-2019] Code VBA et Macro et interactions inter-feuilles
    Par iSirUsly dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/07/2019, 17h26
  2. [XL-2007] Code VBA pour protéger ma feuille
    Par celine31190 dans le forum Excel
    Réponses: 1
    Dernier message: 20/11/2015, 12h07
  3. [XL-2010] Code VBA pour protéger certaines feuilles d'un classeur
    Par Niko77 dans le forum Conception
    Réponses: 7
    Dernier message: 27/07/2015, 09h06
  4. Code VBA interrompu quand la feuille excel n'est pas active
    Par nianko dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/01/2013, 10h00
  5. [XL-2010] Code VBA pour comparer deux feuilles Excel
    Par sam013 dans le forum Excel
    Réponses: 1
    Dernier message: 13/08/2012, 14h53

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