Incrementer le nom d'une procedure en VBA [Résolu]

Signaler
Messages postés
7
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
22 avril 2008
-
Messages postés
7
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
22 avril 2008
-
Bonjour, je suis débutant en progarmmation VBA et je cherche une façon d'optimiser mon programme.En l'etat actuel, il fonctionne tres bien mais ca m'embete d'avoir des modules de 3000 lignes pour avoir la meme chose en copier/coller.

Ma question est:

Est il possible de faire appel à des procedures qui portent le meme nom mais pas le meme numero en les incrementant?

en exemple ca donne:

en procedure , joueur1,joueur2,joueur3...joueur60

ce que je voudrais c'est quelque chose du genre

si AB = I alors

    joueurI

fin si

merci de me repondre

14 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
a confirmer, mais ce genre de choses:

Sub Journee(Byval nIndex as integer)
Dim oSheetFrm as WorkSheet
Dim oSheetDst as WorkSheet
If nIndex = 1 Then
Set oSheetFrm = Sheets("1ere journée")
Else
Set oSheetFrm = Sheets( nIndex & "e journée")
End If
Set oSheetDst = Sheets("Vierge")
oSheetFrm.Range("A2:C11").Copy oSheetDst.Range("A3")
oSheetDst.Range("A1").Value = oSheetDst.Range("BB14").value

oSheetFrm.Range("A13:L515").Copy
oSheetDst.Range("A14").PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
End Sub



permettent d'appeler :

Journee 1
Journee 2
Journee 3
....

et donc:

Journee range("cellule journée").value
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
CallByName
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Salut,
Précisons tout de même qu'avec CallByName, les procédures à appeler devront être publique ET dans un  module de CLASSE

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
22 avril 2008

Je vous remercie pour votre aide mais je vous ai dis que j'étais débutant ( pratique du VBA depuis 2 semaines seulement) donc si vous pouviez me donner des exemples car CallByName ne me parle pas du tout.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
ne délaisse pas google pour autant ...

http://support.microsoft.com/kb/186143/fr
Messages postés
7
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
22 avril 2008

je ne delaisse pas google car j'ai cherché des exemple sur le net, notament le lien que tu propose et je pense que ca ne correspond pas à ma question. Alors soit je suis archi nul car je debute et je ne vois pas comment utiliser cette fonction, soit j'ai mal exprimé ma demande.

Donc pour etre plus clair, voici ce que je veux faire.
Je fais un programme de pronostic sportif sur la L1 de foot sous excel 2007, pour le moment mon code en VBA n'est composé que de IF, THEN, END IF avec un total de 38 journées à pronostiquer et un maximum de 60 joueurs.

Ce que je fais c'est que je reccupere les valeurs de deux cellules sous excel (joueur et journée) et donc quand je j'arrive dans ma fonction ca donne un code du genre:

Sub Selection()
    if range("cellule journée").value = 1 then
            Journee1     
                if range("cellule joueur").value = 1 then
                   Joueur1
                else
                if range("cellule joueur").value = 2 then
                   Joueur2
               else
                ...
                if range("cellule joueur").value = 60 then
                   Joueur60
                else
                end if (X60)
    if range("cellule journée").value = 2 then
             Journee2
                if range("cellule joueur").value = 1 then

                   Joueur1

                else

                if range("cellule joueur").value = 2 then

                   Joueur2

               else

                ...

                if range("cellule joueur").value = 60 then

                   Joueur60

                else

                end if (X60)
    ...
    if range("cellule journée").value = 38 then
   ...
    end if (X38)
   
End Sub

Voila ce code qui est tres lourd et qui limite mon programme à 60 joueurs

et ce que j'aimerai faire c'est :

Sub Selection()
A = range("cellule journée").value
B = range("cellule joueur").value

 
            JourneeA    

              JoueurB

End Sub
Et derriere si A 12 et B 24 que cette procedure fasse appel aux procedure Journee12 et Joueur24.

J'espere avoir était plus precis dans ma demande et j'espere trouver une reponse grace à vous.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
CallByName oJoueurs, "Journee" & range("cellule journée").value, VbMethod
CallByName oJoueurs, "Joueur" & range("cellule joueur").value, VbMethod

possible aussi, surement d'utiliser des parametres a une fonction Journée et a une fonction Joueur,
en effet, je pense que le code de ces fonctions (Journee1, Journee2, Journee3, ..... et Joueur1, Joueur2, ...) sont sensiblement identiques.

dernière chose, ne valide pas toutes les réponses que l'on te donne. ce faisant, tu marque ton probleme comme résolu, bien peu de monde vont s'interesser a un probleme résolu...
Messages postés
7
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
22 avril 2008

Merci du conseil, c'est la premiere fois que je demande de l'aide sur le site.
Je vais essayer ce code.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
attention, come te l'a dit jrivet, il te faut placer Journee1.... et Joueur1... en Public, dans un module de classe.
ici, j'ai considéré que tu avait oJoueurs, instance de cette fameuse classe.

donne moi le code de Journee1, Journee5, Joueur1 et Joueur7, s'il te plait...
Messages postés
7
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
22 avril 2008

