Formules trop longue

Bonjour

J'ai fait une macro de débutante, qui fonctionne, mais je pense qu'elle pourrais être simplifié et que l'exécution serait moins longue. Etant donné mais connaissance très restreint à ce niveau est-ce qu'il y aurait quelqu'un qui pourrais m'aider à la simplifié?

Voici la macro :

Sub imprimep1()

Range("a1:ac2107").Select

ActiveSheet.Unprotect "yl"

Columns("c:h").Select

Selection.EntireColumn.Hidden = True

Columns("q:ab").Select

Selection.EntireColumn.Hidden = True

Columns("ad:ad").Select

Selection.EntireColumn.Hidden = True

Dim cel As Range

For Each cel In Range("ac9:ac2107")

If cel = "0" Then

cel.EntireRow.Hidden = True

End If

If cel = "Plan 2" Then

cel.EntireRow.Hidden = True

End If

If cel = "Plan 3" Then

cel.EntireRow.Hidden = True

End If

If cel = "Plan 4" Then

cel.EntireRow.Hidden = True

End If

If cel = "Plan 5" Then

cel.EntireRow.Hidden = True

End If

If cel = "Plan 6" Then

cel.EntireRow.Hidden = True

End If

If cel = "Bureau" Then

cel.EntireRow.Hidden = True

End If

If cel = "Garage" Then

cel.EntireRow.Hidden = True

End If

If cel = "Autres" Then

cel.EntireRow.Hidden = True

End If

Next

ActiveSheet.PrintPreview

Columns("c:h").Select

Selection.EntireColumn.Hidden = False

Selection.EntireColumn.Hidden = False

Columns("q:ab").Select

Selection.EntireColumn.Hidden = False

Columns("ad:Ad").Select

Selection.EntireColumn.Hidden = False

For Each cel In Range("ac9:ac2107")

If cel = "0" Then

cel.EntireRow.Hidden = False

End If

If cel = "Plan 2" Then

cel.EntireRow.Hidden = False

End If

If cel = "Plan 3" Then

cel.EntireRow.Hidden = False

End If

If cel = "Plan 4" Then

cel.EntireRow.Hidden = False

End If

If cel = "Plan 5" Then

cel.EntireRow.Hidden = False

End If

If cel = "Plan 6" Then

cel.EntireRow.Hidden = False

End If

If cel = "Bureau" Then

cel.EntireRow.Hidden = False

End If

If cel = "Garage" Then

cel.EntireRow.Hidden = False

End If

If cel = "Autres" Then

cel.EntireRow.Hidden = False

End If

ActiveSheet.Protect "yl", True, True, True

Next

End Sub

Merci beaucoup

Bonjour Chantal,

Je te propose ce code VBA (à tester) :

Option Explicit

Sub imprimep1()
  Const Liste$ = "0_Plan 2_Plan 3_Plan 4_Plan 5_Plan 6_Bureau_Garage_Autres"
  Dim cel As Range: Application.ScreenUpdating = False: ActiveSheet.Unprotect "yl"
  Range("C:H, Q:AB, AD:AD").Columns.Hidden = True
  For Each cel In Range("AC9:AC2107")
    If InStr(Liste, cel) > 0 Then cel.EntireRow.Hidden = True
  Next cel
  ActiveSheet.PrintPreview
  For Each cel In Range("AC9:AC2107")
    If InStr(Liste, cel) > 0 Then cel.EntireRow.Hidden = False
  Next cel
  Range("C:H, Q:AB, AD:AD").Columns.Hidden = False
  ActiveSheet.Protect "yl", True, True, True
End Sub

Merci de me donner ton avis.

dhany

Bonjour

Bonjour Dhany

Pas mieux...

Fred

Salut Fred,

J'viens d'faire une dernière petite optimisation. j'ai rajouté la constante Liste ; double avantage : un seul texte à modifier, et les 2 instructions If tiennent facilement sur une seule ligne.

dhany

Bonjour

Je l'ai testé et c'est super tout fonctionne Un très gros merci

de rien, c'était avec plaisir ! attention : comme j'ai fait 2 autres petites optimisations de dernière minute, j'espère que tu as pris la toute dernière version ! ajout de la constante Liste, et 2 instructions If sur une seule ligne : https://forum.excel-pratique.com/viewtopic.php?p=651915#p651915

dhany

Good c'est fait et tout fonctionne

Merci

Re

ne pas oublier....

Merci Fred

Rechercher des sujets similaires à "formules trop longue"