OVH Cloud OVH Cloud

Comment inserer une feuille apres une autre feuille donnée ?

11 réponses
Avatar
apt
par exemple :

j'ai trois feuille : Janvier - Fevrier - Donn=E9es
je veux inserer le feuille du mois courant qui est Mars apres le
feuille Fevrier.

j'ai utilise le code suivant :

Sub SelectFeuille(Nom$, indx As Integer)
On Error Resume Next
Worksheets(Nom).Select
If Err <> 0 Then Worksheets.Add.Name =3D Nom
Sheets(Nom).Move after:=3DSheets(indx)
End Sub

et quand j'appel le fonction SelectFeuille("Mars", 1) ca me donne
l'erreur suivante :

Erreur de compilation :
Attendu :=3D

mais sans reussite.

Merci.

10 réponses

1 2
Avatar
michdenis
Bonjour Apt,

Modifie cette ligne :
Sheets(Nom).Move after:=Sheets(indx)

Pour

Sheets(Nom).Move after:=Sheets(Sheets(indx))


Salutations!



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


par exemple :

j'ai trois feuille : Janvier - Fevrier - Données
je veux inserer le feuille du mois courant qui est Mars apres le
feuille Fevrier.

j'ai utilise le code suivant :

Sub SelectFeuille(Nom$, indx As Integer)
On Error Resume Next
Worksheets(Nom).Select
If Err <> 0 Then Worksheets.Add.Name = Nom
Sheets(Nom).Move after:=Sheets(indx)
End Sub

et quand j'appel le fonction SelectFeuille("Mars", 1) ca me donne
l'erreur suivante :

Erreur de compilation :
Attendu :
mais sans reussite.

Merci.
Avatar
JB
Bonsoir,

SelectFeuille "mars", 1

ou

Call SelectFeuille("Mars", 1)

Cordialement JB
Avatar
apt
Merci michdenis et JB.

jmais je ne sais toujours pas comment parametrer l'index pour la
feuille nouvellement creer soit place juste dans l'ordre des mois de
l'année.

j'ai dans mon classeur quatre feuilles comme suis :

Données - Janvier - Avril - Mai

apres l'execution, le nouvelle feuille est inserée comme suit :

Call SelectFeuille("Mars", 2)

Mars - Données - Janvier - Avril - Mai

parce que la feuille active est "Données" (puisqu'elle contient le
bouton)

Si j'active la feuille Avril et je demarre mon programme depuis le VBE
la feuille est inserée apres Avril.

Alors comment faire pour avoir cette feuille dans l'ordre des mois de
l'année quelque soit la feuille active ?

Merci
Avatar
michdenis
Bonjour Apt,

Sub test()
SelectFeuille "janvier", 1
End Sub

Sub SelectFeuille(Nom$, ByVal indx As Integer)
Dim Sh As Worksheet
On Error Resume Next
Set Sh = Worksheets(Nom$)
If Err <> 0 Then Worksheets.Add before:=Worksheets(indx)
ActiveSheet.Name = Nom$

End Sub


Salutations!






"apt" a écrit dans le message de news:
Merci michdenis et JB.

jmais je ne sais toujours pas comment parametrer l'index pour la
feuille nouvellement creer soit place juste dans l'ordre des mois de
l'année.

j'ai dans mon classeur quatre feuilles comme suis :

Données - Janvier - Avril - Mai

apres l'execution, le nouvelle feuille est inserée comme suit :

Call SelectFeuille("Mars", 2)

Mars - Données - Janvier - Avril - Mai

parce que la feuille active est "Données" (puisqu'elle contient le
bouton)

Si j'active la feuille Avril et je demarre mon programme depuis le VBE
la feuille est inserée apres Avril.

Alors comment faire pour avoir cette feuille dans l'ordre des mois de
l'année quelque soit la feuille active ?

Merci
Avatar
apt
Ca fonctionne pour le mois de mars.

j'ai fait un autre test

j'ai change la date pour le mois de fevrier.

et j'ai eu les feuille classées comme ceci :

Données - Fevrier - Janvier - Avril - Mai

Ou est le problème ?
Avatar
apt
Je crois, qu'il faut connaitre l'index de la feuille apres laquelle on
doit ajouter la nouvelle feuille.... parce que si on deplace la feuille
de devant l'index changera et doit mis a jour.

il faut avoir un code d'une maniere generale.
Avatar
JB
Bonjour,

http://cjoint.com/?dxjZAfKksI

Insere le mois demandé à sa place:

Sub essai()
InsereMois "Mars"
End Sub

Sub InsereMois(mois)
m = Month("01/" & mois & "/2006")
If Not ExisteFeuille(mois) Then
p = 0
For i = Sheets.Count To 1 Step -1
On Error Resume Next
monglet = Month("01/" & Sheets(i).Name & "/2006")
On Error GoTo 0
If Not IsEmpty(monglet) And m > monglet Then
p = i
Exit For
End If
If Not IsEmpty(monglet) And m < monglet Then
p = i
End If
Next i
If p = 0 Then p = Sheets.Count
Sheets.Add after:=Sheets(p)
ActiveSheet.Name = mois
End If
End Sub

Function ExisteFeuille(f)
ExisteFeuille = False
For i = 1 To Sheets.Count
If f = Sheets(i).Name Then ExisteFeuille = True
Next i
End Function

Cordialement JB
Avatar
apt
Merci JB.

Pour le mois de Mars ca fonctionne mais si je change le mois en cours,
fevrier par exemple, rien n'est inseré !!!!

bon voila le code que j'utilise en attendant d'adapter ton code.

Private Sub CommandButton1_Click()
Dim CM
Dim Mois(1 To 12) As String
Dim i As Integer

' Creation d'un tableau des noms de mois

For i = 1 To 12

Mois(i) = Format(DateSerial(1, i, 1), "mmmm")

Next i

CM = Month(Date)
Select Case CM
Case Is = 1
SelectFeuille Mois(CM), 1
Case Is = 2
SelectFeuille Mois(CM), 2
Case Is = 3
SelectFeuille Mois(CM), 3
Case Is = 4
SelectFeuille Mois(CM), 4
Case Is = 5
SelectFeuille Mois(CM), 5
Case Is = 6
SelectFeuille Mois(CM), 6
Case Is = 7
SelectFeuille Mois(CM), 7
Case Is = 8
SelectFeuille Mois(CM), 8
Case Is = 9
SelectFeuille Mois(CM), 9
Case Is = 10
SelectFeuille Mois(CM), 10
Case Is = 11
SelectFeuille Mois(CM), 11
Case Is = 12
SelectFeuille Mois(CM), 12
End Select
End Sub

Sub SelectFeuille(Nom$, ByVal indx As Integer)
Dim Sh As Worksheet
On Error Resume Next
Set Sh = Worksheets(Nom$)
If Err <> 0 Then Worksheets.Add after:=Worksheets(indx)
ActiveSheet.Name = Nom$
End Sub
Avatar
JB
Bonjour,

Février s'écrit avec un accent!

JB
Avatar
JB
Crée un onglet chaque mois:

http://cjoint.com/?dxoGzuok1V

Sub auto_open()
nfeuille = Format(Date, "mmmm")
If Not ExisteFeuille(nfeuille) Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = nfeuille
End If
End Sub

Function ExisteFeuille(f)
ExisteFeuille = False
For Each s In ActiveWorkbook.Sheets
If s.Name = f Then ExisteFeuille = True
Next s
End Function

JB
1 2