Je viens d'essayer mais ca ne marche pas, j'ai un message objet requis.

a quoi correspond le oJoueurs, est ce que je dois le declarer quelque part et à quoi il sert?
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
47
Re,
a quoi correspond le oJoueurs:
[auteur/RENFIELD/2359.aspx Renfield] à dit : "dans un module de classe.

ici, j'ai considéré que tu avait oJoueurs, instance de cette fameuse classe"

IL TE FAUT LA CREER

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
22 avril 2008

voici les codes mais au depart on a une selection apartir de menu deroulant
Sub Journee_QuandChangement()
'
' Journee_QuandChangement Macro
'
    If Range("BB13").Value = 1 Then
    Journee_1
    Zonecombinée1_QuandChangement
    Range("M8").Select
   
       
    Else

    If Range("BB13").Value = 2 Then
    Journee_2
    Zonecombinée1_QuandChangement
    Range("M8").Select
       
    Else
...

Sub Zonecombinée1_QuandChangement()

' Selection joueur 1

        If Range("s7").Value = 1 Then
       
            Select_Joueur1
           
        Else
      
        ' Selection du 2eme joueur
   
        If Range("s7").Value = 2 Then
       
            Select_Joueur2
           
        Else
   
' Selection du 3eme joueur

        If Range("s7").Value = 3 Then
   
            Select_Joueur3
           
        Else
...

Sub Journee_1()
   
    Sheets("1ere journée").Select
    Range("A2:C11").Select
    Selection.Copy
    Sheets("Vierge").Select
    Range("A3").Select
    ActiveSheet.Paste
    Range("BB14").Select
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("1ere journée").Select
    Range("A13:L515").Select
    Selection.Copy
    Sheets("Vierge").Select
    Range("A14").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
   

End Sub

Sub Journee_5()
    Sheets("5e journée").Select
    Range("A2:C11").Select
    Selection.Copy
    Sheets("Vierge").Select
    Range("A3").Select
    ActiveSheet.Paste
    Range("M8").Select
    Range("BB18").Select
    Selection.Copy
    Range("A1").Select
    ActiveSheet.Paste
    Sheets("5e journée").Select
    Range("A13:L515").Select
    Selection.Copy
    Sheets("Vierge").Select
    Range("A14").Select
    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
        xlNone, SkipBlanks:=False, Transpose:=False
End Sub

Sub Select_Joueur1()
' Selection de la 1ere journée

        If Range("bb13").Value = 1 Then
            Sheets("1ere journée").Select
            Joueur1
            Selection.Copy
            Sheets("Vierge").Select
            Range("K3").Select
            ActiveSheet.Paste
            Range("K3").Select
        Else
' Selection de la 2eme journée

        If Range("bb13").Value = 2 Then
            Sheets("2e journée").Select
            Joueur1
            Selection.Copy
            Sheets("Vierge").Select
            Range("K3").Select
            ActiveSheet.Paste
            Range("K3").Select
        Else

' Selection de la 3eme journée
           
        If Range("bb13").Value = 3 Then
            Sheets("3e journée").Select
            Joueur1
            Selection.Copy
            Sheets("Vierge").Select
            Range("K3").Select
            ActiveSheet.Paste
            Range("K3").Select
        Else
       
' Selection de la 4eme journée
           
        If Range("bb13").Value = 4 Then
            Sheets("4e journée").Select
            Joueur1
            Selection.Copy
            Sheets("Vierge").Select
            Range("K3").Select
            ActiveSheet.Paste
            Range("K3").Select
        Else
...
jusqu'à 38eme journée

Sub Select_Joueur7()
        ' Selection de la 1ere journée

        If Range("bb13").Value = 1 Then
            Sheets("1ere journée").Select
            Joueur7
            Selection.Copy
            Sheets("Vierge").Select
           
           
            Range("K3").Select
            ActiveSheet.Paste
            Range("K3").Select
        Else
' Selection de la 2eme journée

        If Range("bb13").Value = 2 Then
            Sheets("2e journée").Select
            Joueur7
            Selection.Copy
            Sheets("Vierge").Select
           
           
            Range("K3").Select
            ActiveSheet.Paste
            Range("K3").Select
        Else

' Selection de la 3eme journée
           
        If Range("bb13").Value = 3 Then
            Sheets("3e journée").Select
            Joueur7
            Selection.Copy
            Sheets("Vierge").Select
           
           
            Range("K3").Select
            ActiveSheet.Paste
            Range("K3").Select
        Else
       
' Selection de la 4eme journée

... jusqu'à 38eme journée

les Joueur1 et Joueur7 font appel
Sub Joueur1()
    Range("B16:C25").Select
End Sub

Sub Joueur7()
    Range("B100:C109").Select
End Sub

voila je ne sais pas si tu vas y comprendre quelque chose

bon courage pour m'aider
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
62
pour le reste, faut que tu factorise un peu plus ton code... bien trop de répétitions
Messages postés
7
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
22 avril 2008

Merci, ca fonctionne. Il me reste plus qu'à faire la même chose pour le reste du programme