Bonjour,
Bonjour
@Phil69970,
Dans le fichier joint une solution qui crée ou modifie une ligne de devis (si déjà existant) dans le tableau des devis, transformé également en tableau structuré.
Si la référence de devis existe déjà dans le tableau, alors l'utilisateur à le choix entre :
Modifier la ligne existante, En créer une nouvelle ou abandonner.
Ces trois actions sont confirmées par un message en fin de procédure
Cordialement
Salut,
Merci pour votre aide hier. Ducoup j'ai appliqué le vba, mais à la fin j'ai le message suivant :
ERREUR 9 'L'indice n'appartient pas à la selection' c'est bizarre, j'ai vérifié deux foix.
Sub EnregistrerDevis()
Dim DataRow As Range
Dim RefDevis As String
Dim idxDevis As Variant
Dim action As String
action = "enregistré !" ' Pour message final
'
' Récupérer la référence du devis pour contrôle d'existence
RefDevis = ThisWorkbook.Sheets("Devis(2)").Range("C12")
With ThisWorkbook.Sheets("BDD-CHANTIERS").ListObjects("T_Devis")
'
' Chercher la référence du devis dans la colonne
idxDevis = Application.Match(RefDevis, .ListColumns("N°Devis").Range, 0)
'
' Si trouvée : devis déjà enregistré
If Not IsError(idxDevis) Then
'
' Demander ce que souhaite faire l'utilisateur
Select Case MsgBox("Un devis à la référence '" & RefDevis & "' semble déjà exister dans la table des devis." & vbCrLf & vbCrLf & _
"Modifiez le devis existant ?" & vbCrLf & vbCrLf & _
"Si vous cliquez sur 'Non' une nouvelle ligne sera créée." & vbCrLf & _
"Si vous cliquez sur 'Annuler' l'enregistrement n'aura pas lieu.", vbQuestion + vbYesNoCancel, "Enregistrer un devis")
'
' L'utilisateur à répondu oui, récupéré la ligne du devis pour modifications
Case vbYes
Set DataRow = .ListRows(idxDevis).Range
action = "modifié !"
' L'utilisateur à répondu 'annuler'
Case vbCancel
action = "abandon de l'enregistrement ou la modification !"
GoTo FIN
End Select
End If
'
' si aucune ligne alors en créer une
If DataRow Is Nothing Then
If .InsertRowRange Is Nothing Then
Set DataRow = .ListRows.Add().Range
Else
Set DataRow = .InsertRowRange
End If
End If
End With
'
' Ecriture des données dans la ligne
With ThisWorkbook.Sheets("Devis(2)")
DataRow(1, 2).Value = .Range("J10").Value ' Nom client
DataRow(1, 3).Value = .Range("C40").Value ' Désignation
DataRow(1, 4).Value = .Range("C41").Value ' Adresse
DataRow(1, 8).Value = .Range("C13").Value ' Date
DataRow(1, 9).Value = RefDevis ' Ref devis
DataRow(1, 10).Value = .Range("K47").Value ' Total HT
DataRow(1, 12).Value = .Range("K49").Value ' Total TTC
End With
FIN:
MsgBox "Devis '" & RefDevis & "'" & vbCrLf & action, vbInformation, "Enregistrer un devis"
End Sub