Selection forme autre feuille

Bonjour, j’ai créé une macro permettant à partir d’une feuille contenant un tableau de mettre au premier ou dernier plan des formes situées dans un autre document.
J’ai fais une boucle du type :
Pour i allant de 1 à 50
Voir si forme 50=vrai (dans la page 2)
alors mettre forme 50 en arrière plan (dans la page 3)

Et je suis obligé de rendre chaque page active 2 puis 3 à chaque selection.
Je voudrais que la page active reste la page 2 tout en changeant les formes de la page 3 (en arrière plan) car le calcul devient long.
Voici mon code :

Sub Bouton4_clic()

Dim y, z
z = 2
For y = 1 To z
Sheets(“Base”).Copy After:=Sheets(ThisWorkbook.Sheets.Count)
ActiveSheet.Name = “S” & 42 + y

Sheets(“Plan”).Select
Dim nom_reseau As String
Dim case_init As Range
Set case_init = ActiveSheet.Range(“C42”)
Dim i As Integer
Dim j As Integer

j = Range(“E1”).Value - 42

For i = 0 To 59

Sheets(“Plan”).Select

case_init.Offset(j, i).Select

nom_reseau = case_init.Offset(0, i).Value

Sheets(“S” & 42 + y).Select

If case_init.Offset(j, i) = 0 Then

ActiveSheet.Shapes(nom_reseau).Select
Selection.ShapeRange.ZOrder msoSendToBack
ActiveSheet.Shapes(nom_reseau & “b”).Select
Selection.ShapeRange.ZOrder msoSendToBack
ActiveSheet.Shapes(nom_reseau & “c”).Select
Selection.ShapeRange.ZOrder msoSendToBack

ElseIf case_init.Offset(j, i) = 1 Then

ActiveSheet.Shapes(nom_reseau).Select
Selection.ShapeRange.ZOrder msoSendToFront
ActiveSheet.Shapes(nom_reseau & “b”).Select
Selection.ShapeRange.ZOrder msoSendToFront
ActiveSheet.Shapes(nom_reseau & “c”).Select
Selection.ShapeRange.ZOrder msoSendToFront

Else
ActiveSheet.Shapes(nom_reseau).Select
Selection.ShapeRange.ZOrder msoSendToFront
ActiveSheet.Shapes(nom_reseau & “b”).Select
Selection.ShapeRange.ZOrder msoSendToBack
ActiveSheet.Shapes(nom_reseau & “c”).Select
Selection.ShapeRange.ZOrder msoSendToBack

End If

Next

Next y

End Sub

Dites moi si je peux eviter ce sheets select à chaque fois qui rallonge énormément mon calcul.

Merci d’avance

Bonjour,

Au pire tu peux déjà désactiver l’affichage lors de ce traitement. :wink:

Essaye Application.ScreenUpdating = False avant le début du traitement et Application.ScreenUpdating = True après la fin de celui-ci.

Tu as essayé sans passer par le Select ?
tu le fais bien pour ta ligne
Sheets(“Base”).Copy After:=Sheets(ThisWorkbook.Sheets.Count)
ça devrait aussi marcher pour les autres.

à tester :


with Sheets("S" & 42 + y)

If case_init.Offset(j, i) = 0 Then
.Shapes(nom_reseau).ShapeRange.ZOrder msoSendToBack
.Shapes(nom_reseau & "b").ShapeRange.ZOrder msoSendToBack
.Shapes(nom_reseau & "c").ShapeRange.ZOrder msoSendToBack

ElseIf etc...

End If

End With

Bonjour merci gcc avec With sheets ça marche beaucoup mieux !!

J’ai une autre petite question à propos d’une chose qui me parait étrange.
Grâce à ma macro je génère une vingtaine de feuilles nommées 2011-S01…2011-S52,2012-S01…2012-S52…
Dans VBA elles s’appellent Feuil4,Feuil5… Les 3 premières étant mes feuilles de calcul et autre
Par contre j’ai une macro permettant de supprimer les feuilles et quand je fais :

For i = 4 To Sheets.Count
Sheets(i).Delete
Next i

Il me supprime les feuilles dans un ordre étrange. Il enlève d’abord toutes les feuilles paires : Feuil4 puis Feuil6, Feuil 8…
Après il me met erreur : L’indice n’appartient pas à la selection".
Savez vous comment résoudre ce problème?

Merci d’avance

A c’est bon faut faire
For i = Sheets.Count To 4 Step -1
Sheets(i).Delete
Merci pour tout !

Ou alors si tu veux vraiment les supprimer dans l’ordre de leur création :

while sheets.count >=4
sheets(4).delete
wend