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 07/03/2010, 20h47   #1
Membre à l'essai
 
Jacky
Inscription : octobre 2008
Messages : 147
Détails du profil
Informations personnelles :
Nom : Jacky
Âge : 43

Informations forums :
Inscription : octobre 2008
Messages : 147
Points : 23
Points : 23
Par défaut Catégorie à intégrer

Bonsoir le forum,

Voici un exemple de code qui me sert à faire un tirage spéciale.
Bien sur, il y a plusieurs autre codes.Mais tous ces codes me servent pour une seule catégories.(MiniFilles)
Ma question est: comment dire à ces codes qu'il faut qu'ils servent aussi pour d'autres catégories(super mini F et G etc..) en sachant qu'il faudra surement que je change un peu les codes car par ex le tirage des séries qui se fait en feuilles séries, commencent en A9 et se finit en AW14 pour les mini Filles et il faudra que je les fasses commencer en A22 et Finir en AW 27

Merci
jacky

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
Public Sub subComposerSeries()
Dim vListe As Variant, v As Variant, tb() As Variant, tbSeries() As Variant
Dim NbSeries As Integer, EffSeries As Integer, sErr As String, nbInscrits As Integer
Dim i As Integer, iE As Integer, j As Integer
Dim rSeries As Excel.Range
Const jNom As Integer = 1
Const jClub As Integer = 3
Const jTS As Integer = 5
 
'charger les données
NbSeries = [nmNombreSeries]
EffSeries = [nmEffectifSeries]
 
If (NbSeries * EffSeries) = 0 Then sErr = "Il faut définir le nombre de séries et l'effectif max.": GoTo etiSortieErreur
If EffSeries > 6 Then sErr = "L'effectif max d'une série est de 6.": GoTo etiSortieErreur
 
v = Application.ThisWorkbook.Names("nmInscrits").RefersToRange.Value
For i = LBound(v, 1) To UBound(v, 1)
    If IsEmpty(v(i, jNom)) Then Exit For
Next i
nbInscrits = i - 1
 
If nbInscrits <= NbSeries Then sErr = "Pas assez d'inscrits pour composer des séries.": GoTo etiSortieErreur
If nbInscrits > (NbSeries * EffSeries) Then sErr = "Pas assez de places dans les séries.": GoTo etiSortieErreur
 
ReDim tb(1 To nbInscrits, 1 To 3)
vListe = tb
For i = 1 To nbInscrits
    vListe(i, 1) = v(i, jNom)
    vListe(i, 2) = v(i, jClub)
    vListe(i, 3) = v(i, jTS)
Next i
 
ReDim tbSeries(1 To EffSeries + 1, 1 To NbSeries)
'appel de la procédure de tirage
Call subTirerSeries(vListe, NbSeries, EffSeries, tbSeries)
 
'Présenter les séries
Set rSeries = Application.ThisWorkbook.Names("nmSerie1").RefersToRange
rSeries.Worksheet.Columns("F:HA").Delete
rSeries.Offset(3, 0).Resize(6, 1).ClearContents
 
For i = 1 To NbSeries
    If i > 1 Then
        rSeries.Copy rSeries.Offset(0, 5)
        Set rSeries = rSeries.Offset(0, 5)
        For j = 1 To rSeries.Columns.Count
            rSeries.Columns(j).ColumnWidth = rSeries.Columns(j).Offset(0, -5).ColumnWidth
        Next j
    End If
    rSeries(1, 1).Value = "Série " & i
    For iE = 2 To EffSeries + 1
        rSeries(iE + 2, 1) = IIf(IsNull(tbSeries(iE, i)), "", tbSeries(iE, i))
    Next iE
Next i
 
etiSortie:
    Erase tbSeries
    Erase tb
    Exit Sub
 
etiSortieErreur:
    MsgBox sErr
    GoTo etiSortie
 
End Sub
jacfld49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2010, 10h55   #2
Membre Expert
 
Avatar de aalex_38
 
Inscription : septembre 2007
Messages : 1 570
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 1 570
Points : 1 709
Points : 1 709
Pour utiliser tes codes en plusieurs endroits tu peux utiliser tes paramètres et appeler des sub ou des fonctions (si tu veux un retour).

Dans une macro principale tu détermines les séries :

Code :
1
2
3
4
5
6
7
8
9
10
Sub Principal()
' Tu détermine le nom de la série (a toi de voir comment)
Dim NomSerie as string
Select case cells(1,1)
Case "G" : Nomserie = "G" .... ' Exemple a adapter
Case "F" : Nomserie = "F" .... ' Exemple a adapter
Case Else : exit sub
end select
subComposerSeries Nomserie ' appel au sub avec paramètre
end sub
Code :
1
2
3
4
Sub subComposerSeries(byval MaSerie as string)
If maserie = 'G' then ' ici tu gère les particularités.
'.......
End sub
__________________
aalex_38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2010, 19h34   #3
Membre à l'essai
 
Jacky
Inscription : octobre 2008
Messages : 147
Détails du profil
Informations personnelles :
Nom : Jacky
Âge : 43

Informations forums :
Inscription : octobre 2008
Messages : 147
Points : 23
Points : 23
bonsoir le forum,aalex_38,

un peu complexe pour moi, peux tu STP m'expliquer ou un exemple, si par ex , j'appelle ma série miniFille et que je la place en feuille Série en A9:AW14 .
merci
jacky
jacfld49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2010, 10h35   #4
Membre Expert
 
Avatar de aalex_38
 
Inscription : septembre 2007
Messages : 1 570
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 1 570
Points : 1 709
Points : 1 709
Bonjour,


Ma remarque n'était pas totalement pertinente car je n'avais pas vu que tu utilisais des plages nommées.

Quoiqu'il en soit le principe reste le même, il faut que tu détermine dans ton code ce qui est variable et ce qui ne l'est pas.

Tout ce qui est variable tu dois le determiner selon les conditions choisies dans une procédure principale. Ensuite tu appelles une procédure avec ces variables en paramètre.

Un exemple basique :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Principal
dim i as integer, maplage as string
For i = 1 To Cells(65536, 1).End(xlUp).Row ' On parcours une liste en colonne A
If cells(i,1) =  "maserie" then :   Maplage = "A9:AW14" 
If cells(i,1) =  "autrenom" then :  Maplage = "A15:AW21" 
' ...
SousProc maplage ' appel a un procedure
next i
End sub
 
Sub sousproc(byval monaddresse as string)
msgbox range(monaddresse).address
end sub
__________________
aalex_38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2010, 22h43   #5
Membre à l'essai
 
Jacky
Inscription : octobre 2008
Messages : 147
Détails du profil
Informations personnelles :
Nom : Jacky
Âge : 43

Informations forums :
Inscription : octobre 2008
Messages : 147
Points : 23
Points : 23
re,

le problème, c'est que j'ai mes données pour minifilles en colonne A et par ex por une autre catégorie(minigarcons en colonne G) , donc il faut que pour chaque catégorie, j'aille chercher mes données au bon endroit.
merci
jackk
jacfld49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 04h35.


 
 
 
 
Partenaires

Hébergement Web