Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

(vba) boucle ...

17 réponses
Avatar
j-pascal
Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je n'y
arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de sélectionner
tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de chacunes
des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------
--
Cordialement @+
JP

10 réponses

1 2
Avatar
LSteph
Bonsoir,
Pour effacer des plages pas besoin de sélectionner
voici exemple à adapter:

Sub clplg()
Dim i As Byte
For i = 5 To 16
With Worksheets(i).[f2:f9]
.ClearContents
.ClearComments
End With
Next
End Sub

'lSteph

Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je n'y
arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de sélectionner
tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de
chacunes des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------


Avatar
Philippe.R
Bonsoir,

Je propose :

Sub sélectMois()
Application.DisplayAlerts = False
application.enableeventsúlse
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
'les actions sur tes plages à effacer ...
Next i
application.enableevents=true
Application.DisplayAlerts = True
End Sub

--
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je n'y
arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de sélectionner
tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de
chacunes des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------
--
Cordialement @+
JP


Avatar
j-pascal
Bonsoir,

J'ai fait un essai et j'ai une erreur : la méthode select de la classe range
a échoué. Habituellement, quand je sélectionnais toutes les feuilles en même
temps et je j'effaçais les plages, j'avais une erreur avec la méthode Shape
(l'effacement des saisies était ok, mais pas les commentaires) car
manifestement il était impossible de sélectionner tous les "boutons" en même
temps (cf workbook_change) ..
Dans chaque feuille sélectionnée, j'ai ceci (attention c'est indigeste,
surtout pour un retour de vacances ;-) ) :

'---------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'------------------------------------------
' If Not Intersect(Target, [P9:AT110]) Is Nothing And Target.Count = 1
Then
' [mémoire].Interior.ColorIndex = xlNone
' ActiveWorkbook.Names.Add Name:="mémoire", RefersTo:="=" & Range("c"
& Target.Row).Address & ""
' Range("c" & Target.Row).Interior.ColorIndex = 3
' End If
'------------------------------------------
If Not Intersect(Target, [MoisInterdit]) Is Nothing And Target.Count =
1 Then
Application.EnableEvents = False
compteur = 0
For Each com In Range("p" & Target.Row & ":at" & Target.Row)
If Len(com.NoteText) Then compteur = 1: Exit For
Next
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) > 0 Or compteur = 1 Then
Target = [mémo]
MsgBox "Vous ne devez pas supprimer ce Nom !" & Chr(10)
& Chr(10) & "(La ligne contient des informations ...)", vbOKOnly +
vbInformation, "Attention !"
End If
End If

Application.EnableEvents = True

ActiveSheet.Shapes("Bouton 2").Select
Selection.Characters.Text = Range("AW3").Value
Range("F6").Select 'désélectionne le bouton !

ActiveSheet.Protect Password:="", DrawingObjects:úlse,
Contents:=True, Scenarios:úlse
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub
'------------------------------------------------------

@+ ?

JP
"LSteph" a écrit dans le message de news:
OL$
Bonsoir,
Pour effacer des plages pas besoin de sélectionner
voici exemple à adapter:

Sub clplg()
Dim i As Byte
For i = 5 To 16
With Worksheets(i).[f2:f9]
.ClearContents
.ClearComments
End With
Next
End Sub

'lSteph

Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je n'y
arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de sélectionner
tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de
chacunes des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------




Avatar
LSteph
re,

dans l'exemple que je t'ai donné il n'y a pas de select
;-)



Bonsoir,

J'ai fait un essai et j'ai une erreur : la méthode select de la classe
range a échoué. Habituellement, quand je sélectionnais toutes les
feuilles en même temps et je j'effaçais les plages, j'avais une erreur
avec la méthode Shape (l'effacement des saisies était ok, mais pas les
commentaires) car manifestement il était impossible de sélectionner tous
les "boutons" en même temps (cf workbook_change) ..
Dans chaque feuille sélectionnée, j'ai ceci (attention c'est indigeste,
surtout pour un retour de vacances ;-) ) :

