Erreur d'exécution VBA

  • Initiateur de la discussion Initiateur de la discussion Opus185
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Opus185

XLDnaute Nouveau
Bonjour,

j'ai un code qui, lorsque je sélectionne l'onglet de la feuille souhaitée, masque les colonnes dont les cellules de b3 à aa33 sont vides. Toutefois, j'obtiens une erreur (3e ligne). Pourriez-vous me guider pour la résolution?

Private Sub Worksheet_Activate()
For Each c In Feuil8.Range("b3:aa33")
If c = "" Then
c.Columns.Hidden = True
Else
c.Columns.Hidden = False
End If
Next

End Sub

Merci!
 
Re : Erreur d'exécution VBA

Bonsour®
peut-être ??? :
🙄
VB:
Private Sub Worksheet_Activate()
Dim c As Range
Application.ScreenUpdating = False
 With Sheets("Feuil8")
 For Each c In Range("b3:aa33")
        If c = "" Then
                c.EntireColumn.Hidden = True
        Else
                c.EntireColumn.Hidden = False
        End If
Next
End With
Application.ScreenUpdating = True
 End Sub
 
Re : Erreur d'exécution VBA

Bonsoir le fil, bonsoir le forum,

Peut-être comme ça :

Code:
Private Sub Worksheet_Activate()
Dim c As Range

For Each c In Feuil8.Range("B3:AA33")
    If c.Value = "" Then
        Columns(c.Column).Hidden = True
    Else
        Columns(c.Column).Hidden = False
    End If
Next
End Sub
 
Re : Erreur d'exécution VBA

Bonsoir à tous,

Est-ce que l'erreur pourrait provenir du fait que dans plusieurs cellules de cette plage, j'ai des erreurs #valeur! ?

Bien sûr, et au lieu de :

Code:
If c.Value = "" Then
écrire :

Code:
If c.Text = "" Then
Mais votre code ne vaut pas grand-chose 🙄

Au lieu d'étudier chaque cellule étudier chaque colonne :

Code:
Private Sub Worksheet_Activate()
Dim col As Range
Application.ScreenUpdating = False
For Each col In Feuil8.[B3:AA33].Columns
  col.Hidden = Application.CountA(col) = 0
Next
End Sub
CountA c'est NBVAL.

A+
 
Re : Erreur d'exécution VBA

Une fois le contenu des cellule normalisé (plus aucune erreur #valeur! n'est affichée, elles sont remplacées par ""), je n'obtiens plus l'erreur dans le code. Toutefois, il ne fait pas tout à fait ce que je souhaite et j'ai mal exprimé mon besoin.

Dans la colonne, s'il y a des cellules non-vides, la colonne doit être affichée. Certaines colonnes comportent des "" dans leurs cellules de la plage demandée, mais s'il y a des valeurs, il faut afficher la colonne.

Par exemple, dans le fichier en pièce jointe, la colonne D (et de E:AA) devraient être masquées.

Merci!
 

Pièces jointes

Re : Erreur d'exécution VBA

Opus ,

Voilà , essayes comme cela , ca marche beaucoup mieux


Code:
Private Sub Worksheet_Activate()
Dim c As Range
Application.ScreenUpdating = False
'Référence la feuil1
With Sheets("Feuil1")
 'Pour que range soit pris dans la référence feuil1 , il faut un . devant le range
'L 'on parcours la zone définie colonne par colonne
 For Each c In .Range("b3:aa33").Columns
      If c.Text = "" Then
          c.EntireColumn.Hidden = True
        Else
          c.EntireColumn.Hidden = False
      End If
 Next
End With

Application.ScreenUpdating = True
End Sub
 
Re : Erreur d'exécution VBA

Re,

Si l'on veut que les cellules contenant des valeurs d'erreur soient traitées comme les cellules vides, utiliser :

Code:
Private Sub Worksheet_Activate()
Dim col As Range, Nerreur&
Application.ScreenUpdating = False
For Each col In [B3:AA33].Columns
  Nerreur = Evaluate("SUM(N(ISERROR(" & col.Address & ")))")
  col.Hidden = Application.CountA(col) - Nerreur = 0
Next
End Sub
Nota : je suppose que Feuil8 c'est la feuille contenant la macro, il est donc inutile de la mentionner.

A+
 
Re : Erreur d'exécution VBA

Re,

Pour finir, si en outre il y a des textes vides "" dans les cellules, on peut utiliser :

Code:
Private Sub Worksheet_Activate()
Dim col As Range, c As Range
Application.ScreenUpdating = False
[B3:AA33].Columns.Hidden = True
For Each col In [B3:AA33].Columns
  For Each c In col.Cells
    If c.Text <> "" And Not IsError(c) Then
      col.Hidden = False
      Exit For
    End If
  Next
Next
End Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
205
Réponses
2
Affichages
515
Réponses
4
Affichages
185
Réponses
32
Affichages
1 K
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
319
Retour