Qlik Community

Groupe des Utilisateurs Francophones

Vous êtes francophone? Ce groupe est pour vous. Venez découvrir comment démarrer avec Qlik Sense et QlikView, poser vos questions et partager vos tutos et astuces avec les membres de notre communauté.

Highlighted
magnamaitre
Not applicable

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

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.

1 Solution

Accepted Solutions
sfatoux72
Not applicable

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

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.

7 Replies
magnamaitre
Not applicable

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

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...

sfatoux72
Not applicable

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

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.

magnamaitre
Not applicable

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

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

magnamaitre
Not applicable

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

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

sfatoux72
Not applicable

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

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

magnamaitre
Not applicable

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

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.

sfatoux72
Not applicable

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

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