impossible de définir la propriété hidden de la classe range vba excel 2010

RobertT

XLDnaute Nouveau
Bonjour

J'essai de masquer des lignes selon si la cellule contient une valeur ou non dans le "Formulaire budgétaire".

Toutefois, pour une raison, j'ai cette erreur "impossible de définir la propriété hidden de la classe range vba excel 2010"
Une partie du code.

J'ai 2 sections dans le formulaire qui fonctionne très bien mais les 2 autres. De plus, les formulaires de réquisitions_1... fonctionnent sans problème

Cliquez sur le bouton "Masquer les lignes".

Merci de votre aide
La boucle qui masque les lignes.
Module 4
Application.ScreenUpdating = False

Range(pDebPlage, pFinPlage).Select
For Each Cell In Selection
Cpt = 0
For i = 0 To pNbrLign
If Cell.Value = "" Then
Cell.EntireRow.Hidden = True
End If
Next
'If Cpt = 0 Then
'Cell.EntireRow.Hidden = True
'Else
'Cell.EntireRow.Hidden = False
'End If
Next
Application.ScreenUpdating = True
 

Pièces jointes

  • FB_DBS-0000-XX_20140814(1).xlsm
    169.3 KB · Affichages: 71

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : impossible de définir la propriété hidden de la classe range vba excel 2010

Bonjour Robert,

pour masquer la première plage, il faudrait déjà remplacer 0 par 14

For i = 0 To pNbrLign
If Cell.Value = "" Then
Cell.EntireRow.Hidden = True

à+
Philippe
 

RobertT

XLDnaute Nouveau
Re : impossible de définir la propriété hidden de la classe range vba excel 2010

Bonjour Philippe

pNbrLign est le nombre de ligne possible car si la colonne E contient une valeur, je ne veux pas la cacher.

Dans le fichier joint, le module 4 contient la proc suivante "Masquer_Lignes_Videsmandats"

Selon cette section, je vérifie le nombre de ligne selon le bloc à masquer.

Ensuite, je passe cette valeur la proc "ProcMasquer"
Donc pNbrLign représente le nombre de lignes potentielles à masquer.

En espérant que cela est plus clair.

Merci
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : impossible de définir la propriété hidden de la classe range vba excel 2010

Bonsoir le fil, bonsoir le forum,

Une petite boucle pour épurer le code :

Code:
Sub Masquer_Lignes_Videsmandats()
Dim O As Object 'déclare la variable O (Onglet)
Dim COL As Byte 'déclare la variable COL (COLonne)
Dim I As Byte 'déclare la variable I (Incrément)
Dim TC1 As String 'déclare la variable TC1 (Texte Cherché 1)
Dim TC2 As String 'déclare la variable TC2 (Texte Cherché 2)
Dim RD As Range 'déclare la variable RD (Recherche de Départ)
Dim RF As Range 'déclare la variable RF (Recherche de Fin)
Dim CD As Range 'déclare la variable CD (Cellule de Départ)
Dim CF As Range 'déclare la variable CF (Cellule de Fin)
Dim PL As Range 'déclare la variable PL (PLage)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set O = ActiveSheet 'définit l'onglet O
COL = IIf(O.Name = "Formulaire budgétaire", 5, 6) 'définit la colonne COL
For I = 1 To 4 'boucles sur les 4 recherches
    Select Case I 'agit en fonction de l'élément I de la boucle
        Case 1 'cas I = 1
            TC1 = "Acquisitions équipements matériels" 'définit le texte recherché 1 TC1
            TC2 = "Sous-total acquisition matériels" 'définit le texte recherché 2 TC2
        Case 2 'cas I = 2
            TC1 = "Acquisition de contrat entretien matériel" 'définit le texte recherché 1 TC1
            TC2 = "Sous-total acquisition de contrat entretien matériels" 'définit le texte recherché 2 TC2
        Case 3 'cas I = 3
            TC1 = "Acquisition de licences/logiciels" 'définit le texte recherché 1 TC1
            TC2 = "Sous-total acquisition licences/logiciels" 'définit le texte recherché 2 TC2
        Case 4 'cas I = 4
            TC1 = "Acquisition de contrat entretien logiciels" 'définit le texte recherché 1 TC1
            TC2 = "Sous-total acquisition contrat entretien logiciels" 'définit le texte recherché 2 TC2
    End Select 'fin de l'action en fonction de l'élément I de la boucle
    Set RD = O.Cells.Find(TC1, , xlValues, xlWhole) 'definit recherche de départ RD
    'si il existe au moins une occurrence trouvée, définit la cellule de départ CD
    If Not RD Is Nothing Then Set CD = O.Cells(RD.Row + 2, COL)
    Set RF = O.Cells.Find(TC2, , xlValues, xlWhole) 'definit recherche de fin RF
    'si il existe au moins une occurrence trouvée, définit la cellule de fin CF
    If Not RF Is Nothing Then Set CF = O.Cells(RF.Row - 1, COL)
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set PL = O.Range(CD, CF) 'définit la plage PL (génère une erreur si CD et CF ne sont pas définies)
    If Err <> 0 Then Err.Clear: Exit Sub 'si une erreur a été générée, efface l'erreur, sort de la procédure
    On Error GoTo 0 'annule la gestion des erreurs
    Call ProcMasquer(PL) 'lance la procédure [ProcMasquer] avec l'argument PL
Next I 'prochaine recherche de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub

Code:
Sub ProcMasquer(Plage As Range)
Dim CEL As Range 'déclare la variable CEL

For Each CEL In Plage 'boucle sur toutes les cellule CEl de la plage Plage
    If CEL.Value = "" Then CEL.EntireRow.Hidden = True 'si la cellule est vide, masque la ligne
Next CEL 'prochaine cellule de la plage
End Sub

Code:
Sub Afficher_Lignes_Videsmandats()
Dim O As Object 'déclare la variable O (Onglet)

Set O = ActiveSheet 'définit l'onglet O
O.Cells.EntireRow.Hidden = False 'affiche toutes les ligne de l'onglet
End Sub

Attention ! j'ai harmonisé le nom des plages recherchées qui n'était pas strictement identique partout, en utilisant les variables TC1 et TC2 dans les 4 onglets...

Le fichier :
 

Pièces jointes

  • RobertT_v01.xlsm
    167.9 KB · Affichages: 44

RobertT

XLDnaute Nouveau
Re : impossible de définir la propriété hidden de la classe range vba excel 2010

:)Sorry pour le décalage horaire car je reste au Québec, l'autre rive....

Premièrement merci à Barbatruc,

tu me permets de voir le code d'une autre façon. J'apprécie le travail et la solution proposée et qui sera utilisée

Un, je gagne en performance et de deux en apprentissage.
Existe-t-il des références sites web livres pour optimiser le code VBA? Je suis preneur.
Merci pour ton travail, c'est vraiment apprécié.
PS: dans le but de trouver la source du problème, quelle était l'erreur dans le code ?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : impossible de définir la propriété hidden de la classe range vba excel 2010

Bonjour le fil, bonjour le forum,

L'erreur je ne l'ai pas trouvée. J'avoue que je ne comprenais pas la double boucle

Code:
For Each cell In Selection
   Cpt = 0
   For i = 0 To pNbrLign
et surtout pourquoi ça plante à la ligne 70 ???
 

Discussions similaires

Réponses
1
Affichages
192

Statistiques des forums

Discussions
312 392
Messages
2 087 988
Membres
103 690
dernier inscrit
LeDuc