derfixien
Messages postés7Date d'inscriptionvendredi 7 mars 2008StatutMembreDernière intervention22 avril 2008
-
21 avril 2008 à 22:56
derfixien
Messages postés7Date d'inscriptionvendredi 7 mars 2008StatutMembreDernière intervention22 avril 2008
-
22 avril 2008 à 11:47
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?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 22 avril 2008 à 11:20
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
derfixien
Messages postés7Date d'inscriptionvendredi 7 mars 2008StatutMembreDernière intervention22 avril 2008 22 avril 2008 à 09:41
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
derfixien
Messages postés7Date d'inscriptionvendredi 7 mars 2008StatutMembreDernière intervention22 avril 2008 22 avril 2008 à 10:30
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.
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...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 22 avril 2008 à 10:53
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...
derfixien
Messages postés7Date d'inscriptionvendredi 7 mars 2008StatutMembreDernière intervention22 avril 2008 22 avril 2008 à 11:07
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
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