Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2012, 16h29   #1
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut Définir une feuille de destination en fonction d'une date

Bonjour au forum,

Je tente d'enregistrer un filtre dans une feuille variable.
Le nom des feuilles est les mois de l'année, et les paramètres du filtre aussi

j' ai un message d'erreur du type l'indice n'appartient pas à la selection ici :

Code :
Set wbm = wb.Worksheets(xf)
je cherche à récupérer le nom du mois (Février par exemple) en français pour définir le nom de la feuille (wbm) de destination de la copie du filtre.
la valeur de l' inputbox étant saisie en chiffre du genre 02/2012 pour le mois de Février.



voici le début du code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub filtre_principal()
 
Set wb = ThisWorkbook
Set wbs = wb.Worksheets("CC2012")
 
'-------------Définir la page du mois pour la copie du filtre
 
smois = InputBox("Saisissez le mois", "Choix du mois", "")
mois = CDate(smois)
mois = Format(smois, "mm/yyyy")
 
xx = CStr(mois)
xx = Format(mois, "mm")
 
Select Case mois
  Case Month(mois) = 1
 xf = "Janvier"
  Case Month(mois) = 2
 xf = "Février"
  Case xx = "03"
 xf = "Mars"
  Case xx = "04"
 xf = "Avril"
  Case xx = "05"
 xf = "Mai"
End Select
 
 
Set wbm = wb.Worksheets(xf)
les variables déclarées :
Code :
1
2
3
4
5
Option Explicit
Public wb As Workbook, wbs As Worksheet, wbm As Worksheet
Public Plagefiltre As Range, PlageBase As Range, utile As Range, Zone As Range
Public Message As String, lastl As Integer, smois As String, mois As Date
Public cmptl As Long, xx As String, xf As String
Je mets le code complet au cas où :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Sub filtre_principal()
 
Set wb = ThisWorkbook
Set wbs = wb.Worksheets("CC2012")
 
'-------------Définir la page du mois pour la copie du filtre
 
smois = InputBox("Saisissez le mois", "Choix du mois", "")
mois = CDate(smois)
mois = Format(smois, "mm/yyyy")
 
xx = CStr(mois)
xx = Format(mois, "mm")
 
Select Case mois
  Case Month(mois) = 1
 xf = "Janvier"
  Case Month(mois) = 2
 xf = "Février"
  Case xx = "03"
 xf = "Mars"
  Case xx = "04"
 xf = "Avril"
  Case xx = "05"
 xf = "Mai"
End Select
 
 
Set wbm = wb.Worksheets(xf)
 
wbs.Activate
With wbs
    lastl = ActiveSheet.UsedRange.Rows.Count
    Set PlageBase = .Range(.Cells(1, 1), .Cells(1, 1)).End(xlDown).Resize(, 39)
    Set utile = .Range(.Cells(4, 1), .Cells(lastl, 39))
End With
' ------------effectuer le Tri principal
 
Call Tri_principal
 
'------------enlève les éventuels anciens filtres
With PlageBase
If wbs.FilterMode = True Then
.AutoFilter
End If
'------------effectue le filtre
.AutoFilter Field:=5, Criteria1:=Array("1", "2", "3", "="), Operator:=xlFilterValues
.AutoFilter Field:=6, Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(1, mois)
End With
 
'-----------Affiche les colonnes groupées des feuilles
 
wbs.Columns.Hidden = False
wbm.Columns.Hidden = False
 
'-----------Copie les lignes visibles du filtre
Set Plagefiltre = utile.SpecialCells(xlCellTypeVisible)
Plagefiltre.Copy wbm.Range("A5")
 
With wbs
    .Columns("B:D").Hidden = True
    .Columns("L:N").Hidden = True
    .Columns("P:R").Hidden = True
    .Columns("Z:AJ").Hidden = True
    .Columns("AL:AN").Hidden = True
End With
With wbm
    .Columns("B:D").Hidden = True
    .Columns("L:N").Hidden = True
    .Columns("P:R").Hidden = True
    .Columns("Z:AJ").Hidden = True
    .Columns("AL:AN").Hidden = True
End With
merci d'avance pour votre aide
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 18h54   #2
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 313
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 313
Points : 2 679
Points : 2 679
Bonsoir,
Tu mélanges beaucoup de choses dans ton code, c'est très confus.
Même dans ton Select Case.
Je te conseille vivement la lecture d'un bon tutoriel de programmation en VBA avant de commencer.
Tu trouveras tout cela ici
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2012, 19h41   #3
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Bonsoir corona,

Je m'excuse je n'ai pas fait assez attention j'ai posté un mix de deux brouillons

le code que j'avais prévu de poster est le suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub filtre_principal()
 
Set wb = ThisWorkbook
Set wbs = wb.Worksheets("CC2012")
 
'-------------Définir la page du mois pour la copie du filtre
 
smois = InputBox("Saisissez le mois", "Choix du mois", "")
mois = CDate(smois)
mois = Format(smois, "mm/yyyy")
 
xx = CStr(mois)
xx = Format(mois, "mm")
 
