Problème pour un code d'enregistrement d'une feuille vers une autre
bonsoir le forum,
je reviens vers vous concernant une solution pour un code et avant tout je voulais vous souhaitez une bonne année 2019 à tous le forum et tous mes vœux et avant tout une très bonne santé.
je ne suis que débutant en vba pour que vous puissiez savoir avant tous.
j'ai un code qui me fait un devis, puis le n° du devis et enregistrer dans une feuille "histodevis" avec un Hyperlinks, jusqu’à là tout fonctionne.
puis j'ai un userform qui me fait une facture et le n° de facture et enregistrer dans une autre feuille "histofacture" avec Hyperlinks là aussi sa fonctionne.
certaine donnée de la facture son aussi enregistrer dans une autre feuille "BD_DF" d'une autre feuille via le userform la aussi sa fonctionne.
Quand je clique sur le Hyperlinks du n° du devis, il ouvre le devis puis je fait ma facture avec code BVA là aussi c'est OK.
donc jusqu'à là je peux soit faire une facture directement via le userform , soit je fait un devis puis avec mon devis je crée une facture via un code vba là tout est ok.
mon souci est j'en ai un, c'est que les donnée quand je passe par le devis pour faire ma facture puis je dois enregistrer certaine donnée de la facture dans une autre feuille autre que histofacture, la feuille BD_DF aussi. je bloc pour le code bva
je poste mon code userform qui fonction sans aucun problème et que vous puisiez voir se que je veux faire sans userform
je voulais aussi vous dire que tous sa passe par plusieurs code qui se font appel entre eux.
code userform
Private Sub Cbt_Facture_Click()
Dim nombre_ligne As Integer
Dim ligne As Integer
Dim DL As Integer
' Pour une nouvelle facture
If Me.List_DevFac.ListCount > 0 And Me.Cbx_TypeC > "" And Me.Cbx_TypeSa > "" Then
If MsgBox("Voulez-vous enregistrer le devis ?", vbYesNo) = vbYes Then
nombre_ligne = Me.List_DevFac.ListCount - 1
For ligne = 0 To nombre_ligne
Sheets(36).ListObjects(1).ListRows.Add
DL = Sheets(36).Range("B9999").End(xlUp).Row
Sheets(36).Range("B" & DL) = CInt(Me.Label_NrDF.Caption)
Sheets(36).Range("C" & DL) = Me.Label_Titre_Facture.Caption
Sheets(36).Range("D" & DL) = Me.List_DevFac.List(ligne, 0)
Sheets(36).Range("E" & DL) = Me.List_DevFac.List(ligne, 1)
Sheets(36).Range("F" & DL) = Me.Cbx_TypeC
Next ligne
Sheets(2).Range("I5") = Me.Label_Titre_Facture
Sheets(2).Range("J5") = CInt(Me.Label_NrDF.Caption)
Sheets(2).Range("J51") = CInt(Me.Txt_Remis)
Sheets(2).Range("I4") = Me.Label_Titre
Sheets(2).Range("C22") = Me.Cbx_TypeSa
Call Archiver_Fac
Unload Add_DevFac
End If
Else
MsgBox "Il manque le Client"
End If
End Sub
merci par avance de vous réponse
Bonjour,
Plutôt que de chercher la dernière ligne, il serait préférable à mon sens de travailler avec un objet ListRow (Dim Lig As ListRow).
Et ceci n'est pas très orthodoxe : And Me.Cbx_TypeC > "" And Me.Cbx_TypeSa > "" pour les tests, plutôt utiliser <> :
Private Sub Cbt_Facture_Click()
Dim Lig As ListRow
Dim Ligne As Integer
Dim DL As Integer
' Pour une nouvelle facture
If Me.List_DevFac.ListCount > 0 And Me.Cbx_TypeC <> "" And Me.Cbx_TypeSa <> "" Then
If MsgBox("Voulez-vous enregistrer le devis ?", vbYesNo) = vbYes Then
For Ligne = 0 To Me.List_DevFac.ListCount - 1
Set Lig = Sheets(36).ListObjects(1).ListRows.Add
Lig.Range(, 2).Value = CInt(Me.Label_NrDF.Caption)
Lig.Range(, 3).Value = Me.Label_Titre_Facture.Caption
Lig.Range(, 4).Value = Me.List_DevFac.List(Ligne, 0)
Lig.Range(, 5).Value = Me.List_DevFac.List(Ligne, 1)
Lig.Range(, 6).Value = Me.Cbx_TypeC
Next Ligne
Sheets(2).Range("I5") = Me.Label_Titre_Facture
Sheets(2).Range("J5") = CInt(Me.Label_NrDF.Caption)
Sheets(2).Range("J51") = CInt(Me.Txt_Remis)
Sheets(2).Range("I4") = Me.Label_Titre
Sheets(2).Range("C22") = Me.Cbx_TypeSa
Call Archiver_Fac
Unload Add_DevFac
End If
Else
MsgBox "Il manque le Client"
End If
End Sub
mon souci est j'en ai un, c'est que les donnée quand je passe par le devis pour faire ma facture puis je dois enregistrer certaine donnée de la facture dans une autre feuille autre que histofacture, la feuille BD_DF aussi. je bloc pour le code bva
Là, je dois reconnaître que j'ai un peu de peine à comprendre la demande !
Tu veux quoi au juste ?
bonjour Theze
oui tu as raison concernant : " And Me.Cbx_TypeC > "" And Me.Cbx_TypeSa > "" pour les tests, plutôt utiliser <> :", j'avais oublier
maintenant pour mon soucie je voudrais que ce code qui fonctionne pour un userform, fasse la même chose mais sans passer par un userform mais un bouton macro
mais je pense que j'ai trouvé une solution
Utilises des arguments dans la sub !
mais je pense que j'ai trouvé une solution
bon et bien c'est parfait !
Penses à cocher que le sujet est Résolu