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 Sub

A+

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 Sub

J'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 !

Rechercher des sujets similaires à "creation devis base vba"