Vérifier les saisies via une macro

nakadon

XLDnaute Occasionnel
Bonsoir à tous,

Je souhaite Vérifier par une macro les saisies dans le classeur "saisie_à_controler.xls". La feuille de saisie peut aller jusqu'à 2000 lignes voir plus. La saisie est manuelle et comporte des erreurs dans la colonne Code1 et code2.
L'idée serait que quand je lance la macro, elle vérifie dans la colonne "libellé" du classeur "saisie_à_controler.xls". Si le mot commence par un mot qui existe dans la colonne "libellé" du classeur "norme.xls", alors on vérifie que le code1 et le code2 saisis sont justes et existent dans le classeur "norme.xls".
Si tout est OK, on renseigne la colonne "A corriger pr code1" et la colonne "A corriger pr code2" par "Code1 ok" et "Code2 ok" puis on note OK dans la colonne "Colonne17".
Si l'un des codes ou les deux sont faux, le code en erreur est mis en rouge et le bon code est noté en vert dans la colonne "A corriger..." correspondante puis on note "FAUX" dans la colonne "Colonne17".

Pourriez-vous m'aider s.v.p ?
Je vous remercie d'avance.
 

Pièces jointes

  • Norme.xls
    15.5 KB · Affichages: 44
  • Saisies_à_controler.xls
    19.5 KB · Affichages: 36

youky(BJ)

XLDnaute Barbatruc
Re : Vérifier les saisies via une macro

Bonjour nakadon,
Enregistre ce nouveau fichier dans le même répertoire que Norme.xls
Donc ne le lance pas s'en l'avoir enregistré.!.!.!.
J'ai ajouté un A au début du nom du fichier pour pas de confusion.
Les 2 fichiers doivent être dans le même répertoire sinon il faudra rectifier en macro.
Explications dans le fichier (sur la droite) avec le bouton.
Bruno

Apercu de la macro
Code:
Sub test()
Dim Wb As Workbook
On Error GoTo fin
[O2:Q10000].ClearContents
fichier = ThisWorkbook.Path & "\Norme.xls"
Set Wb = GetObject(fichier)
With Wb.Sheets("Feuil1")
For lig = 2 To Cells(Rows.Count, 11).End(3).Row
c1 = Application.Match(Cells(lig, 13), .Range("C1:C10000"), 0)
If IsNumeric(c1) Then
    If .Cells(c1, 4) <> Cells(lig, 14) Then Cells(lig, "P") = .Cells(c1, 4)
    If Left(Cells(lig, 11), 4) <> Left(.Cells(c1, 1), 4) Then Cells(lig, "Q") = "Faux"
Else
c1 = Application.Match(Cells(lig, 14), .Range("D1:D10000"), 0)
 If IsNumeric(c1) Then
    If .Cells(c1, 3) <> Cells(lig, 13) Then Cells(lig, "O") = .Cells(c1, 3)
 Else
 'MsgBox "pas trouvé en " & lig
 For k = 2 To .[A65000].End(3).Row
 If Left(Cells(lig, 11), 4) = Left(.Cells(k, 1), 4) Then
 Cells(lig, "O") = .Cells(k, 3): Cells(lig, "P") = .Cells(k, 4)
 Exit For
 End If
 Next
 End If
End If
Next
End With
fin:
Wb.Close
End Sub
 

Pièces jointes

  • ASaisies_à_controler.xls
    44 KB · Affichages: 42
  • ASaisies_à_controler.xls
    44 KB · Affichages: 43
  • ASaisies_à_controler.xls
    44 KB · Affichages: 42

nakadon

XLDnaute Occasionnel
Re : Vérifier les saisies via une macro

Bonjour Bruno et merci pour votre aide.

Je viens de tester cette excellente macro. C'est déjà pas mal. Mais le résultat comporte encre des erreurs. Exemple, en ligne 8, le libellé "KKKKKKKKTER5548E" doit avoir pour code1 = 0140020-6 et code2 = 84936546365. Or la correction proposée en colonne "P" est erronée. Cette solution (Code2 = 84936546371) correspond au libellé commençant par "PPPPPPP". En effet, il s'agit de vérifier pour un libellé donné, les bons codes correspondants dans le classeur "Norme.xls". Si une partie du libellé saisi existe dans "Norme.xls", alors on vérifie que les codes saisis sont les bons par rapport à ce libellé. Sinon, on propose la bonne solution dans les colonnes "O" et "P". Pour résumer, le code saisi même s'il existe, mais n'est pas associé au libellé en cours de traitement, alors il est faux pour ce libellé.

Je n'arrive pas à modifier le code dans ce sens. Si vous pouvez m'aider s.v.p..
Merci d'avance.
 
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : Vérifier les saisies via une macro

Salut bien,
J'ai refais toute la macro.
Celle-ci est plus simple à comprendre.
J'ai mis bien des explications.
J'aime bien ce type de macros.
Attention aussi dans le fichier Norme il y des code1 en text (tout doit être en numeric)
Bon week-end avec ce fichier
Bruno
Code:
Sub test()
Dim Wb As Workbook
'Dim ok As Boolean
On Error GoTo fin
[O2:Q10000].ClearContents
fichier = ThisWorkbook.Path & "\Norme.xls"
Set Wb = GetObject(fichier)
With Wb.Sheets("Feuil1")
For lig = 2 To Cells(Rows.Count, 11).End(3).Row
 c1 = Application.Match(Cells(lig, 13), .Range("C1:C10000"), 0) 'code1
  If IsNumeric(c1) Then
   If .Cells(c1, 4) = Cells(lig, 14) And Left(Cells(lig, 11), 4) = Left(.Cells(c1, 1), 4) Then GoTo bas 'tout ok on va à Next
   If Left(Cells(lig, 11), 4) = Left(.Cells(c1, 1), 4) Then Cells(lig, "P") = .Cells(c1, 4): GoTo bas 'code1 & 4 lettres ok, on rectif code2
  End If
   c1 = Application.Match(Cells(lig, 14), .Range("D1:D10000"), 0) 'code2
    If IsNumeric(c1) Then 'si code2 ok & libellé ok on rectif code1 et va à next
     If Left(Cells(lig, 11), 4) = Left(.Cells(c1, 1), 4) Then Cells(lig, "O") = .Cells(c1, 3): GoTo bas
    End If
    'code1 & code2 ne sont pas bon alors on boucle pour trouver les 4 premières lettres du libellé
       For k = 2 To .[A65000].End(3).Row
        If Left(Cells(lig, 11), 4) = Left(.Cells(k, 1), 4) Then
         Cells(lig, "O") = .Cells(k, 3): Cells(lig, "P") = .Cells(k, 4): Exit For
        End If
       Next
bas: 'routine
Next
End With
fin:
Wb.Close
End Sub
 

Pièces jointes

  • ASaisies_à_controler.xls
    44.5 KB · Affichages: 35
  • ASaisies_à_controler.xls
    44.5 KB · Affichages: 40
  • ASaisies_à_controler.xls
    44.5 KB · Affichages: 39

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T