XL 2010 VBA contrôle cohérence données < exit sub

spike29

XLDnaute Occasionnel
Bonjour,

Débutant en VBA je bloque sur une partie de mon code consistant à faire cesser la macro si certaines conditions ne sont pas respectées.

J’ai un tableau ou des données doivent être saisies dans différentes colonnes.

Dès lors qu’une série de 6 chiffres chiffres apparaît en colonne M, il faut aussitôt que l’utilisateur saisisse des informations pour les colonnes I,J,K et L de la même ligne.

Si ça n’est pas le cas je souhaite bloquer le reste de ma macro (exit sub) et faire apparaître un MsgBox invitant l’utilisateur à procéder aux saisies nécessaires.



Un début de code qui ne fonctionne pas chez moi, ça me met, la méthode Range de l'objet a échoué.



VB:
For y = 28 To Range("M" & Rows.Count).End(xlUp).Row



If IsNumeric(Range("M" & y).Value) And Len(Range("M" & y).Value) = 6 And (Range("I:L" & y).Value) = "" Then _



MsgBox "vous avez oublié une saisie", vbCritical



Exit Sub



Next



Merci d’avance pour votre aide et bonne fin de journée.

Cdt,
 
Solution
Ah oui, tu avais dû l'évoquer à moment donné mais j'ai zappé.
Il suffit de modifier l'ordre des opérations.

Un pb ?
Je suis resté sur le tableau I28:M74 mais tu l'as divisé en 2 tableaux ?!?
Je ne sais pas ce que tu fabriques... Si c'est vraiment 2, il va falloir adapter.
eric

EDIT : ajout surlignage des cellules en anomalie

eriiic

XLDnaute Barbatruc
Ah oui, tu avais dû l'évoquer à moment donné mais j'ai zappé.
Il suffit de modifier l'ordre des opérations.

Un pb ?
Je suis resté sur le tableau I28:M74 mais tu l'as divisé en 2 tableaux ?!?
Je ne sais pas ce que tu fabriques... Si c'est vraiment 2, il va falloir adapter.
eric

EDIT : ajout surlignage des cellules en anomalie
 

Pièces jointes

  • TEST1.1.xlsm
    23.5 KB · Affichages: 18
Dernière édition:

spike29

XLDnaute Occasionnel
Bonsoir Eric,


Oui je l'ai divisé en deux, car sur mon fichier il est en 3 parties. Je ne pensais pas qu'il y aurait un impact côté code.

J'ai trouvé une solution, j'ai légèrement réadapté ton code.

Le fichier réadapté avec le code ci-dessous.

VB:
 Dim datas, datas2, lig As Long, col As Long
    Dim anoH As Long, anoNbr As Long, ano As Boolean, nbLig As Long, msg As String
    Dim nNom$
    
    datas = Worksheets("Rapport").[I28:L74].Value
    Worksheets("Rapport").[I28:L74].Interior.ColorIndex = xlNone
    datas2 = Worksheets("Rapport").[M28:M74].Value
    For lig = 1 To UBound(datas, 1)
        If IsNumeric(datas2(lig, 1)) = False Or datas2(lig, 1) <> "" Then
            nbLig = nbLig + 1
            ' contrôle nombre
            ano = False
            If IsNumeric(datas2(lig, 1)) Then
                If datas2(lig, 1) < 100000 Or datas2(lig, 1) > 999999 Then anoNbr = anoNbr + 1: ano = True

            End If
            If ano Then Range("M27").Offset(lig).Interior.Color = vbYellow
            ' contrôle heures
            For col = 1 To UBound(datas, 2)
                ano = False
                If datas(lig, col) = "" Then
                    anoH = anoH + 1: ano = True
                ElseIf IsNumeric(datas(lig, col)) Then
                    If datas(lig, col) < 0 Or datas(lig, col) >= 1 Then anoH = anoH + 1: ano = True

                End If
                If ano Then Range("H27").Offset(lig, col).Interior.Color = vbYellow
            Next col
        End If
    Next lig
    If anoH + anoNbr > 0 Then
        msg = nbLig & " lignes contrôlées :" & vbLf
        If anoH Then msg = msg & anoH & " anomalie(s) de saisie heures"
        If anoNbr Then msg = msg & vbLf & anoNbr & " anomalie(s) de saisie nombres"
    End If
    If msg <> "" Then MsgBox msg: Exit Sub
    ' suite du code

Un grand merci pour ton aide et ta patience.

Bonne fin de journée et merci encore.
 

Pièces jointes

  • TEST1.1.xlsm
    24.6 KB · Affichages: 1

Statistiques des forums

Discussions
311 734
Messages
2 082 020
Membres
101 872
dernier inscrit
Colin T