Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créer plusieurs feuilles en vba

    7 juillet 2021 à 11:50:29

    Bonjour à tous, 

    Je construis actuellement un programme en vba afin de créer plusieurs tableaux correspondant à différents profs.

    Après plusieurs recherches, j'ai réussi à créer ces tableaux côte à côte mais je n'ai pas réussi à mettre chaque tableau dans une feuille différente du même classeur....

    Je suis complètement perdu.. 

    Serait-il possible de m'aider ? 

    Voici ce que j'ai fais :

    'construction des tableaux et des onglets

        For Each MyKey In MyDico_Err

            MyProf = MyDico_Err(MyKey).Prof

            MyErrorType = MyDico_Err(MyKey).ErrorType

            MySt_Rng = MyDico_Tab(MyErrorType)(1)

            MyListe = MyDico_Tab(MyErrorType)(0)

            If Not IsExistSheet(MyProfesseur, MyRes_Wb) Then

                MyRes_Wb.Sheets.Add

                ActiveSheet.Name = MyProf

            End If

    'Titres de sorties des erreurs

            If MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).Value = "" Then

                MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).Resize(1, UBound(MyListe) + 1) = MyListe

    'Definition de la plage de depart

                Set MyRange = MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).Offset(1)

    Else

                'Definition de la plage de depart

                Set MyRange = MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).End(xlDown).Offset(1)

            End If

    Merci d'avance pour vos réponses ! 

    -
    Edité par ASIP 7 juillet 2021 à 12:00:42

    • Partager sur Facebook
    • Partager sur Twitter
      7 juillet 2021 à 13:17:06

      pourtant tu ajoutes déjà une feuille avec "MyRes_Wb.Sheets.Add" et tu travailles bien sur la nouvelle feuille créée (dans le code montré)

      il manque dans le code montré le Next qui termine la boucle For et la partie tu écris tes tableaux (utilise le bouton </> pour insérer ton code, ça le rendra plus lisible)

      • Partager sur Facebook
      • Partager sur Twitter
        7 juillet 2021 à 13:44:48

        Oui, désolé, je n'ai pas mis tout le code...

        < 'Dictionnaire des tableaux de sorties d'erreurs

            MyDico_Tab.Add "Error3", Array(Array("Eleve", "Mat", "Id", "Date", "Valeur sur mod2 PAUD", "Type", "Moye"), "A1")

            MyDico_Tab.Add "Error7", Array(Array("Eleve ", "Mat", "Date", "Type", "TR", "DR", "Moye"), "J1")

            MyDico_Tab.Add "Error6", Array(Array("Eleve ", "Mat", "Date", "Type", "TR", "Comp", "Moye"), "S1")

            MyDico_Tab.Add "Error5", Array(Array("Eleve", "Mat", "Date"), "AA1")

            MyDico_Tab.Add "Error1", Array(Array("Eleve", "Mat", "Date", "TR", "Moye"), "AF1")

            MyDico_Tab.Add "Error4", Array(Array("Eleve ", "Mat", "Date"), "AM1")

            MyDico_Tab.Add "Error2", Array(Array("Eleve", "Mat", "Id", "Date"), "AR1")

            i = 0

        'construction des tableaux et des onglets

            For Each MyKey In MyDico_Err

                MyProf = MyDico_Err(MyKey).Prof

                MyErrorType = MyDico_Err(MyKey).ErrorType

                MySt_Rng = MyDico_Tab(MyErrorType)(1)

                MyListe = MyDico_Tab(MyErrorType)(0)

                If Not IsExistSheet(MyProfesseur, MyRes_Wb) Then

                    MyRes_Wb.Sheets.Add

                    ActiveSheet.Name = MyProf

                End If

        'Titres de sorties des erreurs

                If MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).Value = "" Then

                    MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).Resize(1, UBound(MyListe) + 1) = MyListe

        'Definition de la plage de depart

                    Set MyRange = MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).Offset(1)

        Else

                    'Definition de la plage de depart

                    Set MyRange = MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).End(xlDown).Offset(1)

                End If

                    'Definition de la plage de depart

                    Set MyRange = MyRes_Wb.Worksheets(MyProf).Range(MySt_Rng).End(xlDown).Offset(1)

                End If

                If MyDico_Err(MyKey).ErrorType = "Error3" Then

                    MyTab = Array(MyDico_Err(MyKey).MyStatut, MyDico_Err(MyKey).MyName, MyDico_Err(MyKey).MyID, MyDico_Err(MyKey).My_TR, _

                    MyDico_Err(MyKey).MyValeur, MyDico_Err(MyKey).Type, MyDico_Err(MyKey).Mont)

                ElseIf MyDico_Err(MyKey).ErrorType = "Error7" Then

                    MyTab = Array(MyDico_Err(MyKey).MyStatut, MyDico_Err(MyKey).MyName, MyDico_Err(MyKey).My_TR, _

                    MyDico_Err(MyKey).Type, MyDico_Err(MyKey).Mont, MyDico_Err(MyKey).Dev_R)

                ElseIf MyDico_Err(MyKey).ErrorType = "Error6" Then

                    MyTab = Array(MyDico_Err(MyKey).MyStatut, MyDico_Err(MyKey).MyName, MyDico_Err(MyKey).My_TR, _

                    MyDico_Err(MyKey).Type, MyDico_Err(MyKey).Mont, MyDico_Err(MyKey).TGV, MyDico_Err(MyKey).Comp, MyDico_Err(MyKey).Moye )

                ElseIf MyDico_Err(MyKey).ErrorType = "Error5" Then

                    MyTab = Array(MyDico_Err(MyKey).MyStatut, MyDico_Err(MyKey).MyName, MyDico_Err(MyKey).My_TR)

                ElseIf MyDico_Err(MyKey).ErrorType = "Error1" Then

                    MyTab = Array(MyDico_Err(MyKey).MyStatut, MyDico_Err(MyKey).MyName, MyDico_Err(MyKey).My_TR, _

                    MyDico_Err(MyKey).Mont, MyDico_Err(MyKey).TGV)

                ElseIf MyDico_Err(MyKey).ErrorType = "Error4" Then

                    MyTab = Array(MyDico_Err(MyKey).MyStatut, MyDico_Err(MyKey).MyName, MyDico_Err(MyKey).My_TR)

                ElseIf MyDico_Err(MyKey).ErrorType = "Error2" Then

                     MyTab = Array(MyDico_Err(MyKey).MyStatut, MyDico_Err(MyKey).MyName, MyDico_Err(MyKey).MyID, MyDico_Err(MyKey).My_TR)

                End If

                'Copier les valeurs

                MyRange.Resize(1, UBound(MyTab, 1) + 1) = MyTab

            Next MyKey />

        -
        Edité par ASIP 7 juillet 2021 à 13:52:52

        • Partager sur Facebook
        • Partager sur Twitter
          7 juillet 2021 à 16:09:01

          et tu n'as pas lu ce que j'ai indiqué pour insérer ton code => utiliser le bouton </>

          et je ne vois pas a priori pas de problème à part sur cette ligne =>  If Not IsExistSheet(MyProfesseur, MyRes_Wb) Then

          qu'est-ce que MyProfesseur ? ce ne serait pas plutôt MyProf ?

          • Partager sur Facebook
          • Partager sur Twitter
            8 juillet 2021 à 6:08:47

            Oui effectivement, il s'agit de MyProf 

            Désolé de ne pas avoir ce bouton 

            Je voudrais que chaque prof ait un classeur et que dans celui-ci se trouve autant de feuilles qu'il y a de tableaux lui correspondant mais malgré toutes mes recherches, je n'ai réussi qu'à les mettre côte à côte...

            Est-il possible de créer plusieurs feuilles sur un même classeur ?

            • Partager sur Facebook
            • Partager sur Twitter
              8 juillet 2021 à 14:54:22

              Je répète ce que j'ai dit plus haut: pourtant tu rajoutes bien une feuille à ton classeur avec MyRes_Wb.Sheets.Add

              Donc le problème n'est pas de créer une feuille, mais de la créer pour chaque tableau (et pas comme ici par professeur)

              là tu devrais créer un nouveau classeur (comme je t'ai indiqué dans ton autre post avec workbooks.add ) , travaillé sur ce classeur pour le professeur en cours et y créer une feuille pour chacune des tables

              • Partager sur Facebook
              • Partager sur Twitter
                10 juillet 2021 à 7:18:42

                Très bien. 

                Merci beaucoup pour vos réponses !

                • Partager sur Facebook
                • Partager sur Twitter

                Créer plusieurs feuilles en vba

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown