Microsoft 365 Afficher l'unité dans ma userform et mon devis et empêcher que mon fichier devis se referme

Arch974

XLDnaute Junior
Bonjour,

J'ai un userform déjà presque programmé dans mon fichier "Detail fini" mais je n'arrive pas à faire afficher l'unité correspondante lorsqu'on choisit une tâche (CIT) dans l'userform et aussi je voudrais que l'unité apparaisse dans mon devis.
J'ai aussi un problème mon fichier devis se referme lorsque je rajoute une donnée comment faire pour qu'elle reste afficher?

Merci d'avance.
 

Pièces jointes

  • Détail Fini.xlsm
    30.3 KB · Affichages: 14
  • Devis.xlsx
    9.9 KB · Affichages: 7
Solution
Ça se produit où quand vous allez en débogage ?
C'est la Sub tb_Qte_Change que je soupçonne le plus.
Alors rectifiez la ainsi :
VB:
Private Sub tb_Qte_Change()
   If IsNumeric(tb_Qte.Text) Then
      tb_Prix.Text = Format(CDbl(tb_Qte.Text) * TVLDon(1, 8), "0,00 €")
   Else
      tb_Prix.Text = "WTF"
      End If
   End Sub
Ça pourrait aussi être dans la CommandButton1_Clickc. Corrigé :
Code:
Private Sub CommandButton1_Click()
   Dim TVLDev(1 To 1, 1 To 5)
   On Error GoTo E
   TVLDev(1, 1) = TVLDon(1, 1)
   TVLDev(1, 2) = CDbl(tb_Qte.Text)
   TVLDev(1, 3) = TVLDon(1, 6)
   TVLDev(1, 5) = CCur(tb_Prix.Text)
   TVLDev(1, 4) = TVLDev(1, 5) / TVLDev(1, 2)
   With WshDevis.[A1].CurrentRegion
      .Rows(.Rows.Count + 1).Value = TVLDev...

Dranreb

XLDnaute Barbatruc
Bonjour.
Essayez comme ça :
VB:
Option Explicit
Private RngDon As Range, WshDevis As Worksheet, LCouDon As Long, TVLDon()
Private Sub UserForm_Initialize()
   Set RngDon = Feuil1.ListObjects(1).DataBodyRange
   cb_CIT.List = RngDon.Columns(1).Value
   With Workbooks.Open(ThisWorkbook.Path & "\devis.xlsx")  'ouvre le fichier
      Set WshDevis = .Worksheets(1)
      End With
   End Sub
Private Sub cb_CIT_Change()
   If cb_CIT.MatchFound Then
      LCouDon = cb_CIT.ListIndex + 1
      TVLDon = RngDon.Rows(LCouDon).Value
   Else
      LCouDon = 0
      ReDim TVLDon(1 To 1, 1 To 8)
      End If
   tb_unite = TVLDon(1, 6)
   End Sub
Private Sub tb_Qte_Change()
   tb_Prix = CDbl(tb_Qte.Text) * TVLDon(1, 8)
   End Sub
Private Sub CommandButton1_Click()
   Dim TVLDev(1 To 1, 1 To 5)
   TVLDev(1, 1) = TVLDon(1, 1)
   TVLDev(1, 2) = CDbl(tb_Qte.Text)
   TVLDev(1, 3) = TVLDon(1, 6)
   TVLDev(1, 5) = CCur(tb_Prix.Text)
   TVLDev(1, 4) = TVLDev(1, 5) / TVLDev(1, 2)
   With WshDevis.[A1].CurrentRegion
      .Rows(.Rows.Count + 1).Value = TVLDev
      End With
   End Sub
Private Sub CommandButton2_Click()
   cb_CIT = ""
   tb_Qte = ""
   tb_Prix = ""
   End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
   WshDevis.Parent.Close SaveChanges:=True
   End Sub
 

Arch974

XLDnaute Junior
Bonjour.
Essayez comme ça :
VB:
Option Explicit
Private RngDon As Range, WshDevis As Worksheet, LCouDon As Long, TVLDon()
Private Sub UserForm_Initialize()
   Set RngDon = Feuil1.ListObjects(1).DataBodyRange
   cb_CIT.List = RngDon.Columns(1).Value
   With Workbooks.Open(ThisWorkbook.Path & "\devis.xlsx")  'ouvre le fichier
      Set WshDevis = .Worksheets(1)
      End With
   End Sub
Private Sub cb_CIT_Change()
   If cb_CIT.MatchFound Then
      LCouDon = cb_CIT.ListIndex + 1
      TVLDon = RngDon.Rows(LCouDon).Value
   Else
      LCouDon = 0
      ReDim TVLDon(1 To 1, 1 To 8)
      End If
   tb_unite = TVLDon(1, 6)
   End Sub
Private Sub tb_Qte_Change()
   tb_Prix = CDbl(tb_Qte.Text) * TVLDon(1, 8)
   End Sub
