Pourquoi ce message?

Bonjour le forum

Si par erreur j'enregistre par le VBE j'ai un message d'erreur. Par la feuille pas de problème

Pourquoi?

Cordialement

2toto.zip (6.61 Ko)

Bonjour,

Dans le fichier joint ... toutes les feuilles sont vides ...

Ce fichier ne comporte qu'une procédure Private Sub Workbook_BeforeSave ... qui ... ne doit pas aimer le vide ...

Bonjour James007

Dans le véritable fichier de 13 feuilles IDEM

La soluce introuvable, si une mais ne ferme pas les lignes par le VBE

Fichier joint

Merci à toi

Cordialement

4toto.zip (6.84 Ko)

Bonjour,

Dans la mesure où je n'arrive pas à répliquer l'erreur qui se produit chez toi ...

tu pourrais tester le code suivant :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Cel As Range
On Error Resume Next 'Pour éviter le message si par erreur on enregistre le fichier mais les lignes ne sont pas masquées
  With ActiveSheet
      For Each Cel In .Range("E9:E13,E15:E28,E37:E41,E43:E56,E65:E69,E71:E84,E93:E97,E99:E112")
          If Cel = "" Then Cel.EntireRow.Hidden = True
      Next Cel
  End With
On Error GoTo 0
End Sub

En espèrant que cela t'aide

Re

Non fonctionne pas

Voici le message testé par 3 potes sous 2010 2013

Erreur d'exécution '1004':

Erreur définie par l'application ou par l'objet

Merci à toi

Re,

Désolé ...

mais ... dans la mesure où je n'arrive pas à répliquer chez moi ...l'erreur qui se produit chez toi ...

Chez moi ... que je sauvegarde depuis une feuille ou depuis VBE ... tout se passe normalement ...

Je ne sais pas comment t'aider plus avant ...

Re

Avec cette macro ça le reproduit chez 3 potes

Les lignes se masquent bien même si ça ne bug pas?

Bug en PJ

Cordialement

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Cel As Range
  With ActiveSheet
      For Each Cel In .Range("E9:E13,E15:E28,E37:E41,E43:E56,E65:E69,E71:E84,E93:E97,E99:E112")
          If Cel = "" Then Cel.EntireRow.Hidden = True
      Next Cel
  End With
End Sub
bug

Re,

Comme je te l'ai dit ... malheureusement ... je n'ai pas les moyens de tester sur plusieurs versions d'Excel ...

Re,

Comme je te l'ai dit ... malheureusement ... je n'ai pas les moyens de tester sur plusieurs versions d'Excel ...

Re

Oui bien compris

Bon ben si quelqu'un à le Bug il fera peut-être signe

Merci à toi

Bonne journée

Bonjour

Une proposition :

Plutôt que d'utiliser un For Each, très pratique mais très lent utilises plutôt une boucle FOR/NEXT classique avec un booléen dans une colonne masquée et tu masque toutes les lignes en fonction de la valeur de ce booléen

J'ai souvent rencontré des plantages ou des lenteurs à cause de For Each jamais avec la solution FOR/NEXT de toute façon plus rapide en exécution !

Bonjour

Une proposition :

Plutôt que d'utiliser un For Each, très pratique mais très lent utilises plutôt une boucle FOR/NEXT classique avec un booléen dans une colonne masquée et tu masque toutes les lignes en fonction de la valeur de ce booléen

J'ai souvent rencontré des plantages ou des lenteurs à cause de For Each jamais avec la solution FOR/NEXT de toute façon plus rapide en exécution !

Bonjour Gli73

Trop compliqué pour moi

Si tu peux faire ça dans mon fichier en partant de ma macro d'origine je serais ravi car moi un peux trop compliqué

Ça fait C$$$R ce truc

Merci à toi

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
Dim Cel As Range

  With ActiveSheet
      .Columns("G:I").Hidden = True
      For Each Cel In .Range("E11:E15,E17:E30,E39:E43,E45:E58,E67:E71,E73:E86,E95:E99,E101:E114")
          If Cel = "" Then Cel.EntireRow.Hidden = True
      Next Cel
      Application.Goto .Range("A10"), True
      ActiveSheet.Range("A1").Select
  End With
Application.ScreenUpdating = True
End Sub

Bonjour le forum

Voilà une solution qui fonctionne

Merci à tous

Bonne fin de soirée

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim J As Long
Application.ScreenUpdating = False

   With ActiveSheet
      .Columns("G:I").Hidden = True
      For J = 11 To 114
        Select Case J
          Case 16, 31 To 38, 44, 59 To 66, 72, 87 To 94, 100
          Case Else
          If .Range("E" & J) = "" Then .Rows(J).Hidden = True
        End Select
      Next J
      Application.Goto .Range("A10"), True
      ActiveSheet.Range("A1").Select
  End With

Application.ScreenUpdating = True
End Sub

Re,

Content que tu aies pu résoudre ton problème ...

Re

Merci à vous tous

Quand on trouve une solution qui fonctionne même si elle n'est pas tout à fait "logique" au point de vue VBE.

Encore merci à tous

Bonne fin de soirée

Cordialement

Rechercher des sujets similaires à "pourquoi message"