Select Case xx
  Case xx = "01"
 xf = "Janvier"
  Case xx = "02"
 xf = "Février"
  Case xx = "03"
 xf = "Mars"
  Case xx = "04"
 xf = "Avril"
  Case xx = "05"
 xf = "Mai"
End Select
 
 
Set wbm = wb.Worksheets(xf)
voilà je pensais pouvoir faire en sorte que si le mois est Février soit "02" alors le filtre se copie feuille "Février".

Le code marche quand je xf est une constante exemple :
Code :
Set wbm = wb.Worksheets("Février")

Les variables :
Code :
1
2
3
4
5
Option Explicit
Public wb As Workbook, wbs As Worksheet, wbm As Worksheet
Public Plagefiltre As Range, PlageBase As Range, utile As Range, Zone As Range
Public Message As String, lastl As Integer, smois As String, mois As Date
Public cmptl As Long, xx As String, xf As String
code complet :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Sub filtre_principal()
 
Set wb = ThisWorkbook
Set wbs = wb.Worksheets("CC2012")
 
'-------------Définir la page du mois pour la copie du filtre
 
smois = InputBox("Saisissez le mois", "Choix du mois", "")
mois = CDate(smois)
mois = Format(smois, "mm/yyyy")
 
xx = CStr(mois)
xx = Format(mois, "mm")
 
Select Case xx
  Case xx = "01"
 xf = "Janvier"
  Case xx = "02"
 xf = "Février"
  Case xx = "03"
 xf = "Mars"
  Case xx = "04"
 xf = "Avril"
  Case xx = "05"
 xf = "Mai"
End Select
 
 
Set wbm = wb.Worksheets(xf)
 
wbs.Activate
With wbs
    lastl = ActiveSheet.UsedRange.Rows.Count
    Set PlageBase = .Range(.Cells(1, 1), .Cells(1, 1)).End(xlDown).Resize(, 39)
    Set utile = .Range(.Cells(4, 1), .Cells(lastl, 39))
End With
' ------------effectuer le Tri principal
 
Call Tri_principal
 
'------------enlève les éventuels anciens filtres
With PlageBase
If wbs.FilterMode = True Then
.AutoFilter
End If
'------------effectue le filtre
.AutoFilter Field:=5, Criteria1:=Array("1", "2", "3", "="), Operator:=xlFilterValues
.AutoFilter Field:=6, Criteria1:=Array("="), Operator:=xlFilterValues, Criteria2:=Array(1, mois)
End With
 
'-----------Affiche les colonnes groupées des feuilles
 
wbs.Columns.Hidden = False
wbm.Columns.Hidden = False
 
'-----------Copie les lignes visibles du filtre
Set Plagefiltre = utile.SpecialCells(xlCellTypeVisible)
Plagefiltre.Copy wbm.Range("A5")
 
With wbs
    .Columns("B:D").Hidden = True
    .Columns("L:N").Hidden = True
    .Columns("P:R").Hidden = True
    .Columns("Z:AJ").Hidden = True
    .Columns("AL:AN").Hidden = True
End With
With wbm
    .Columns("B:D").Hidden = True
    .Columns("L:N").Hidden = True
    .Columns("P:R").Hidden = True
    .Columns("Z:AJ").Hidden = True
    .Columns("AL:AN").Hidden = True
End With
End Sub
Pour les tutos j'y jette un coup d'oeil le plus souvent possible mais c'est pas toujours évident de s'y retrouver et d'adapter mais c'est certain que je ne prends pas assez de temps (je n'en ai pas beaucoup non plus... )
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 20h44   #4
Expert Confirmé
 
Philippe Tulliez
Développeur et formateur VBA, Excel et Word.
Inscription : janvier 2010
Messages : 1 313
Détails du profil
Informations personnelles :
Nom : Philippe Tulliez
Localisation : Belgique

Informations professionnelles :
Activité : Développeur et formateur VBA, Excel et Word.

Informations forums :
Inscription : janvier 2010
Messages : 1 313
Points : 2 679
Points : 2 679
Bonsoir,
Voici la bonne syntaxe pour le Select Case.
Si tu utilisais le Debug, tu aurais pu trouver tout seul que ta variable xx n'était pas alimentée.
Il serait aussi utile de donner un nom un peut plus explicite à tes variables. Cela aide pour la maintenance des programmes.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Select Case xx
  Case "01"
 xf = "Janvier"
  Case "02"
 xf = "Février"
  Case "03"
 xf = "Mars"
  Case "04"
 xf = "Avril"
  Case "05"
 xf = "Mai"
End Select
[EDIT]
Dans ton cas, tu pourrais aussi utiliser la fonction MonthName
Exemple : monthname(2) renverra Février
__________________
Philippe Tulliez
http://philippe.tulliez.be
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)

Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
corona est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/02/2012, 08h11   #5
Nouveau Membre du Club
 
Inscription : octobre 2011
Messages : 106
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 106
Points : 38
Points : 38
Par défaut merci

Bonjour corona,

merci pour ton aide,

Ps : j'avais vu que les "variables n'étaient pas alimentées" le problème c'est que je ne comprennais pas pourquoi.
tompom3108 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h37.


 
 
 
 
Partenaires

Hébergement Web