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

7 réponses

1 2
Avatar
j-pascal
Re,


"LSteph" a écrit dans le message de news:

re,

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


J'ai ajouté ce qu'il fallait ;-)

JP


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
j-pascal
Re, re,

Je pars bosser ... j'essaie tout ceci ce soir ;-)

PS : tu es parti en congés au bon moment ... tu ne peux pas imaginer à quel
point j'ai "harcelé" tes collègues sur ce forum pendant ce temps là ;-) .
Je suis sûr que certains attendaient impatiemment ton retour pour que tu
reprennes la main ! lol

Bon dimanche,

JP


"LSteph" a écrit dans le message de news:

...
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
Philippe.R
Re,
Oui, l'instruction Application.EnableEvents = False neutralise les
procédures évènementielles.
--
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:%
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
Bonsoir Philippe,

C'est parfait ++++

Merci beaucoup ++

JP

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

Re,
Oui, l'instruction Application.EnableEvents = False neutralise les
procédures évènementielles.
--
Avec plaisir
Philippe.R
"j-pascal" a écrit dans le message de
news:%
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
Bonsoir,

Ca semble très bien fonctionner (aussi ;-) ).

J'ai ceci :
'-------------------------------------
Sub Réinitialisation_Classeur() 'modif du 26/08/07

Dim i As Byte
Application.EnableEvents = False
For i = 5 To 16
With Worksheets(i).Range("MoisInterdit")
.ClearContents
.ClearComments
End With
Next
Application.EnableEvents = True
End Sub
'-----------------------------------

