7 Replies Latest reply: Mar 13, 2017 10:42 AM by Sébastien Fatoux RSS

    Nombre de ligne d'un tableau d'un autre onglet

    Jordan Smagghe

      Bonjour, j'ai besoin d'afficher le nombre de ligne d'un tableau qui se trouve dans un autre onglet.

       

      Je crée un objet texte et dedans je réalise un count du tableau.

       

      Pour éviter la duplication de code je voulais compter le nombre de ligne en me servant de l'ID du tableau en question mais je ne sais pas comment faire?

       

      Je pensais faire un Count("ID du tableau en question") mais ça fonctionne pas x). Ce serait trop simple.

       

      Merci d'avance pour votre aide.

       

      Cordialement.

        • Re: Nombre de ligne d'un tableau d'un autre onglet
          Jordan Smagghe

          Du coup j'ai testé Count('Toto') et ça me sort 1.... seulement j'aimerais qu'il me dise que dans l'objet toto il y a tant de lignes...

            • Re: Nombre de ligne d'un tableau d'un autre onglet
              Sébastien Fatoux

              Il n'y a qu'une fonction qui permet de connaître le nombre de ligne d'un tableau, c'est NoOfRows() Mais il n'est utilisable que dans des expressions du tableau lui même. Il n'a pas de paramètre.

               

              Le seul moyen que je voie, c'est d'utiliser une macro :

              • CTRL + M pour ouvrir l'éditeur de macro
              • Copier la macro suivante:
              • Sub SetNoOfRows()
                    'Récupère le paramètre
                    set p1 = ActiveDocument.Variables("SetNoOfRows_Id")
                    'Crée la variable de retour
                    ActiveDocument.CreateVariable "nbRows_" & p1.getContent.String
                    set v = ActiveDocument.Variables("nbRows_" & p1.getContent.String)
                   'Récupère le nombre de ligne de l'objet désiré
                    set obj = ActiveDocument.GetSheetObject(p1.getContent.String)
                    'Retourne la valeur
                    v.SetContent obj.GetNoOfRows,
                true
                End
                Sub
              • Cliquez sur "Vérifier", puis sur "OK"
              • Créer une variable que vous allez appeler : SetNoOfRows_Id
              • Propriété du document (CTRL + ALT + D)
              • Onglet Déclencheur
              • Sélectionner "A chaque sélection" et cliquez sur "Ajouter des actions"
                • Cliquez Ajouter --> Externe  --> Définir la variable  --> OK
                  • Variable :  SetNoOfRows_Id         Valeur :  CH21     (l'id de votre tableau) 
                • Cliquez Ajouter --> Externe  --> exécuter une macro  --> OK
                • Nom de la macro:  SetNoOfRows        
                • Si vous désirez avoir le nombre de ligne d'autres objet, répétez les 2 actions ci-dessus
                • --> OK 

               

               

              Cette macro va créer est mettre à jour une variable pour chaque objet ==> nbRows_CH21   (l'id de votre tableau)

              que vous pourrez utiliser comme vous voulez.

                • Re: Nombre de ligne d'un tableau d'un autre onglet
                  Jordan Smagghe

                  Merci beaucoup Sébastien, ton explication est très clair et ça fonctionne nickel.

                    • Re: Nombre de ligne d'un tableau d'un autre onglet
                      Jordan Smagghe

                      J'ai un petit soucis.

                       

                      Si je défini plusieurs variables, seulement la dernière sera à jours.

                       

                      C'est à a dire mon dernier "Définir la variable".

                      test.png

                        • Re: Nombre de ligne d'un tableau d'un autre onglet
                          Sébastien Fatoux

                          Bonjour,

                           

                          J'ai tester avec 2 appels successifs et effectivement seul le dernier est mis à jour.

                           

                          Visiblement, l'appel de la macro est asynchrone et le 2ème setting de la variable se fait alors que la macro n'a pas encore commencé.

                           

                          J'ai modifié la macro pour que l'on ne l'appelle plus qu'une seul fois.

                           

                          La variable SetNoOfRows_Id va maintenant contenir la liste des Id des objets séparés par une virgule :  CH21, TB08

                           

                          Voici le code de la nouvelle macro :

                           

                           

                          Sub SetNoOfRows()

                               'Récupère le paramètre

                               set p1 = ActiveDocument.Variables("SetNoOfRows_Id")

                           

                               Ids = Split(p1.getContent.String, ",")

                               for each Id in Ids

                                    'Crée la variable de retour

                                    ActiveDocument.CreateVariable "nbRows_" & trim(Id)

                                    set v = ActiveDocument.Variables("nbRows_" & trim(Id))

                                    'Récupère le nombre de ligne de l'objet désiré

                                    set obj = ActiveDocument.GetSheetObject(trim(Id))

                                    'Retourne la valeur

                                    v.SetContent obj.GetNoOfRows,true

                               next

                          End Sub

                           

                            • Re: Nombre de ligne d'un tableau d'un autre onglet
                              Jordan Smagghe

                              Bonjour Sébastien merci pour cette réponse.

                               

                              Dsl pour le temps de réponse, j'étais très occupé.

                               

                              J'ai regardé ton code et il fonctionne bien merci beaucoup.

                               

                              Par contre le v.SetContent obj.GetNoOfRows,true ne fonctionne pas lorsque l'on a affaire à un tableau dynamique. Ce que je peux comprendre.

                               

                              Y aurait il un moyen de compter le nombre total de ligne?

                               

                              Merci d'avance pour ton aide.

                                • Re: Nombre de ligne d'un tableau d'un autre onglet
                                  Sébastien Fatoux

                                  Pour une pivot table, on peut utiliser la fonction obj.GetRowCount qui retourner le nombre de ligne total (entête, total, total intermédiaire) A noter que cette fonction peut également être utilisée sur les autre type de table.

                                   

                                  Voici la macro légèrement modifiée:

                                   

                                  Sub SetNoOfRows()
                                    'Récupère le paramètre
                                      set p1 = ActiveDocument.Variables("SetNoOfRows_Id")

                                      Ids = Split(p1.getContent.String, ",")
                                      for each Id in Ids
                                         'Crée la variable de retour
                                          ActiveDocument.CreateVariable "nbRows_" & trim(Id)
                                          set v = ActiveDocument.Variables("nbRows_" & trim(Id))
                                         'Récupère le nombre de ligne de l'objet désiré
                                          set obj = ActiveDocument.GetSheetObject(trim(Id))

                                   

                                          Select Case obj.GetObjectType
                                              Case 4 'TableBox
                                                 v.SetContent obj.GetNoOfRows, true
                                              Case 10 'PivotTable
                                                  v.SetContent obj.GetRowCount, true

                                              Case 11 'StraightTable

                                                  v.SetContent obj.GetNoOfRows, true

                                              Case Else

                                                  v.SetContent "Objet non géré", true

                                   

                                          End select
                                     
                                  next
                                  End Sub