'---------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'------------------------------------------
' If Not Intersect(Target, [P9:AT110]) Is Nothing And Target.Count =
1 Then
' [mémoire].Interior.ColorIndex = xlNone
' ActiveWorkbook.Names.Add Name:="mémoire", RefersTo:="=" &
Range("c" & Target.Row).Address & ""
' Range("c" & Target.Row).Interior.ColorIndex = 3
' End If
'------------------------------------------
If Not Intersect(Target, [MoisInterdit]) Is Nothing And Target.Count
= 1 Then
Application.EnableEvents = False
compteur = 0
For Each com In Range("p" & Target.Row & ":at" & Target.Row)
If Len(com.NoteText) Then compteur = 1: Exit For
Next
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) > 0 Or compteur = 1 Then
Target = [mémo]
MsgBox "Vous ne devez pas supprimer ce Nom !" &
Chr(10) & Chr(10) & "(La ligne contient des informations ...)", vbOKOnly
+ vbInformation, "Attention !"
End If
End If

Application.EnableEvents = True

ActiveSheet.Shapes("Bouton 2").Select
Selection.Characters.Text = Range("AW3").Value
Range("F6").Select 'désélectionne le bouton !

ActiveSheet.Protect Password:="", DrawingObjects:úlse,
Contents:=True, Scenarios:úlse
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub
'------------------------------------------------------

@+ ?

JP
"LSteph" a écrit dans le message de news:
OL$
Bonsoir,
Pour effacer des plages pas besoin de sélectionner
voici exemple à adapter:

Sub clplg()
Dim i As Byte
For i = 5 To 16
With Worksheets(i).[f2:f9]
.ClearContents
.ClearComments
End With
Next
End Sub

'lSteph

Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je
n'y arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de
sélectionner tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de
chacunes des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------







Avatar
LSteph
...
au cas où des évennementielles réagiraient essaie ainsi

Sub clplg()
Dim i As Byte
application.enableeventsúlse
For i = 5 To 16
With Worksheets(i).[f2:f9]
.ClearContents
.ClearComments
End With
Next
application.enableevents=true
End Sub

'lSteph

Bonsoir,

J'ai fait un essai et j'ai une erreur : la méthode select de la classe
range a échoué. Habituellement, quand je sélectionnais toutes les
feuilles en même temps et je j'effaçais les plages, j'avais une erreur
avec la méthode Shape (l'effacement des saisies était ok, mais pas les
commentaires) car manifestement il était impossible de sélectionner tous
les "boutons" en même temps (cf workbook_change) ..
Dans chaque feuille sélectionnée, j'ai ceci (attention c'est indigeste,
surtout pour un retour de vacances ;-) ) :

'---------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
'------------------------------------------
' If Not Intersect(Target, [P9:AT110]) Is Nothing And Target.Count =
1 Then
' [mémoire].Interior.ColorIndex = xlNone
' ActiveWorkbook.Names.Add Name:="mémoire", RefersTo:="=" &
Range("c" & Target.Row).Address & ""
' Range("c" & Target.Row).Interior.ColorIndex = 3
' End If
'------------------------------------------
If Not Intersect(Target, [MoisInterdit]) Is Nothing And Target.Count
= 1 Then
Application.EnableEvents = False
compteur = 0
For Each com In Range("p" & Target.Row & ":at" & Target.Row)
If Len(com.NoteText) Then compteur = 1: Exit For
Next
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) > 0 Or compteur = 1 Then
Target = [mémo]
MsgBox "Vous ne devez pas supprimer ce Nom !" &
Chr(10) & Chr(10) & "(La ligne contient des informations ...)", vbOKOnly
+ vbInformation, "Attention !"
End If
End If

Application.EnableEvents = True

ActiveSheet.Shapes("Bouton 2").Select
Selection.Characters.Text = Range("AW3").Value
Range("F6").Select 'désélectionne le bouton !

ActiveSheet.Protect Password:="", DrawingObjects:úlse,
Contents:=True, Scenarios:úlse
ActiveSheet.EnableSelection = xlUnlockedCells
End Sub
'------------------------------------------------------

@+ ?

JP
"LSteph" a écrit dans le message de news:
OL$
Bonsoir,
Pour effacer des plages pas besoin de sélectionner
voici exemple à adapter:

Sub clplg()
Dim i As Byte
For i = 5 To 16
With Worksheets(i).[f2:f9]
.ClearContents
.ClearComments
End With
Next
End Sub

'lSteph

Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je
n'y arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de
sélectionner tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de
chacunes des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------







Avatar
LSteph
...bien entendu [f2:f9]
est une exemple de plage, à adapter

Bonne nuit.

lSteph
Avatar
j-pascal
Bonsoir,

C'est (presque) parfait !

