Contrôler des données

Bonjour,

Dans un fichier, je souhaite contrôler des données qui seront importées. L'import peut faire jusqu'à 100 000 lignes.

Mon contrôle consiste à dire "dans la colonne A les seules valeurs acceptées sont 'Soleil' ou 'Lune'". Pour cela j'utilise la formule DO.

Cela fonctionne mais cela est assez long. Pensez-vous que je puisse utiliser une autre formule afin d'accélérer ma macro.

Ci-dessous un extrait de ma macro.

Range("E7").Select

Do

   If Not (ActiveCell.Value Like "ART") And Not (ActiveCell.Value Like "REG") And Not (ActiveCell.Value Like "ANN") And Not (ActiveCell.Value Like "RED") Then
       Range("D7:O100000").ClearContents
       MsgBox ("La colonne TYPE n'est pas conforme" & Chr(10) & Chr(13) & "Les seules valeurs acceptées sont ART - RED - REG - ANN")
       Exit Sub
  End If
  ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Offset(1, 0) = ""

Merci par avance de votre aide,

bonjour,

essaie ceci

Set s = Range("E7:E" & Cells(Rows.Count, "E").End(xlUp).Row)
    If Application.CountIfs(s, "<>RED", s, "<>REG", s, "<>ART", s, "<>ANN") - Application.CountBlank(s) > 0 Then
        MsgBox ("La colonne TYPE n'est pas conforme" & Chr(10) & Chr(13) & "Les seules valeurs acceptées sont ART - RED - REG - ANN")
        Exit Sub
    End If

Cela fonctionne très bien je te remercie. J'essaie d'adapter le modèle à deux autres endroits de ma formule mais sans succès... Je n'arrive pas à gérer une variable dans ton modèle. Je veux contrôler la date et l'année de la colonne G.

Formule originale

 

'Valider date mois
Date1 = Feuil1.Range("G5")
mois1 = Format(Date1, "mm")
annee1 = Format(Date1, "yyyy")

Range("g7").Select
Do
   If Not Format(ActiveCell, "mm") = mois1 Then
       mois2 = Format(ActiveCell, "mmmm")
       Range("D7:O100000").ClearContents
       MsgBox ("Erreur de période:" & Chr(10) & Chr(13) & "L'import contient des données du mois de " & UCase(mois2) & Chr(10) & Chr(13) & "Vérifiez le fichier source")
       Exit Sub
  End If
  ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Offset(1, 0) = ""

'Valider date année

Range("g7").Select
Do
   If Not Format(ActiveCell, "yyyy") = annee1 Then
       année2 = Format(ActiveCell, "yyyy")
       Range("D7:O100000").ClearContents
       MsgBox ("Erreur de période:" & Chr(10) & Chr(13) & "L'import contient des données de l'année " & UCase(année2) & Chr(10) & Chr(13) & "Vérifiez le fichier source")
       Exit Sub
  End If
  ActiveCell.Offset(1, 0).Select
    Loop Until ActiveCell.Offset(1, 0) = ""

Merci,

re-bonjour,

voici une façon de faire

 date1 = feuil1.Range("G5")
    mois1 = Month(date1)
    annee1 = Year(date1)
    Set s = feuil1.Range("G7:G" & feuil1.Cells(Rows.Count, "G").End(xlUp).Row)
    If Application.Evaluate("SumProduct((Month(" & s.Address & ") <>" & mois1 & ") * 1)") > 1 Then
        MsgBox ("Erreur de période:" & Chr(10) & Chr(13) & "L'import ne contient pas (uniquement)  des données du mois de " & UCase(Format(date1, "mmmm")) & Chr(10) & Chr(13) & "Vérifiez le fichier source")
        Exit Sub
    End If
   If Application.Evaluate("SumProduct((year(" & s.Address & ") <>" & annee1 & ") * 1)") > 1 Then
        MsgBox ("Erreur de période:" & Chr(10) & Chr(13) & "L'import ne contient pas (uniquement) des données de l'année " & UCase(année1) & Chr(10) & Chr(13) & "Vérifiez le fichier source")
        Exit Sub
    End If

Merci h2so4 mais sauf mauvaise intégration de ma part cela ne fonctionne pas.

Ci-joint un fichier "test".

Encore merci de ton aide,

3classeur1.xlsm (19.77 Ko)

bonjour,

remplace

> 1 

par

> 0 

dans les 2 instructions If

Merci !

Rechercher des sujets similaires à "controler donnees"