Salut,
J'ai une erreur 13 mismath que je n'arrive pas à solutionner, je joins le code, c'est la ligne suivante (doc1.Heuresreste=doc1.Heuresprevues-doc1.Heuresconso, heuresconso peut être remplacé par total). Les 3 champs sont issus du même document.
C'est toujours le traitement qui consiste à lire un document dans une base1 et faire le total des docs de la base 2, écrire ce total dans la base1, mais aussi calculer les heures restantes.
Je précise sans la soustraction, le code fonctionne.
Merci de de vous solliciter une fois de plus.
Cordialement
Sub Initialize
On Error Goto ErrorHandler
Dim s As New NotesSession
Dim db1 As NotesDatabase, db2 As NotesDatabase
Dim view1 As NotesView, view2 As NotesView
Dim dc2 As NotesDocumentCollection
Dim doc1 As NotesDocument, doc2 As NotesDocument
Dim total As Double, hr As Double
Dim hp As Double,hc As Double,hd As Double
Dim server As String,bases As String
Dim vue1 As String, vue2 As String
Dim cle As String
'Initialisation Serveur
'----------------------------
server ="SERVEUR"
'init bases
'base1 par présence de l'agent dans une base sur le même serveur
'base1 = "iExtensions\IENSales.nsf" = Base Abonnements
'Base2= "iExtensions\IENTime.nsf" = Base Temps
bases = "iExtensions\IENTime.nsf"
'Initialisation Vues
'------------------------
vue1="(Par num contrat)"
vue2="(Intervention Par Abo)"
'init champs recherchées pour comparer les clés
'------------------------------------------------------------------
rcle= "IENSalesDocID"
'Init des champs , champ calcul, champ mise à jour
'-----------------------------------------------------------------------
'Initialisation champ à cumuler
cumchamp= "IENTime"
'Initialisation champ à mettre à jour
Heuresprevues="IENSaleFreightAmt_multi"
Heuresconso="IENSaleTaxAmt_multi"
HeuresReste="IENSaleOtherAmt_multi"
' instancier la vue des docs de la base courante
Set db1 = s.CurrentDatabase
Set view1 = db1.GetView(vue1 )
If view1 Is Nothing Then
Msgbox "Erreur déclaration 1ère Vue base en cours..."
Exit Sub
End If
' instancier la vue des docs detail dans la base 2
Set db2 = New NotesDatabase(server,bases)
If Not db2.IsOpen Then
Msgbox "Erreur déclaration 2ème base à utiliser..."
Exit Sub
End If
Set view2 = db2.GetView(vue2)
If view2 Is Nothing Then
Msgbox "Erreur déclaration 2ème vue 2ème base..."
Exit Sub
End If
' Parcourir les docs Base 1
Set doc1 = view1.GetFirstDocument()
While Not doc1 Is Nothing
' remettre le compteur à 0 quand on change de clé
total = 0
' Rechercher les docs detail associés
cle= doc1.GetItemValue(rcle)(0)
' Parcourir les docs detail pour calculer le total
Set dc2 = view2.GetAllDocumentsByKey( cle, True )
Set doc2 = dc2.GetFirstDocument()
While Not doc2 Is Nothing
' incrémenter le compteur
'Totalisation Heures
hr = doc2.GetItemValue(cumchamp)(0)
total = total + hr
' passer au doc detail suivant
Set doc2 = dc2.GetNextDocument(doc2)
Wend
' mettre à jour le doc Demande Intervention
Set item = doc1.ReplaceItemValue(Heuresconso,total)
' Calcul heures restantes
doc1.Heuresreste=doc1.Heuresprevues-doc1.Heuresconso
'Ecriture document
Call doc1.Save(True,True)
' passer au doc suivant de la base2
Set doc1 = view1.GetNextDocument(doc1)
Wend
Exit Sub
ErrorHandler :
Msgbox "Erreur n° " & Err & " dans 'CalculTotal' à la ligne " & Erl & " : " & Error
Exit Sub
End Sub