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.
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 :
J'ai essayé de remplacer
par
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 !
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
-
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
-
-
[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 !! -
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 !
-