Private Sub CommandButton1_Click()
   Dim TVLDev(1 To 1, 1 To 5)
   TVLDev(1, 1) = TVLDon(1, 1)
   TVLDev(1, 2) = CDbl(tb_Qte.Text)
   TVLDev(1, 3) = TVLDon(1, 6)
   TVLDev(1, 5) = CCur(tb_Prix.Text)
   TVLDev(1, 4) = TVLDev(1, 5) / TVLDev(1, 2)
   With WshDevis.[A1].CurrentRegion
      .Rows(.Rows.Count + 1).Value = TVLDev
      End With
   End Sub
Private Sub CommandButton2_Click()
   cb_CIT = ""
   tb_Qte = ""
   tb_Prix = ""
   End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
   WshDevis.Parent.Close SaveChanges:=True
   End Sub
ça fonctionne merci bien. Par contre lorsque j'essaie de rentrer une 2ème valeur il m'affiche "Erreur d'exécution Incompatibilité de type" ? et ça ne fonctionne plus.
 

Dranreb

XLDnaute Barbatruc
Ça se produit où quand vous allez en débogage ?
C'est la Sub tb_Qte_Change que je soupçonne le plus.
Alors rectifiez la ainsi :
VB:
Private Sub tb_Qte_Change()
   If IsNumeric(tb_Qte.Text) Then
      tb_Prix.Text = Format(CDbl(tb_Qte.Text) * TVLDon(1, 8), "0,00 €")
   Else
      tb_Prix.Text = "WTF"
      End If
   End Sub
Ça pourrait aussi être dans la CommandButton1_Clickc. Corrigé :
Code:
Private Sub CommandButton1_Click()
   Dim TVLDev(1 To 1, 1 To 5)
   On Error GoTo E
   TVLDev(1, 1) = TVLDon(1, 1)
   TVLDev(1, 2) = CDbl(tb_Qte.Text)
   TVLDev(1, 3) = TVLDon(1, 6)
   TVLDev(1, 5) = CCur(tb_Prix.Text)
   TVLDev(1, 4) = TVLDev(1, 5) / TVLDev(1, 2)
   With WshDevis.[A1].CurrentRegion
      .Rows(.Rows.Count + 1).Value = TVLDev
      End With
   Exit Sub
E: MsgBox Err.Description, vbCritical, Me.Caption
   End Sub
 
Dernière édition:

Arch974

XLDnaute Junior
Ça se produit où quand vous allez en débogage ?
C'est la Sub tb_Qte_Change que je soupçonne le plus.
Alors rectifiez la ainsi :
VB:
Private Sub tb_Qte_Change()
   If IsNumeric(tb_Qte.Text) Then
      tb_Prix.Text = Format(CDbl(tb_Qte.Text) * TVLDon(1, 8), "0,00 €")
   Else
      tb_Prix.Text = "WTF"
      End If
   End Sub
Ça pourrait aussi être dans la CommandButton1_Clickc. Corrigé :
Code:
Private Sub CommandButton1_Click()
   Dim TVLDev(1 To 1, 1 To 5)
   On Error GoTo E
   TVLDev(1, 1) = TVLDon(1, 1)
   TVLDev(1, 2) = CDbl(tb_Qte.Text)
   TVLDev(1, 3) = TVLDon(1, 6)
   TVLDev(1, 5) = CCur(tb_Prix.Text)
   TVLDev(1, 4) = TVLDev(1, 5) / TVLDev(1, 2)
   With WshDevis.[A1].CurrentRegion
      .Rows(.Rows.Count + 1).Value = TVLDev
      End With
   Exit Sub
E: MsgBox Err.Description, vbCritical, Me.Caption
   End Sub
C'est la Sub tb_Qte_Change qui posait problème, votre correction a bien marché ça ne beug plus !! Merci infiniment :)
 

Arch974

XLDnaute Junior
Ça se produit où quand vous allez en débogage ?
C'est la Sub tb_Qte_Change que je soupçonne le plus.
Alors rectifiez la ainsi :
VB:
Private Sub tb_Qte_Change()
   If IsNumeric(tb_Qte.Text) Then
      tb_Prix.Text = Format(CDbl(tb_Qte.Text) * TVLDon(1, 8), "0,00 €")
   Else
      tb_Prix.Text = "WTF"
      End If
   End Sub
Ça pourrait aussi être dans la CommandButton1_Clickc. Corrigé :
Code:
Private Sub CommandButton1_Click()
   Dim TVLDev(1 To 1, 1 To 5)
   On Error GoTo E
   TVLDev(1, 1) = TVLDon(1, 1)
   TVLDev(1, 2) = CDbl(tb_Qte.Text)
   TVLDev(1, 3) = TVLDon(1, 6)
   TVLDev(1, 5) = CCur(tb_Prix.Text)
   TVLDev(1, 4) = TVLDev(1, 5) / TVLDev(1, 2)
   With WshDevis.[A1].CurrentRegion
      .Rows(.Rows.Count + 1).Value = TVLDev
      End With
   Exit Sub
E: MsgBox Err.Description, vbCritical, Me.Caption
   End Sub
Par contre parfois dans le devis le symbole euro est affiché avant le nombre alors que dans l'userform elle est bien affiché après le nombre
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 974
Membres
103 076
dernier inscrit
LoneWolf90