En fait, ça marche si la procédure est lancée alors que j'ai activé
(sélectionné) une des 12 feuilles correspondant aux mois à effacer
(sheets(5) à sheets(16)) sinon j'ai le message :
"La méthode de la classe Range a échoué" !

Par ailleurs, j'ai essayé de désélectionner toutes les feuilles avec
l'enregistrement automatique et je vois que cela consiste à sélectionner une
feuille ! J'imagine que c'est donc ce qu'il y a de "mieux" à faire !?

En résumé :
'-----------------------------------------------
Sub sélectMois()
Application.DisplayAlerts = False
Application.EnableEvents = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
'les actions sur tes plages à effacer ...
'------------------------------
Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments
Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments
Range("P9").Select
'------------------------------
Next i
Application.EnableEvents = True
Application.DisplayAlerts = True

Sheets("toto").Select
End Sub
'-----------------------------------------------
Merci, avec la (petite) modif que j'ai faite, tout fonctionne à merveille..
Il ne me reste plus qu'à trouvé un petit bout de code que j'ai utilisé il y
a qq temps pour avoir un Shape qui annonce à l'utilisateur que la macro est
en train de tourner ...

Merci encore,

JP
"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:

Bonsoir,

Je propose :

Sub sélectMois()
Application.DisplayAlerts = False
application.enableeventsúlse
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
'les actions sur tes plages à effacer ...
Next i
application.enableevents=true
Application.DisplayAlerts = True
End Sub

--
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je n'y
arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de sélectionner
tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de
chacunes des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------
--
Cordialement @+
JP





Avatar
Philippe.R
Bonjour,
Essaie comme ceci :
J'ai cru comprendre que certaines lignes ('ajouté % Worksheet_Change !)
étaient là pour gérer le lancement incongru d'événementielles ; si c'est
bien le cas, elles ne sont plus utiles du fait de l'instruction
Application.EnableEvents = False ; si au contraire, tu souhaites leur
exécution, il faut ajouter l'instruction doevents avant la sélection de P9

Sub sélectMois()
Application.DisplayAlerts = False
Application.EnableEvents = False
For i = Sheets.Count To 5 Step -1
Sheets(i).Select
'les actions sur tes plages à effacer ...
'------------------------------
Range("MoisPlageSaisies").ClearContents
Range("MoisInterdit").ClearContents
Range("MoisPlageSaisies").ClearComments
'doevents
Range("P9").Select
'------------------------------
Next i
Application.EnableEvents = True
Application.DisplayAlerts = True

Sheets("toto").Select
End Sub

--
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

C'est (presque) parfait !

En fait, ça marche si la procédure est lancée alors que j'ai activé
(sélectionné) une des 12 feuilles correspondant aux mois à effacer
(sheets(5) à sheets(16)) sinon j'ai le message :
"La méthode de la classe Range a échoué" !

Par ailleurs, j'ai essayé de désélectionner toutes les feuilles avec
l'enregistrement automatique et je vois que cela consiste à sélectionner
une feuille ! J'imagine que c'est donc ce qu'il y a de "mieux" à faire !?

En résumé :
'-----------------------------------------------
Sub sélectMois()
Application.DisplayAlerts = False
Application.EnableEvents = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
'les actions sur tes plages à effacer ...
'------------------------------
Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments
Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments
Range("P9").Select
'------------------------------
Next i
Application.EnableEvents = True
Application.DisplayAlerts = True

Sheets("toto").Select
End Sub
'-----------------------------------------------
Merci, avec la (petite) modif que j'ai faite, tout fonctionne à
merveille.. Il ne me reste plus qu'à trouvé un petit bout de code que j'ai
utilisé il y a qq temps pour avoir un Shape qui annonce à l'utilisateur
que la macro est en train de tourner ...

Merci encore,

JP
"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:

Bonsoir,

Je propose :

Sub sélectMois()
Application.DisplayAlerts = False
application.enableeventsúlse
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
'les actions sur tes plages à effacer ...
Next i
application.enableevents=true
Application.DisplayAlerts = True
End Sub

--
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je n'y
arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de sélectionner
tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de
chacunes des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------
--
Cordialement @+
JP








Avatar
j-pascal
Bonjour,

Je pars bosser ... j'essaie tout ceci ce soir ;-)
Si ta présente proposition permet de "Shunter" le Workbook_Change entre deux
effacements de Feuille(s) alors là c'est vraiment génial !! Je n'osais même
pas imaginer que cela puisse être possible ! Quand j'exécutais mes
procédures avec F8, je voyais défiler tous les "Change !" inexorablement ...
(Je ne sais pas comment il faut dire !!). Par ailleurs cela ne peut
qu'accélérer la procédure ...