Faut-il que je crée une deuxième boucle pour effacer la plage :
"MoisPlageSaisies" ?
Je crains que cette question ne soit pas très subtile ;-(

Ca semble plus rapide que la proposition de Philippe ; en même temps celle
de Philippe est plus rassurante car je vois "défiler" les onglets en cours
d'effacement. Avec ton code, tout se passe en silence, même si j'exécute la
procédure pas à pas ...

J'ai eu un peu de mal avec la numérotation des Feuilles, car dans la fenêtre
VBAProject, j'ai Feuil1 (Janv 07), Feuil2 (Fév 07), ... , Feuil13 (Toto) et
ton code pour effacer est :
For i = 5 To 16
With Worksheets(i). etc,
... comme si on sélectionnait les Feuilles de 5 à 16 !!!
Surement très évident pour "vous" mais pas du tout pour moi !
Spontanément, j'aurais fait : For i = 1 To 12 puisque mes mois correspondent
aux feuilles 1 à 12 !
D'où mon besoin de voir ce qui se passe avant de risquer d'effacer des
Feuilles autres que "Mois".

@+ ?

JP

"LSteph" a écrit dans le message de news:

...
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
Bonsoir,
pour les feuilles tu indiquais sheets(5) ...
ce qui est aussi pire que worksheets(i).. (
j'ai donc conservé le principe)
Perso je travaille plutôt avec les CodeName mais cela peut dépendre des
cas posés, d'ailleurs attention
On peut parfois avoir :
Feuil1(toto)
Feuil2(Novembre)
Feuil3(Feuil1)
Feuil4(Feuil2)
...
Feuil38(Janvier)

pour le reste tu pourrais définir un nom qui couvre toutes les plages à
modifier, sinon ceci devrait aller:

Sub Réinitialisation_Classeur()
Dim i As Byte
Application.EnableEvents = False
For i = 5 To 16
With Worksheets(i)
.Range("MoisInterdit").ClearContents
.Range("MoisInterdit").ClearComments
.Range("MoisPlageSaisies").ClearContents
.Range("MoisPlageSaisies").ClearComments
End With
Next
Application.EnableEvents = True
End Sub

'Cordialement.

'lSteph


Bonsoir,

Ca semble très bien fonctionner (aussi ;-) ).

J'ai ceci :
'-------------------------------------
Sub Réinitialisation_Classeur() 'modif du 26/08/07

Dim i As Byte
Application.EnableEvents = False
For i = 5 To 16
With Worksheets(i).Range("MoisInterdit")
.ClearContents
.ClearComments
End With
Next
Application.EnableEvents = True
End Sub
'-----------------------------------

Faut-il que je crée une deuxième boucle pour effacer la plage :
"MoisPlageSaisies" ?
Je crains que cette question ne soit pas très subtile ;-(

Ca semble plus rapide que la proposition de Philippe ; en même temps
celle de Philippe est plus rassurante car je vois "défiler" les onglets
en cours d'effacement. Avec ton code, tout se passe en silence, même si
j'exécute la procédure pas à pas ...

J'ai eu un peu de mal avec la numérotation des Feuilles, car dans la
fenêtre VBAProject, j'ai Feuil1 (Janv 07), Feuil2 (Fév 07), ... ,
Feuil13 (Toto) et ton code pour effacer est :
For i = 5 To 16
With Worksheets(i). etc,
... comme si on sélectionnait les Feuilles de 5 à 16 !!!
Surement très évident pour "vous" mais pas du tout pour moi !
Spontanément, j'aurais fait : For i = 1 To 12 puisque mes mois
correspondent aux feuilles 1 à 12 !
D'où mon besoin de voir ce qui se passe avant de risquer d'effacer des
Feuilles autres que "Mois".

@+ ?

JP

"LSteph" a écrit dans le message de news:

...
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
j-pascal
Re,

- Pour la première partie de la réponse : Je n'ai pas tout compris ; il faut
que je regarde ça de plus près ...

- Pour la seconde, c'est parfait ; je ferai un essai avec une plage nommée
comportant des zones multiples. Je pensais qu'il y avait peut-être qqch à
concaténer avec mes deux plages nommées ...

Merci tout fonctionne bien.
C'est tjs intéressant d'avoir 2 solutions pour résoudre un même pb.

Bonne semaine,

JP

PS : [hs] j'ai déplacé ma fenêtre de "propriétés" et je n'arrive plus à
l'ancrer sous la fenêtre de "Projet - VBAProject" !

"LSteph" a écrit dans le message de news:
%
Bonsoir,
pour les feuilles tu indiquais sheets(5) ...
ce qui est aussi pire que worksheets(i).. (
j'ai donc conservé le principe)
Perso je travaille plutôt avec les CodeName mais cela peut dépendre des
cas posés, d'ailleurs attention
On peut parfois avoir :
Feuil1(toto)
Feuil2(Novembre)
Feuil3(Feuil1)
Feuil4(Feuil2)
...
Feuil38(Janvier)

pour le reste tu pourrais définir un nom qui couvre toutes les plages à
modifier, sinon ceci devrait aller:

Sub Réinitialisation_Classeur()
Dim i As Byte
Application.EnableEvents = False
For i = 5 To 16
With Worksheets(i)
.Range("MoisInterdit").ClearContents
.Range("MoisInterdit").ClearComments
.Range("MoisPlageSaisies").ClearContents
.Range("MoisPlageSaisies").ClearComments
End With
Next
Application.EnableEvents = True
End Sub

'Cordialement.

'lSteph


Bonsoir,

Ca semble très bien fonctionner (aussi ;-) ).

J'ai ceci :
'-------------------------------------
Sub Réinitialisation_Classeur() 'modif du 26/08/07

Dim i As Byte
Application.EnableEvents = False
For i = 5 To 16
With Worksheets(i).Range("MoisInterdit")
.ClearContents
.ClearComments
End With
Next
Application.EnableEvents = True
End Sub
'-----------------------------------

Faut-il que je crée une deuxième boucle pour effacer la plage :
"MoisPlageSaisies" ?
Je crains que cette question ne soit pas très subtile ;-(

Ca semble plus rapide que la proposition de Philippe ; en même temps
celle de Philippe est plus rassurante car je vois "défiler" les onglets
en cours d'effacement. Avec ton code, tout se passe en silence, même si
j'exécute la procédure pas à pas ...

J'ai eu un peu de mal avec la numérotation des Feuilles, car dans la
fenêtre VBAProject, j'ai Feuil1 (Janv 07), Feuil2 (Fév 07), ... , Feuil13
(Toto) et ton code pour effacer est :
For i = 5 To 16
With Worksheets(i). etc,
... comme si on sélectionnait les Feuilles de 5 à 16 !!!
Surement très évident pour "vous" mais pas du tout pour moi !
Spontanément, j'aurais fait : For i = 1 To 12 puisque mes mois
correspondent aux feuilles 1 à 12 !
D'où mon besoin de voir ce qui se passe avant de risquer d'effacer des
Feuilles autres que "Mois".

@+ ?

JP

"LSteph" a écrit dans le message de news:

...
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
'------------------------------------------------------














1 2