Verification données

Bonjour à tous,

Cela fait bien longtemps que je n'ai plus écrit de code vba.

Aujourd'hui, je me retrouve bloqué par un point qui vous paraitra certainement facile à résoudre.

Mais je n'ai pas de solution à celui-ci. Je joins un fichier excel simplifié car il y énormément de macros derrière ce fichier.

Voici mon problème:

Dans la case I1, j’ai la référence du prétraitement de mes données.

Dans les colonnes F, j'ai les références de mes contrôles

Dans la colonne G se sont les résultats machine.

Le tableau A13/ E21 sont mes valeurs de contrôles avec le nom de la matrice le nom de chaque contrôle la valeur cible et les limites à ne pas franchir.

En vba est-il possible de vérifier ceci:

1) En tenant compte de I1, je vais vérifier pour chaque contrôle que la valeur machine est bien comprises dans les bornes défini dans le tableau des contrôles. Si tel n'est pas le cas, inscrire dans la colonne I "hors limite" - contrôle A dans mon exemple

2) Pour chaque paire de contrôle vérifier que les valeurs ne dépassent pas un écart de 0.3 - contrôle C dans mon exemple

3) Vérifier que tous les contrôles sont par 2 et non individuel - controle D dans mon exemple.

Merci à vous pour ce coup de main car là je bloque totalement.

JF

8test-smri.xlsx (11.10 Ko)

Voici le code qui me sert à faire les moyennes pour des echantillons.

le premier fichier était incomplet.

'**********************************

'EFFECTUER LA MOYENNE AVEC SSTOTAL

'**********************************

Sub FaireSousTotaux(Rg As Range, colonneCle As Integer, ParamArray colonnesMoyenne())

'Permet d'agreger les lignes

'Paramètres :

'- rg : zone à traiter

'- colonneCle : colonne de référence où l'on évite les doublons

'- colonnesMoyenne() : liste des colonnes qu'il faut moyenner

'arret MAJ ecran définition du mode calcul

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

'Set dic = New Dictionary 'La collection qui va contenir la correspondance identifiant ligne

Set dic = CreateObject("Scripting.Dictionary")

'definir le nombre de ligne à traiter

nbRows = Rg.Rows.Count

i = 1

DebutBoucle:

'Boucle pour calcul de la moyenne sur le tableau selectionné

Do While i <= nbRows

cle = Rg.Cells(i, colonneCle)

'On regarde si le produit existe déjà

If dic.Exists(cle) Then

'S'il existe, ajouter les valeurs, calculer la moyenne et effacer la ligne

For J = 0 To UBound(colonnesMoyenne)

oldVal = Rg.Cells(dic(cle), colonnesMoyenne(J)).Value 'ajout valeur

'verification ecart entre les 2 valeurs

oldVal = Abs(oldVal) - Abs(Rg.Cells(i, colonnesMoyenne(J)))

oldVal = Abs(oldVal)

If oldVal > 0.3000000001 Then

Rg.Cells(i - 1, "J").Interior.ColorIndex = 3

Rg.Cells(i, "J").Interior.ColorIndex = 3

i = i + 1

'Rg.Cells(i, colonnesMoyenne(J)).EntireRow.Delete

'Rg.Cells(i - 1, colonnesMoyenne(J)).EntireRow.Delete

'nbRows = nbRows - 2

'i = 1

GoTo DebutBoucle

Else

oldVal = Rg.Cells(dic(cle), colonnesMoyenne(J)).Value

oldVal = (oldVal + Rg.Cells(i, colonnesMoyenne(J))) / 2

Rg.Cells(dic(cle), colonnesMoyenne(J)).Value = Format(oldVal, "0.00")

End If

Next J

'effacer la ligne

Rg.Cells(i, 1).EntireRow.Delete

nbRows = nbRows - 1

Else

'S'il n'existe pas on l'ajoute

dic.Add cle, i

i = i + 1

End If

Loop

'MAJ ecran et du mode de calcul

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

'décharge de la memoire

Set dic = Nothing

End Sub

Bonjour,

Voici le bout de code pour la vérification des contrôles par rapport à la valeur cible mais cela ne fonctionne pas car la boucle me sort une erreur "indice n'appartenant pas à la sélection" après boucler plusieurs fois.

De plus, si la valeur est hors limite, cela ne s'inscrit pas dans la colonne I

En pj, le fichier de test correspondant.

Option Explicit
Dim tabTemoin As Variant
Dim tabControleSerie As Variant
Dim n As Integer
Dim m As Integer
Dim typeControle As String
Dim dernLigneSerie As Long
Dim dernLigneTemoin As Long

