Check doublons validation USF

pobrouwers

XLDnaute Occasionnel
Bonjour le forum, bonjour Hervé (qui m'a déja aidé sur ce fichier et je me permets de le solliciter à nouveau)

Serait-il possible de faire un check dans le fichier ci-dessus. C'est à dire empêcher le double encodage, de vérifier avant de valider si les données saisies dans le USF n'ont pas été déja encodées (=> doublons). Faire le check sur les colonnes A, C, E, F.
La cerise sur le gâteau serait que s'il y a doublon, le curseur se positionnerait sur la ligne déja encodée dans le tableau.
J'ai regardé les différents posts au sujet des doublons mais je pédale grave dans la semoule.
Peux-tu regarder ?
Merci d'avance. [file name=le_20060124105225.zip size=24382]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/le_20060124105225.zip[/file]
 

Pièces jointes

  • le_20060124105225.zip
    23.8 KB · Affichages: 17

Hervé

XLDnaute Barbatruc
bonsoir pobrouwers, porcinet :)

pobrouwers, il faut comparer les colonnes A,C,E et F de quelle feuille (Le ou CDF) ?

ces colonnes correspondent à quels controles du userform (la colonne F = combocdf ???)

qu'entend-tu par pointer, il faut juste la sélectionner et interdir la saisie ?

merci de m'apporter les éclaircissements.

salut
 

pobrouwers

XLDnaute Occasionnel
Merci hervé pour ton aide mais finalement en me creusant j'ai trouvé par moi meme. Je joints le code pour voir si tu vois pas truc qui te heurte ;)
Code:
Private Sub CommandButton2_Click()
Dim i As Integer
Dim ii As Integer

Dim X As Integer
Dim match As Byte

If Me.ComboCDF.Value = '' Or _
   Me.ComboNatDep.Value = '' Or _
   Me.TxtMontVar.Value = '' Or _
   Me.Comment.Value = '' Or _
   Me.ComboNumCip.Value = '' And Me.ComboNumCip.Enabled = True Or _
   Me.ComboNatCIP.Value = '' And Me.ComboNumCip.Enabled = True Then
        msgbox 'Veuillez renseigner tous les champs qui ont un * !', vbCritical, 'ERREUR SAISIE'
        Exit Sub
   End If

i = Sheets('LE').Range('a65536').End(xlUp).Row + 1 'première ligne vide en colonne A

'contrôle de duplication
For X = 4 To i
If ComboCDF = Sheets('LE').Range('A' & X) And _
   ComboNatDep = Sheets('LE').Range('C' & X) And _
   ComboNumCip = Sheets('LE').Range('E' & X) And _
   ComboNatCIP = Sheets('LE').Range('F' & X) Then
match = match + 1: ii = X
End If
Next X

If match > 0 Then
msgbox 'Duplication trouvée dans la database ! Positionnez-vous sur la ligne et cliquez sur modifier !', vbCritical, 'DUPLICATION'
Exit Sub
End If
If i < 4 Then i = 4

With Sheets('LE')
    .Cells(i, 1) = Me.ComboCDF.Text
    .Cells(i, 2) = CDbl(Me.TxtMontBud.Value)
    .Cells(i, 3) = Me.ComboNatDep
    .Cells(i, 4) = CDbl(Me.TxtMontVar.Value)
    .Cells(i, 5) = Me.ComboNumCip
    .Cells(i, 6) = Me.ComboNatCIP
    '.Cells(i, 7) = CDbl(Me.TxtMontCIP.value)
    .Cells(i, 9) = Me.Comment
    .Cells(i, 10) = CDbl(Me.TxtMontLE.Value)
    .Cells(i, 11) = Me.Label29
    .Cells(i, 12) = Me.TxtSection
End With
ActiveWorkbook.Names.Add Name:='Tab_LE', RefersToR1C1:='='LE'!R1C1:' & 'R' & i & 'C' & 12

Unload LE
'Mise en forme
Sheets('LE').Cells.EntireColumn.AutoFit
    Columns('L:L').ColumnWidth = 0.08
    Application.Goto Reference:='Tab_LE'
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    Range('A1:K2').Select
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .Weight = xlMedium
        .ColorIndex = xlAutomatic
    End With
    ActiveWindow.ScrollColumn = 3
    Range('C4').Select


End Sub

Pour ce qui est de se positionner : s'il trouve une duplication, afficher le msgbox et puis apres le ok, séléctionné la ligne dans LE qui pose un probleme.

Merci
 

Hervé

XLDnaute Barbatruc
re :)

eh ben, content de voir que tu t'en sort comme un chef

pour le code de duplication, j'aurai opté pour ceci :


'contrôle de duplication
For x = 4 To i
       
If ComboCDF = Sheets('LE').Range('A' & x) And _
                ComboNatDep = Sheets('LE').Range('C' & x)
And _
                ComboNumCip = Sheets('LE').Range('E' & x)
And _
                ComboNatCIP = Sheets('LE').Range('F' & x)
Then
                        MsgBox 'Duplication trouvée dans la database ! Positionnez-vous sur la ligne et cliquez sur modifier !', vbCritical, 'DUPLICATION'
                       
Exit Sub
       
End If
Next x

on gagne quelques variables.

pour les bordures, il existe la collection borders qui correspond aux quatres bordures 'classique' d'une cellule, ceci te permettrait de simplifier ton code :


        With Union(Range('Tab_LE'), Range('A1:K2'))
                .Borders(xlDiagonalDown).LineStyle = xlNone
                .Borders(xlDiagonalUp).LineStyle = xlNone
               
With .Borders
                        .LineStyle = xlContinuous
                        .Weight = xlMedium
                        .ColorIndex = xlAutomatic
               
End With
       
End With

Attention, j'ai pas testé ces codes dans le cadre de ton application, c'est juste une piste de réflexion surement à adapter à ton cas.

salut

:)
 

Statistiques des forums

Discussions
312 297
Messages
2 086 972
Membres
103 412
dernier inscrit
antoire