Méthode Select de la classe Range

Résolu
Bonjour à tous,

j'ai un code VBA qui me permet de créer un graphique à partir du nombre d'occurences de chaque entrée.

Certaines entrées ont une occurence nulle, et j'aimerais qu'elles n'apparaissent pas dans mon graphique.
Pour cela, avant la création du graphique, j'ai rajouté les lignes de code suivantes qui me permettent de masquer les lignes pour laquelle l'occurence est nulle.

''''''''''''''''''''''Masquage des occurrence nulles''''''''''''''''''''''''''''

ligne2 = 27

Do Until IsEmpty(Cells(ligne2, "B"))
    If Cells(ligne2, "B").Value = 0 Then
        Rows(ligne2).Select
        Selection.EntireRow.Hidden = True
        ligne2 = ligne2 + 1
    Else
        ligne2 = ligne2 + 1
    End If
Loop


Ce code marche très bien lorsqu'il est dans un module à part, sauf que lorsque je l'ajoute dans mon code général qui s'active par un clic sur un bouton, il ne marche plus....

J'ai une erreur d'éxécution 1004 qui apparaît et qui me dit que "la méthode Select de la classe Range a échoué" ... Le débogage m'indique donc que c'est cette ligne qui pose un problème :

Rows(ligne2).Select


J'ai essayé de remplacer
Rows(ligne2).Select

par
Range(ligne2:ligne2).Select


mais ça ne marche pas non plus ....

Une idée de pourquoi ça marche dans un module et pas dans le code global ?
Merci d'avance !

7 réponses

  1. Bonjour le fil, bonjour le forum,

    Pas trop le temps de regarder tous les codes... Mais juste une remarque. Dans le module 5, procédure graph_def_risque, tu as, si j'ai bien compté, 2 fois 66 variables. Je te conseille de remplacer ces 66 variables par un tableau de variables à 66 entrées. J'ai utilisé un tableau de 2 lignes, 66 colonnes car je ne savais pas si tu aurais besoin plus tard du nom de la variable.
    Dans la première ligne sont stockés les noms des variables et dans la seconde les valeurs. J'ai nommé TBCCO le tableau des variables cco et TBR le tableau des variables R. Ça donne :
    Dim TBOCC(1, 1 To 66) As Variant
    Dim TBR(1, 1 To 66) As Variant
    
    TBOCC(0, 1) = "occ_101"
    TBOCC(1, 1) = Application.CountIf(Worksheets("Risques élevés").Range("G:G"), "101")
    TBOCC(0, 2) = "occ_102"
    TBOCC(1, 1) = Application.CountIf(Worksheets("Risques élevés").Range("G:G"), "102")
    '...
    TBOCC(0, 66) = occ_1605
    TBOCC(1, 66) = Application.CountIf(Worksheets("Risques élevés").Range("G:G"), "1605")
    
    TBR(0, 1) = "r101"
    TBR(1, 1) = "sol glissant"
    TBR(0, 2) = "r102"
    TBR(1, 1) = "sol inégal"""
    '...
    TBR(0, 66) = "r605"
    TBR(1, 66) = "coactivité"


    Pour le moment tu ne gagnes rien mais c'est après car tu vas supprimer toutes les lignes :
    Cells(27, "A") = r101
    '...
    Cells(92, "B") = occ_1605


    par une seule boucle :
    For X = 1 To 66
        Cells(26 + X, "A") = TBR(1, X)
        Cells(26 + X, "B") = TBOCC(1, X)
    Next X
    


    si tu n'as pas besoin du nom des variables, ça se simplifie comme ça :
    Dim TBOCC(1 to 66) As Variant
    Dim TBR(1 To 66) As Variant
    
    TBOCC(1) = Application.CountIf(Worksheets("Risques élevés").Range("G:G"), "101")
    TBR(1) = "sol glissant"
    '...
    TBOCC(66) = Application.CountIf(Worksheets("Risques élevés").Range("G:G"), "1605")
    TBR(66) = "coactivité"

    la boucle devient :
    For X = 1 To 66
        Cells(26 + X, "A") = TBR(X)
        Cells(26 + X, "B") = TBOCC(X)
    Next X


    À plus,
    ThauTheme
    1. Merci pour le conseil ! C'est vrai qu'en fait je n'ai pas besoin du nom des variables, j'ai juste besoin des valeurs.
    2. [MAJ]

      J'ai poussé l'idée des tableaux encore plus loin pour m'éviter d'avoir trop de lignes à écrire, ça donne ça, et ça réduit considérablement (c'est peu dire) la longueur du code !!

      Dim TB_R(1 To 66) As Variant
      Dim TB_CODE(1 To 66) As Variant
      Dim TB_OCC(1 To 66) As Variant
      
              '''Enregistrement des noms des risques dans le tableau TB_R'''
      
      For i = 1 To 66
          TB_R(i) = Sheets("Risques").Range("E" & i + 2)
      Next
      
              '''Enregistrement de tous les codes risques dans le tableau TB_CODE'''
              
      For i = 1 To 66
          TB_CODE(i) = Sheets("Risques").Range("D" & i + 2)   'à partir de la cellule D3 de la feuille "Risques"
      Next
      
              '''Comptage des occurences des codes risque dans "Risques élevés" et enregistrement dans le tableau TB_OCC'''
                   
      For i = 1 To 66
          TB_OCC(i) = Application.CountIf(Worksheets("Risques élevés").Range("G:G"), TB_CODE(i))
      Next
                   
              '''Attribution des risques et occurences à des cellules pour création du graphique'''
      
      Sheets("Résumé graphique").Activate
      
      For X = 1 To 66
          Cells(26 + X, "A") = TB_R(X)
          Cells(26 + X, "B") = TB_OCC(X)
      Next X
      


      Merci pour le tuyau !!
    3. Re-bonjour tous !

      J'ai un petit problème avec mon document qui compile tout très bien (!!) mais lorsque j'essaie de le rouvrir, j'ai un message d'erreur qui me dit :

      "Excel a rencontré un contenu illisible dans "Nom_du_document". Voulez-vous récupérer le contenu de ce classeur ? Si la source de ce classeur est fiable, cliquez sur Oui."

      Je clique sur Oui, et j'ai une fenêtre "Réparations" qui s'ouvre et me dit :

      "Enregistrements supprimés: Tri dans la partie /xl/tables/table17.xml (Tableau)".

      Sauf que je n'arrive pas à savoir à quel tableau correspond "table17", et je ne repère nulle part un quelconque tri supprimé...

      Alors question : est-ce que c'est dû à mon format d'enregistrement, ou ça le fait aussi sur vos ordinateurs ? Et comment est-ce que je peux changer ça ?

      Le fichier ICI : http://www.cjoint.com/c/FIEm3UNFs14

      Merci pour vos réponses !