Création d'un devis sur base VBA
Bonsoir Jeannot, le fil
jeanot58 a écrit :Je reviens ici pour une petite question. Ma procédure est trop grande donc impossible de lancer mon programme. En effet, j'ai beaucoup de textes qui se répètent.
par exemple je dois specifier ce code pas mal de fois:
devis.Cells(ligne, 13).Formula = "=sum(" & "M" & ligne + 1 & ":M" & ligne + 3 & ")"
devis.Cells(ligne, 11).Formula = "=sum(" & "K" & ligne + 1 & ":K" & ligne + 3 & ")"
devis.Cells(ligne, 18).Formula = "=sum(" & "R" & ligne + 1 & ":R" & ligne + 3 & ")"
devis.Cells(ligne, 22).Formula = "=sum(" & "V" & ligne + 1 & ":V" & ligne + 3 & ")"
devis.Cells(ligne, 25).Formula = "=sum(" & "Y" & ligne + 1 & ":Y" & ligne + 3 & ")"
ne serait-ce pas possible de créer une variable dont la valeur serait ce code au dessus. Comme ca à chaque fois que j'ai besoin de ces lignes, j'ai juste à taper la variable
Voici un exemple de ce que tu peux utiliser
Public sTab(5) As String, Col(5) As Integer
Sub Test()
Dim Ind As Integer, Ligne As Long
Dim Devis As Worksheet
' Définir les formules du tableau : sTab()
sTab(1) = "=SUM(K#1:K#2)": sTab(2) = "=SUM(M#1:M#2)"
sTab(3) = "=SUM(R#1:R#2)": sTab(4) = "=SUM(V#1:V#2)"
sTab(5) = "=SUM(Y#1:Y#2)"
' Définir les lignes du tableau : Col()
Col(1) = 11: Col(2) = 13: Col(3) = 18: Col(4) = 22: Col(5) = 25
' Pour mon exemple je définis la feuille Devis
Set Devis = Sheets("Devis")
' Et la ligne
Ligne = 1
' Boucle
For Ind = 1 To 5
Devis.Cells(Ligne, Col(Ind)).Formula = Replace(Replace(sTab(Ind), "#1", Ligne + 1), "#2", Ligne + 3)
Next Ind
End SubA+
ok merci ca fonctionne bien !! je vais essayer d'integrer ca un peu partout !
Re,
jeanot58 a écrit :ok merci ca fonctionne bien !! je vais essayer d'integrer ca un peu partout !
Je n'ai pas dû bien lire, si tu dois le faire un peu "partout" mieux vaut passer par des constantes
Dans un module général, tu définis tes variables et constantes
Public sTab() As String, Col() As String
' Définir les plages et colonnes en constantes publiques
Public Const MesPlages As String = "K#1:K#2;M#1:M#2;R#1:R#2;V#1:V#2;Y#1:Y#2"
Public Const MesColonnes = "11;13;18;22;25"Ensuite dans tous les autres modules
Sub Test()
Dim Ind As Integer, Ligne As Long, sForm As String
Dim Devis As Worksheet
' Créer le tableau des plages
sTab = Split(MesPlages, ";")
Col = Split(MesColonnes, ";")
' Pour mon exemple je définis la feuille Devis
Set Devis = Sheets("Devis")
' Et la ligne
Ligne = 1
' Boucle
For Ind = 0 To 4
' définir la formule
sForm = "=SUM(" & sTab(Ind) & ")"
sForm = Replace(Replace(sForm, "#1", Ligne + 1), "#2", Ligne + 3)
Devis.Cells(Ligne, CInt(Col(Ind))).Formula = sForm
Next Ind
End SubJ'espère que ce sera compréhensible pour toi
A+
ok et n'y a t-il pas moyen d'utiliser une fonction qui quand on la cite, reprend plusieurs lignes de codes tout simplement?
merci d'avance
par exemple qquechose comme ca:
dim diesel as string
diesel = Devis.Cells(Ligne, 4) = "diesel"
Devis.Cells(Ligne, 14) = Worksheets("recap").Cells(39, 13).Value
Devis.Cells(Ligne, 17) = Worksheets("recap").Cells(39, 16).Value
Devis.Cells(Ligne, 15) = "l/jour"
Ligne = Ligne + 1
et a chaque fois qu'on ecrit diesel, ca met ce bout de code
Re,
jeanot58 a écrit :ok et n'y a t-il pas moyen d'utiliser une fonction qui quand on la cite, reprend plusieurs lignes de codes tout simplement?
merci d'avance
par exemple qquechose comme ca:
dim diesel as string
diesel = Devis.Cells(Ligne, 4) = "diesel"
Devis.Cells(Ligne, 14) = Worksheets("recap").Cells(39, 13).Value
Devis.Cells(Ligne, 17) = Worksheets("recap").Cells(39, 16).Value
Devis.Cells(Ligne, 15) = "l/jour"
Ligne = Ligne + 1
et a chaque fois qu'on ecrit diesel, ca met ce bout de code
Perso, je suis un peu largué dans ce que tu demandes
Mais, tu peux tout à fait créer une fonction personnalisée
A+
Ok merci je vais y arriver !