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 :

Synthèse sur toute les feuilles du classeur en fonction du CodeName


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Points : 45
    Points
    45
    Par défaut Synthèse sur toute les feuilles du classeur en fonction du CodeName
    Bonjour,
    étant un novice en VBA je souhaite faire une opération qui me semble complexe.
    un précédent sujet ici m'avait déjà permis de pouvoir faire des synthèses sur plusieurs feuilles, mais aujourd’hui je n'arrive pas à l'adapter à mon nouveau cas.

    En Fait j'ai un classeur qui contient plusieurs feuilles crées avec le code dont voici un extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Article").Copy After:=Sheets(ThisWorkbook.Sheets.Count)
       Sheets(Worksheets.Count).Name = TextBox1.Value
    ceci génère progressivement des feuilles avec des CodeName de la forme Article1, Article2, Article3, .... Article*n, et les noms des feuilles à mon choix via une userform
    jusque là tout va bien.
    j'ai également dans mon classeur une feuille synthèse et ;
    j'aimerai par macro via un bouton récupérer le nom de toutes les feuilles articles et les mettre dans la colonne A (à partir de A7) de ma feuille Synthèse ensuite sur la même ligne de cet article, j'aimerai également récupérer les valeurs de différentes cellules de la dernière ligne non vide de ces différentes feuilles Article1, Article2, Article3, .... Article*n .

    Ci-dessous le code (pris d'un sujet Résolu par ARTURO83) que j'ai essayé d'adapté sans résultat :

    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
    Private Sub CmdValider_Click()
    Dim a As Long
        Dim i As Long
        Dim Rep As Byte
        Dim Feuille As Long
        Dim DerLig_F1 As Long, DerLig_F2 As Long
     
        Application.ScreenUpdating = False
        Set f1 = Sheets("Synthèse")
        Rep = MsgBox(" Voulez-vous vraiment faire la Synthèse", vbCritical + vbYesNo + 256, "Attention")
     
        If Rep = vbNo Then
            TxtDateIni.SetFocus
            Exit Sub
         End If
        DerLig_F1 = f1.[B1000000].End(xlUp).Row
        Feuille = 1
        For i = 7 To DerLig_F1
            If Sheets(Feuille).Name <> "Synthèse" Then
                DerLig_F2 = Sheets(Feuille).[B1000000].End(xlUp).Row
     
                    f1.Range("A" & i).FormulaLocal = "=Ligne()-6"
                    f1.Range("B" & i).Value = Sheets(Feuille).Name
                    f1.Range("C" & i).Value = Sheets(Feuille).Cells(DerLig_F2, "C")
                    f1.Range("D" & i).Value = Sheets(Feuille).Cells(DerLig_F2, "D")
                    f1.Range("E" & i).Value = CDate(Sheets(Feuille).Cells(DerLig_F2, "E"))
                    f1.Range("F" & i).Value = Sheets(Feuille).Cells(DerLig_F2, "F")
                    f1.Range("G" & i).Value = Sheets(Feuille).Cells(DerLig_F2, "I")
                    f1.Range("H" & i).Value = Sheets(Feuille).Cells(DerLig_F2, "B")
                    f1.Range("I" & i).Value = Sheets(Feuille).Cells(4, "J")
                    f1.Range("J" & i).Value = Sheets(Feuille).Cells(6, "J")
     
            Else: i = i - 1
            End If
            Feuille = Feuille + 1
     
        Next i
        Unload UserForm1
        Set f1 = Nothing
    End Sub
    Merci d"avance pour votre secours

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    ceci génère progressivement des feuilles avec des CodeName de la forme Article1, Article2, Article3, .... Article*n, et les noms des feuilles à mon choix via une userform
    jusque là tout va bien.
    Attention au vocabulaire utilisé. Sauf erreur de ma part (mauvaise lecture) aucun code affiché dans ta demande n'est un CodeName mais simplement un nom de feuille et la deuxième procédure que tu affiches utilise une variable objet et pas un CodeName

    Pour en savoir plus sur le sujet, lire ce billet titré VBA – CodeName d’une feuille Excel

    [EDIT]
    Maintenant, si c'est obtenir la liste des feuilles répondant à des critères (commence par, se termine par, contient, etc.) comme décrit dans ta demande ci-dessous
    j'aimerai par macro via un bouton récupérer le nom de toutes les feuilles articles
    alors le code qui suit pourra certainement t'aider

    Code d'une fonction qui renvoie une liste des noms de feuille trouvés en fonction de la valeur définie dans l'argument LookUpName
    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
    Function SheetList(Optional LookUpName As String, Optional oWorkbook As Workbook) As Variant
      ' Renvoie la liste des feuilles du classeur défini par l'argument oWorkbook
      ' Author : philippe.tulliez www.magicoffice.be
      ' Version 1.0
      '
      ' Arguments
      ' [LookUpName]  ' Nom à chercher (les caractères génériques sont autorisés. Liste complète si vide
      ' [oWorkbook]   ' Classeur contenant les feuilles à lister[d:=ThisWorkbook]
      ' Déclaration variables
      Dim tbl()
      Dim sht As Worksheet
      Dim Counter As Integer
      ' Affecation des variables
      If oWorkbook Is Nothing Then Set oWorkbook = ThisWorkbook
      '
      For Each sht In oWorkbook.Worksheets
        If IIf(Len(LookUpName), LCase(sht.Name) Like LCase(LookUpName), True) Then
           ReDim Preserve tbl(Counter)
           tbl(Counter) = sht.Name: Counter = Counter + 1
        End If
     Next
     SheetList = tbl
     Set sht = Nothing
    End Function
    Exemple d'une procédure qui invoque cette fonction
    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
    Sub TestSheetList()
      Dim tbl()
      Dim Count As Variant
      Dim msg As String
      Dim Elem As Integer
      tbl = SheetList("mvt*")
      On Error Resume Next: Count = UBound(tbl): On Error GoTo 0
      If Not IsEmpty(Count) Then
         For Elem = 0 To Count
           msg = msg & vbCrLf & tbl(Elem)
         Next
       Else
         msg = "Tableau vide"
      End If
      MsgBox msg
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Points : 45
    Points
    45
    Par défaut
    Merci Philippe pour ta proposition,
    Étant novice en VBA je ne comprends pas comment exploiter ta proposition pour résoudre mon problème.
    concernant cette préoccupation :
    Attention au vocabulaire utilisé. Sauf erreur de ma part (mauvaise lecture) aucun code affiché dans ta demande n'est un CodeName mais simplement un nom de feuille et la deuxième procédure que tu affiches utilise une variable objet et pas un CodeName
    Voici un aperçu de mes Objets Microsoft excel :
    Nom : IMG_20190716_170902.jpg
Affichages : 103
Taille : 1,16 Mo

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 753
    Points : 28 603
    Points
    28 603
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Oui, effectivement, d'après l'illustration "Article1 à X" sont bien des CodeName mais rien dans le code que tu as publié ne reflète la création de CodeName d'une feuille.

    Pourrais-tu reformuler ta question car je n'ai toujours pas compris ce que tu souhaites obtenir comme aide.
    • La liste des CodeName des feuilles d'un classeur ?
    • Comment renommer le CodeName d'une feuille ?


    Plus tu seras clair, plus de chances tu auras d'obtenir une réponse pertinente
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour à tous,

    si j'ai bien compris c'est la liste des codenames qu'il veut.
    Un petit programme qui te liste codename en A et name en B (garde ce que tu as besoin) des feuilles dont le codename commence par Article et porte un n° :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Dim sh As Worksheet, lig As Long
        lig = 7
        With Sheets("Synthèse")
            For Each sh In Worksheets
                If Left(sh.CodeName, 7) = "Article" And Len(sh.CodeName) > 7 Then
                    .Cells(lig, 1) = sh.CodeName
                    .Cells(lig, 2) = sh.Name
                    lig = lig + 1
                End If
            Next sh
        End With
    Corrige la graphie de "Synthèse" si besoin.
    eric

  6. #6
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 66
    Points : 45
    Points
    45
    Par défaut MERCI
    Bonjour Eriiic,

    Ton code réponds exactement à mon besoin.
    il m'a permit après adaptation de solutionner mon problème .

    MERCI ENCORE

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

Discussions similaires

  1. Ajouter des étiquettes de colonnes sur toutes les feuilles du classeur
    Par Akane69 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2013, 09h26
  2. [XL-2003] Boucle For sur toutes les feuilles d'un classeur
    Par dlight dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/10/2010, 22h48
  3. Mise en page avant impression sur toutes les feuilles du classeur
    Par fribelle dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/11/2008, 09h48
  4. Récuperer le clique sur toutes les feuilles
    Par faube dans le forum Excel
    Réponses: 6
    Dernier message: 03/08/2007, 10h17
  5. Action sur toutes les feuilles d'un classeur
    Par beurnoir dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/12/2005, 15h11

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