Sub VerifValCible()

    'Type de serie à traiter
    typeControle = Sheets("Feuil1").Range("I1")
    'definition tableau SERIE
    dernLigneSerie = Range("F" & Rows.Count).End(xlUp).Row
    tabControleSerie = Sheets("Feuil1").Range("F2:I" & dernLigneSerie)

    'boucle de verification
    Select Case typeControle
        'C13
        Case "C13"
            'definition tableau temoin
            dernLigneTemoin = Range("A" & Rows.Count).End(xlUp).Row
            tabTemoin = Sheets("Feuil1").Range("A14:E" & dernLigneTemoin)
            'boucle verification des temoins serie avec valeur temoins
            For m = LBound(tabControleSerie, 1) To UBound(tabControleSerie, 1)
                For n = LBound(tabTemoin, 1) To UBound(tabTemoin, 1)
                    If tabControleSerie(n, 1) = tabTemoin(m, 2) Then
                        If Abs(tabTemoin(m, 4)) < Abs(tabControleSerie(n, 2)) < Abs(tabTemoin(m, 3)) Then
                            tabControleSerie(n, 4) = "hors limite"
                        End If
                    End If
                Next n
            Next m
    End Select
End Sub

Bonjour,

A force de persévérance, j'ai reussi à résoudre mon problème.

Voici le code en question si cela peut aider avec des variables tableaux ainsi que la pièce jointe:

Bonne soirée à tous.

Option Explicit

Dim tabTemoin() As Variant
Dim tabControleSerie() As Variant
Dim n As Integer
Dim m As Integer
Dim typeControle As String
Dim dernLigneSerie As Long
Dim dernLigneTemoin As Long
Dim controleSerie As Boolean

Sub VerifValCible()

    'Type de serie à traiter
    typeControle = Sheets("Feuil1").Range("I1")
    'definition tableau SERIE
    dernLigneSerie = Range("F" & Rows.Count).End(xlUp).Row
    tabControleSerie = Sheets("Feuil1").Range("F2:J" & dernLigneSerie).Value

    'boucle de verification
    Select Case typeControle
        'C13
        Case "C13"
            'definition tableau temoin
            dernLigneTemoin = Range("A" & Rows.Count).End(xlUp).Row
            tabTemoin = Sheets("Feuil1").Range("A2:E" & dernLigneTemoin).Value
            'boucle verification des temoins serie avec valeur temoins
            For m = LBound(tabControleSerie, 1) To UBound(tabControleSerie, 1)
                For n = LBound(tabTemoin, 1) To UBound(tabTemoin, 1)
                    If tabControleSerie(m, 1) = tabTemoin(n, 2) Then
                        controleSerie = False
                        If tabControleSerie(m, 2) <= tabTemoin(n, 4) And tabControleSerie(m, 2) >= tabTemoin(n, 5) Then
                                controleSerie = True
                        End If
                        If controleSerie = False Then
                            tabControleSerie(m, 4) = "hors limite"
                        End If
                    End If
                Next n
            Next m

            'Transfère les éléments du tableau dans la feuille de calcul
            Sheets("Feuil2").Range("A3").Resize(UBound(tabControleSerie, 1), UBound(tabControleSerie, 2)) = tabControleSerie

        Case "O18"
            'definition tableau temoin
            dernLigneTemoin = Range("K" & Rows.Count).End(xlUp).Row
            tabTemoin = Sheets("Feuil1").Range("K2:O" & dernLigneTemoin).Value
            'boucle verification des temoins serie avec valeur temoins
            For m = LBound(tabControleSerie, 1) To UBound(tabControleSerie, 1)
                For n = LBound(tabTemoin, 1) To UBound(tabTemoin, 1)
                    If tabControleSerie(m, 1) = tabTemoin(n, 2) Then
                        controleSerie = False
                        If tabControleSerie(m, 2) <= tabTemoin(n, 4) And tabControleSerie(m, 2) >= tabTemoin(n, 5) Then
                                controleSerie = True
                        End If
                        If controleSerie = False Then
                            tabControleSerie(m, 4) = "hors limite"
                        End If
                    End If
                Next n
            Next m

            'Transfère les éléments du tableau dans la feuille de calcul
            Sheets("Feuil2").Range("F3").Resize(UBound(tabControleSerie, 1), UBound(tabControleSerie, 2)) = tabControleSerie
    End Select

End Sub
Rechercher des sujets similaires à "verification donnees"