Sub Enregistrer_Devis()
Application.ScreenUpdating = False
Worksheets("SAISIE").Select
Worksheets("SAISIE").Unprotect
Dim Table() As String
Dim tablo(1, 6)
Dim tabloErreur As Variant
Dim tabloMsg As Variant
Dim tabloFacture As Variant
Dim msg As String
Dim msg1 As String
Dim msg2 As String
Dim f1 As Worksheet
Dim f2 As Worksheet
Dim Derli As Long
Dim i As Integer
[COLOR="Red"]Dim Lg[/COLOR]
If ActiveSheet.Range("g6").Value = "FACTURE N°" Then
MsgBox " cette feuille est une FACTURE, vous ne pouvez l'enregistrer"
Worksheets("SAISIE").Protect
End
Else
'initialisation des variables
Set f1 = Sheets("SAISIE")
Set f2 = Sheets("Recap_Devis")
' affectaction des valeurs de cellules au tableau
tablo(1, 1) = f1.[C12] '..........Code Client
tablo(1, 2) = f1.[I5] '..........Date
tablo(1, 3) = f1.[J6] '..........Numéro de la piece
tablo(1, 4) = f1.[G8] '.........Nom du Client
tablo(1, 5) = f1.[H12] '........Code Postal
tablo(1, 6) = f1.[j59] '........Total TTC
'Gestion des cellules non renseignées
tabloErreur = Array("", "Date", "")
tabloMsg = Array("nom", "date", "numéro")
msg1 = "Il n'y a pas de "
msg2 = ", le DEVIS ne peut pas être enregistrée."
'boucle pour l'affichage des cellules non remplies
For i = 3 To 1 Step -1
If tablo(1, i) = tabloErreur(i) Then msg = msg & vbLf & msg1 & tabloMsg(i) & msg2
Next i
'si une condition remplie, affichage du message d'erreur et fin de Sub
If Not msg = "" Then MsgBox msg: Exit Sub
' controle ligne TVA
For i = 15 To 52
If f1.Cells(i, "J").Value <> "" And _
f1.Cells(i, "K").Value = "" Then _
MsgBox "la cellule " & Cells(i, "K").Address & " est vide.": End
Next i
'Recherche de la dernière ligne de l'onglet "Recap_Devis"
Derli = f2.Columns("A").Find("*", , , , , xlPrevious).Row ' + 1
'Gestion des doublons
tabloFacture = f2.Range("C1:C" & Derli).Value
'si doublon, affichage du message et fin de Sub Plutôt qu'un Exit Sub j'aimerais pouvoir modifier la ligne existante dans l'onglet Recap_Devis
[COLOR="Red"]' If Not IsError(Application.Match(tablo(1, 3), tabloFacture, 0)) Then _
MsgBox "Le numéro du DEVIS """ & tablo(1, 3) & """ existe déja!": Exit Sub
Lg = Application.Match(tablo(1, 3), tabloFacture, 0)
' Si erreur : Pas de doublon
' sinon Lg contient la ligne en double
'
If Not IsError(Lg) Then
If MsgBox("Le numéro du DEVIS """ & tablo(1, 3) & """ existe déja!" & vbCr & "Voulez vous modifier la ligne ?", _
vbInformation + vbYesNo, "Doublon détecté") = vbYes Then
Derli = Lg - 1 ' On note - 1 car dans la suite tu rajoutes 1
End If
End If[/COLOR]
'insertion [COLOR="Red"]ou modification[/COLOR] des données sur Recap_Facture
Derli = Derli + 1
f2.Cells(Derli, "I").Value = Now
f2.Range("A" & Derli & ":F" & Derli).Value = tablo
End Sub