Etape (marqueur) dans une macro VBA

Bonjour à tous.

C'est ma première visite sur ce site (même sur un forum). Tout d'abord, merci à tous ceux qui sont à l'origine ou qui contribus à la vie du Forum. Je souhaite préciser que j'utilise les macro VBA déjà depuis 10 ans mais 100% autodidacte, je ne vais donc pas toujours au plus simple. Merci d'avance pour votre compréhension.

Je vais essayer d'exposer ma difficulté :

J'ai une macro qui fait un certain nombre de tache (présentation et soustotal dans certaine colonnes).

Mon fichier (qui est une extraction) a plusieurs onglets toujours les mêmes mais ils ne sont pas toujours tous présents (les taches sont différentes en fonction des onglets).

Forcément quand ma macro arrive sur un onglet qui n'existe pas elle bloque.

Je voudrai pouvoir dire au début de chaque onglet : Si est erreur la sélection de l'onglet "E2" aller à l'étape "DDDD" sinon aller à l'étape "AAAA"

C'est pourquoi je cherche un moyen de mettre des étapes tout au long de ma macro et comment écrire la fonction ci-dessus.

Dessous un petit extrait de ma macro (pour l'exemple si la page "E2" n'existe pas la macro s'arrête alors qu'il y a d'autre pages derrières

Merci d'avance

'Pour selection Page 08
Sheets("08").Select
'Mettre les volets en D4
Range("D4").Select
ActiveWindow.FreezePanes = True
'Mettre les filtres
Rows("1:1").Select
Selection.AutoFilter
'insérer une ligne
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Faire un plan
Columns("N:R").Select
Selection.Columns.Group
'Nomer la plage de cellule HT08 et en faire un soustotal 9
Dim PlageHT08 As Range
Range("H4").Select
Set PlageHT08 = Worksheets("08").Range(Selection, Selection.Offset(0, -7).End(xlDown).Offset(1, 7))
PlageHT08.Select
ActiveWorkbook.Names.Add Name:="PlageSStotHT08", RefersTo:=PlageHT08
Range("H3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotHT08)"
'Fin nomer et SStot HT08
'
'Fin Onglet 08
'Pour selection Page E2
Sheets("E2").Select

Bonjour Sandrine357 et bienvenue

Pour commencer, VBA est un langage orienté objet il faut les utiliser, il est souvent inutile de faire des "Select"
Concernant la redirection d'erreur, il suffit d'utiliser On Error

On Error Goto Suite1
' procédure ...

Suite1:
' Suite procédure

Le code modifié

Sub Sandrine357()
  On Error GoTo Suite1
  'Pour selection Page 08
  With Sheets("08")
    .Activate
    'Mettre les volets en D4
    .Range("D4").Select
    ActiveWindow.FreezePanes = True
    'Mettre les filtres
    .Rows("1:1").AutoFilter
    'insérer une ligne
    .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    'Faire un plan
    .Columns("N:R").Columns.Group
    'Nomer la plage de cellule HT08 et en faire un soustotal 9
    Dim PlageHT08 As Range
    .Range("H4").Select
    Set PlageHT08 = .Range(Selection, Selection.Offset(0, -7).End(xlDown).Offset(1, 7))
    ActiveWorkbook.Names.Add Name:="PlageSStotHT08", RefersTo:=PlageHT08
    .Range("H3").FormulaR1C1 = "=SUBTOTAL(9,PlageSStotHT08)"
  End With

Suite1:
End Sub

Nota : pour le code, pense à utiliser le bouton prévu pour ça

image

A+

Bonjour JExceL2fr,

Tout d'abord, je te remercie beaucoup pour ta réponse, mais je rencontre un problème supplémentaire :

J'ai l'impression que ça ne marche qu'une seule foi. Or j'en ai potentiellement 46.

Je mets dessous un extrait de ma macro

Dans cet exemple si la page A4 n'existe pas c'est très bien, mais si la page A4 et la page A5 n'existent pas la macro bloque sur With Sheets("A5")

' Idem selection Page A2
On Error GoTo Suite2
Sheets("A2").Select
'Mettre les volets en D4
Range("D4").Select
ActiveWindow.FreezePanes = True
'Mettre les filtres
Rows("1:1").Select
Selection.AutoFilter
'Mettre au format nombre
Columns("H:I").Select
Selection.NumberFormat = "#,##0.00"
'Largeur auto de la colonne A pour les numéros de factures
Range("A1").Select
Columns("A:A").EntireColumn.AutoFit
'insérer une ligne 3 fois
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Faire un plan
Columns("N:R").Select
Selection.Columns.Group
Columns("B:B").Select
Selection.Columns.Group
Columns("T:T").Select
Selection.Columns.Group
'Nomer la plage de cellule HTA2 et en faire un soustotal 9
Dim PlageHTA2 As Range
Range("H4").Select
Set PlageHTA2 = Worksheets("A2").Range(Selection, Selection.Offset(0, -7).End(xlDown).Offset(1, 7))
PlageHTA2.Select
ActiveWorkbook.Names.Add Name:="PlageSStotHTA2", RefersTo:=PlageHTA2
Range("H3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotHTA2)"
'Fin nomer et SStot HTA2
'Idem pour TVAA2
Dim PlageTVAA2 As Range
Range("I4").Select
Set PlageTVAA2 = Worksheets("A2").Range(Selection, Selection.Offset(0, -8).End(xlDown).Offset(1, 8))
PlageTVAA2.Select
ActiveWorkbook.Names.Add Name:="PlageSStotTVAA2", RefersTo:=PlageTVAA2
Range("I3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotTVAA2)"
'
' Fin Onglet A2
Suite2:
' Idem selection Page A3
On Error GoTo Suite3
Sheets("A3").Select
'Mettre les volets en D4
Range("D4").Select
ActiveWindow.FreezePanes = True
'Mettre les filtres
Rows("1:1").Select
Selection.AutoFilter
'Mettre au format nombre
Columns("H:I").Select
Selection.NumberFormat = "#,##0.00"
'Largeur auto de la colonne A pour les numéros de factures
Range("A1").Select
Columns("A:A").EntireColumn.AutoFit
'insérer une ligne 3 fois
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Faire un plan
Columns("N:R").Select
Selection.Columns.Group
Columns("B:B").Select
Selection.Columns.Group
Columns("T:T").Select
Selection.Columns.Group
'Nomer la plage de cellule HTA3 et en faire un soustotal 9
Dim PlageHTA3 As Range
Range("H4").Select
Set PlageHTA3 = Worksheets("A3").Range(Selection, Selection.Offset(0, -7).End(xlDown).Offset(1, 7))
PlageHTA3.Select
ActiveWorkbook.Names.Add Name:="PlageSStotHTA3", RefersTo:=PlageHTA3
Range("H3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotHTA3)"
'Fin nomer et SStot HTA3
'Idem pour TVAA3
Dim PlageTVAA3 As Range
Range("I4").Select
Set PlageTVAA3 = Worksheets("A3").Range(Selection, Selection.Offset(0, -8).End(xlDown).Offset(1, 8))
PlageTVAA3.Select
ActiveWorkbook.Names.Add Name:="PlageSStotTVAA3", RefersTo:=PlageTVAA3
Range("I3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotTVAA3)"
'
' Fin Onglet A3
Suite3:
' Idem selection Page A4
On Error GoTo Suite4
Sheets("A4").Select
'Mettre les volets en D4
Range("D4").Select
ActiveWindow.FreezePanes = True
'Mettre les filtres
Rows("1:1").Select
Selection.AutoFilter
'Mettre au format nombre
Columns("H:I").Select
Selection.NumberFormat = "#,##0.00"
'Largeur auto de la colonne A pour les numéros de factures
Range("A1").Select
Columns("A:A").EntireColumn.AutoFit
'insérer une ligne 3 fois
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Faire un plan
Columns("N:R").Select
Selection.Columns.Group
Columns("B:B").Select
Selection.Columns.Group
Columns("T:T").Select
Selection.Columns.Group
'Nomer la plage de cellule HTA4 et en faire un soustotal 9
Dim PlageHTA4 As Range
Range("H4").Select
Set PlageHTA4 = Worksheets("A4").Range(Selection, Selection.Offset(0, -7).End(xlDown).Offset(1, 7))
PlageHTA4.Select
ActiveWorkbook.Names.Add Name:="PlageSStotHTA4", RefersTo:=PlageHTA4
Range("H3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotHTA4)"
'Fin nomer et SStot HTA4
'Idem pour TVAA4
Dim PlageTVAA4 As Range
Range("I4").Select
Set PlageTVAA4 = Worksheets("A4").Range(Selection, Selection.Offset(0, -8).End(xlDown).Offset(1, 8))
PlageTVAA4.Select
ActiveWorkbook.Names.Add Name:="PlageSStotTVAA4", RefersTo:=PlageTVAA4
Range("I3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotTVAA4)"
'
' Fin Onglet A4
Suite4:
' Idem selection Page A5
On Error GoTo Suite5
With Sheets("A5")
'Mettre les volets en D4
Range("D4").Select
ActiveWindow.FreezePanes = True
'Mettre les filtres
Rows("1:1").Select
Selection.AutoFilter
'Mettre au format nombre
Columns("H:I").Select
Selection.NumberFormat = "#,##0.00"
'Largeur auto de la colonne A pour les numéros de factures
Range("A1").Select
Columns("A:A").EntireColumn.AutoFit
'insérer une ligne 3 fois
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Faire un plan
Columns("N:R").Select
Selection.Columns.Group
Columns("B:B").Select
Selection.Columns.Group
Columns("T:T").Select
Selection.Columns.Group
'Nomer la plage de cellule HTA5 et en faire un soustotal 9
Dim PlageHTA5 As Range
Range("H4").Select
Set PlageHTA5 = Worksheets("A5").Range(Selection, Selection.Offset(0, -7).End(xlDown).Offset(1, 7))
PlageHTA5.Select
ActiveWorkbook.Names.Add Name:="PlageSStotHTA5", RefersTo:=PlageHTA5
Range("H3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotHTA5)"
'Fin nomer et SStot HTA5
'Idem pour TVAA5
Dim PlageTVAA5 As Range
Range("I4").Select
Set PlageTVAA5 = Worksheets("A5").Range(Selection, Selection.Offset(0, -8).End(xlDown).Offset(1, 8))
PlageTVAA5.Select
ActiveWorkbook.Names.Add Name:="PlageSStotTVAA5", RefersTo:=PlageTVAA5
Range("I3").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,PlageSStotTVAA5)"
End With
' Fin Onglet A5
Suite5:

Bonjour Sandrine,

Vous ne semblez pas comprendre l'histoire du bouton à utiliser pour coller votre code

Ensuite, nous ne savions pas ce que vous vouliez faire !
si c'est pour reproduire la même chose sur plusieurs feuilles, il suffit de faire une boucle

Regardez comment se présente mon code (entre balises) et qui est celui à utiliser, j'espère qu'il marchera sur votre fichier

Sub Sandrine357()
  Dim Sht As Worksheet
  Dim PlageHTA() As String, PlageTVA() As String
  Dim Inc As Integer
  Inc = 1
  ' Pour chaque feuille du classeur
  For Each Sht In ThisWorkbook.Sheets
    Sht.Select
    ' Mettre les volets en D4
    Sht.Range("D4").Select
    ActiveWindow.FreezePanes = True
    ' Mettre les filtres
    Sht.Rows("1:1").AutoFilter
    ' Mettre au format nombre
    Sht.Columns("H:I").NumberFormat = "#,##0.00"
    ' Largeur auto de la colonne A pour les numéros de factures
    Sht.Range("A1").Columns("A:A").EntireColumn.AutoFit
    ' insérer 3 lignes
    Sht.Rows("1:3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    'Faire un plan
    Sht.Columns("N:R").Group: Sht.Columns("B:B").Group: Sht.Columns("T:T").Group
    'Nomer la plage de cellule HTA2 et en faire un soustotal 9
    Sht.Range("H4").Select
    Inc = Inc + 1
    PlageHTA(Inc) = Sht.Range(Selection, Selection.Offset(0, -7).End(xlDown).Offset(1, 7))
    ActiveWorkbook.Names.Add Name:="PlageSStotHTA" & Inc, RefersTo:=PlageHTA(Inc)
    Sht.Range("H3").FormulaR1C1 = "=SUBTOTAL(9,PlageSStotHTA" & Inc & ")"
    'Idem pour TVA2
    Sht.Range("I4").Select
    PlageTVA(Inc) = Sht.Range(Selection, Selection.Offset(0, -8).End(xlDown).Offset(1, 8))
    ActiveWorkbook.Names.Add Name:="PlageSStotTVA" & Inc, RefersTo:=PlageTVA(Inc)
    Sht.Range("I3").FormulaR1C1 = "=SUBTOTAL(9,PlageSStotTVA" & Inc & ")"
  Next Sht
End Sub

A+

Rechercher des sujets similaires à "etape marqueur macro vba"