A ce soir,

JP

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:

Bonjour,
Essaie comme ceci :
J'ai cru comprendre que certaines lignes ('ajouté % Worksheet_Change !)
étaient là pour gérer le lancement incongru d'événementielles ; si c'est
bien le cas, elles ne sont plus utiles du fait de l'instruction
Application.EnableEvents = False ; si au contraire, tu souhaites leur
exécution, il faut ajouter l'instruction doevents avant la sélection de P9

Sub sélectMois()
Application.DisplayAlerts = False
Application.EnableEvents = False
For i = Sheets.Count To 5 Step -1
Sheets(i).Select
'les actions sur tes plages à effacer ...
'------------------------------
Range("MoisPlageSaisies").ClearContents
Range("MoisInterdit").ClearContents
Range("MoisPlageSaisies").ClearComments
'doevents
Range("P9").Select
'------------------------------
Next i
Application.EnableEvents = True
Application.DisplayAlerts = True

Sheets("toto").Select
End Sub

--
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

C'est (presque) parfait !

En fait, ça marche si la procédure est lancée alors que j'ai activé
(sélectionné) une des 12 feuilles correspondant aux mois à effacer
(sheets(5) à sheets(16)) sinon j'ai le message :
"La méthode de la classe Range a échoué" !

Par ailleurs, j'ai essayé de désélectionner toutes les feuilles avec
l'enregistrement automatique et je vois que cela consiste à sélectionner
une feuille ! J'imagine que c'est donc ce qu'il y a de "mieux" à faire !?

En résumé :
'-----------------------------------------------
Sub sélectMois()
Application.DisplayAlerts = False
Application.EnableEvents = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
'les actions sur tes plages à effacer ...
'------------------------------
Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments
Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments
Range("P9").Select
'------------------------------
Next i
Application.EnableEvents = True
Application.DisplayAlerts = True

Sheets("toto").Select
End Sub
'-----------------------------------------------
Merci, avec la (petite) modif que j'ai faite, tout fonctionne à
merveille.. Il ne me reste plus qu'à trouvé un petit bout de code que
j'ai utilisé il y a qq temps pour avoir un Shape qui annonce à
l'utilisateur que la macro est en train de tourner ...

Merci encore,

JP
"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:

Bonsoir,

Je propose :

Sub sélectMois()
Application.DisplayAlerts = False
application.enableeventsúlse
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
'les actions sur tes plages à effacer ...
Next i
application.enableevents=true
Application.DisplayAlerts = True
End Sub

--
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour,

Je voudrais mettre ce qui suit sous une forme avec boucle, mais je n'y
arrive pas ;-(
Les feuilles vont de sheets(5) à sheets(16)

Merci pour vos lumières.
J'imagine qu'avec une boucle, la procédure sera plus rapide ?

J'étais parti avec qqch comme :

Sub sélectMois()
Application.DisplayAlerts = False
Sheets(16).Select
For i = Sheets.Count To 5 Step -1
Sheets(i).Select False
Next
'mes plages à effacer ...
End Sub

... mais ça bloque au niveau de mes Shapes + Workbook_Change qui fait
référence à un "Button" et il est apparemment impossible de
sélectionner tous les boutons des 12 feuilles en même temps.
Pour cette raison, j'ai pensé à une sélection et à un effacement de
chacunes des feuilles l'une après l'autre ...

Voici le code lourdaingue ;-) :

'------------------------------------------------------
Sub EffacerSaisiesBis()

Application.ScreenUpdating = False

Sheets(5).Select '5 = janvier

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

Sheets(6).Select

Range("MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !
Selection.ClearComments

Range("MoisInterdit, MoisPlageSaisies").Select
Selection.ClearContents
Range("MoisPlageSaisies").Select 'ajouté % Worksheet_Change !

Range("P9").Select

'etc jusqu'à feuille 16

End Sub
'------------------------------------------------------
--
Cordialement @+
JP











Avatar
j-pascal
Bonjour,

"LSteph" a écrit dans le message de news:
%
...bien entendu [f2:f9]
est une exemple de plage, à adapter


J'avais bien vu ;-)

Bon dimanche

Bonne nuit.

lSteph


1 2