[VBA]erreur 1004 propriété hidden class range

silverkeops Messages postés 4 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

Je développe des macro en VB pour Excel et je ne parviens pas à résoudre mon problème.

Voici mon code :

Public Sub Afficher_Colonnes()

Range("AK14").Select 'on selectionne la première case de test

Do While ActiveCell.Value <> "FIN_TEST"

If ActiveCell.Value <> txt_colonne Then
ActiveCell.EntireColumn.Hidden = True

Else:
ActiveCell.EntireColumn.Hidden = False

End If

Selection.Offset(0, 1).Select 'on se déplace d'une case vers la droite pour continuer les tests

Loop

End Sub

L'éxécution s'arrete à le ligne "....hidden=true" avec le message d'erreur suivant :

Erreur d'exécution '1004':
Impossible de définir la propriété hidden de la classe range.

Ce qui est vraiment bizarre c'est que l'exécution ne s'arrête pas à la 1ère boucle mais après 30 ou 40 !

Merci d'avance por votre aide.

Kéo

4 réponses

  1. Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   214
     
    bonsoir Kéo, Lupin,

    n'y aurait-il pas des cellules protégées quelquepart ?

    1
    1. silverkeops Messages postés 4 Statut Membre
       
      Bonjour kobaya,

      Aucune cellule n'est protégée ni fusionnée.

      J'ai essayé de faire un

      Range("...").ColumnWidth = 0

      à la place du Range("...").EntireColumn.Hidden = True

      et l'erreur est exactement la même : "Erreur 1004 impossible de définir la propriété ColumnWidth de la classe Range...

      Autre indice : quand je sélectionne un grand nombre de colonne (40 ou 50) et que je fais clic droit/masquer, il y a l'erreur "impossible de déplacer des objets en dehors de la feuille".
      Je précise que cela fonctionne en sélectionnant moins de colonnes (environ 20-25).
      Je vois donc une limitation du nombre, mais est-il possible de lever cette limitation et comment ?

      Merci pour votre aide
      0
  2. Utilisateur anonyme
     
    Bonjour ou Bonsoir,

    suggestion :

    Sub Afficher_Colonnes()
    
        Dim txt_colonne As String
        Dim Feuille As String, Cellule As String
    
        'Application.ScreenUpdating = False
        
        txt_colonne = "Résultat"
    
        Feuille = ActiveSheet.Name
        Cellule = ActiveCell.Address
        
        Sheets("Feuil1").Range("AK14").Select
    
        While (ActiveCell.Value <> "FIN_TEST")
    
            If (ActiveCell.Value <> txt_colonne) Then
                ActiveCell.EntireColumn.Hidden = True
            Else
                ActiveCell.EntireColumn.Hidden = False
            End If
    
            ActiveCell.Offset(0, 1).Select
    
        Wend
        Sheets(Feuille).Range(Cellule).Select
    
        'Application.ScreenUpdating = True
    
    
    End Sub
    


    plus la syntaxe est explicite et moins il y a d'erreur :-)

    Lupin
    0
  3. silverkeops Messages postés 4 Statut Membre
     
    Hélas la même erreur est générée dans le If, toujours au niveau du
    "ActiveCell.EntireColumn.Hidden = True"...
    0
  4. Utilisateur anonyme
     
    Bonjour,

    Je vous suggère de trapper l'erreur. L'erreur 1004 signifie
    qu'il y a débordemant de plage !

    Sub Afficher_Colonnes()
    
    
        Dim txt_colonne As String
        Dim Feuille As String, Cellule As String
    
        On Error GoTo Err_Afficher
        
        'Application.ScreenUpdating = False
        
        txt_colonne = "Résultat"
    
        Feuille = ActiveSheet.Name
        Cellule = ActiveCell.Address
        
        Sheets("Feuil1").Range("AK14").Select
    
        While (ActiveCell.Value <> "FIN_TEST")
    
            If (ActiveCell.Value <> txt_colonne) Then
                ActiveCell.EntireColumn.Hidden = True
            Else
                ActiveCell.EntireColumn.Hidden = False
            End If
    
            ActiveCell.Offset(0, 1).Select
    
        Wend
        Sheets(Feuille).Range(Cellule).Select
    
        'Application.ScreenUpdating = True
    
    Exit_Afficher:
        Exit Sub
    
    Err_Afficher:
        MsgBox Err.Number & vbCrLf & Err.Description
        
    
    End Sub
    
    


    Placer un poinr d'arrêt à la ligne :

    MsgBox Err.Number & vbCrLf & Err.Description

    et valider le contenu des variables !

    Lupin
    0