Créer un tableau suite aux résultat de comparaison de 2 tableaux séparés

15test.xlsm (21.27 Ko)

Bonjour tout le monde ,

Svp j'ai besoin de réaliser un code VBA qui me permettra de :

Données que j'ai : j'ai 3 tableaux chaque tableau dans une feuille Excel ( Tab 1 dans feuille 1 , tab 2 dans feuille 2 , tab 3 dans feuille 3)

je dois chercher si le N° d'echantillon de la colonne 1 tab 1 se trouve dans la colonne 3 tab 2 et si je trouve ce numéro je dois m'assurer que la profondeur de cet echantillon qui se trouve dans la colonne 4 tab 2 est bien entre un intervalle qui se trouve dans colonne 2 et 3 tab 1 => si cette condition est verifiée je dois écrire "Realisé" Dans une première colonne du tab 3, si non écrire "NON réalisé"

je continue la boucle , pour les echantillon réalisée , je vérifie si les essais qui se trouvent dans tab 1 sont réalisée dans tab 2 et écrire ce résultat dans tab 3 .

J'ai mis le fichier en pièce jointe pour plus de visibilité

je vous remercie d'avance , j'ai beau essayer mais ca ne marche pas pour moi :/

j'ai essayé ce code avec une première comparaison mais il ne marche pas

Sub comparaison()

Dim i, j As Integer

For i = 2 To 6

For j = 3 To 7

If (Sheets("Data").Cells(i, 1).Value = Sheets("Labo").Cells(j, 1).Value And Sheets("Data").Cells(i, 2).Value <= Sheets("Labo").Cells(j, 2).Value <= Sheets("Data").Cells(i, 3).Value) Then

Sheets("Comparaison").Cells(i, 5).Value = "Réalisé"
i = i + 1

Else

Sheets("Comparaison").Cells(i, 5).Value = "Non Réalisé"

End If

Next j


Next i






End Sub

Bonjour Hafsa Pro, le forum,

9test-v1.xlsm (30.17 Ko)

J’ai effectué quelques modifications sur la feuille « Comparaison ». Regardes si cela te convient et si j’ai bien compris ta demande.

Sur cette feuille, j’ai repris les données des feuilles « Data » et « Labo », qui seront à effacer.

J’ai également mis quelques remarques sur la feuille « Data ». Je n’ai pas effectué les comparaisons sur les essais, car les essais 0, 4, 5, n’apparaissent pas sur la feuille « Data ».

Cordialement,

Bernard

Bonjour Bernard,

Merci beaucoup de ton retour aussi vite :).

Dzl pour les erreurs concernant les numéros de colonne sur mon premier post .

En fait moi j'ai juste simplifié les tableaux pour mener d'abord le raisonnement , en réalité le tableau 1 "Data" contient presque 1200 lignes et le tab 2 "Labo" contient 2500 lignes et pour la colonne A tab 2 les données ne sont pas organisées forcément dans le même ordre que de colonne A tab 1. le tableau 1 c'est le programme qu'il faut faire et tableau 2 c'est ce qui est effectué réellement par le labo c'est pour cela tu peux trouver des essais dans tab 2 qui ne sont pas demandés dans tab 1 . Pour moi je cherche juste est ce que les essais qui sont programmés (tab1) sont réalisés par le labo (tab2)

C'est pour cela , pour le code je souhaite que :

-Pour chaque ligne i dans tab 1 , je dois chercher est ce que la cellule (i , A) se trouve dans une ligne j de la colonne A du tab 2 avec en même temps cellule (i , B),tab1 <=Cellule (j, B), tab 2 <=cellule (i , C),tab1; => condition Vrai : j'écris "réalisé" dans la Colonne D tab 3 (après avoir copié la colonne A et B et C tab 1 dans tab 3 ) sinon écrire "Non réalisé"

- Si l'échantillon est "réalisé" je continue une deuxième comparaison si non il s'arrête à ce niveau ;

- Pour la 2 ème comparaison: le programme doit comparer est ce que les essais définis pour l'échantillon de la ligne i tab 1 qu'il l'a trouvé dans la ligne j tab 2 sont bien réalisé , du coup comparer juste la cellule ( i , essai 1 ), tab 1 avec cellule (j , essai 1 ),tab 2 jusqu'à essai 3 . Les essais 0 , 4 , 5 dans tab 2 on tient pas compte.

- s'il trouve l'essai réalisé il écris "Oui" , si non écrire "Non" , si l'essai est non demandé (case vide dans tab 1 , elle reste vide dans tab 3 pour le même essai ) .

Excuse moi d'être longue !!

bonne journée

Sub comparaison()

   Dim WshData As Worksheet, WshLabo As Worksheet, WshComp As Worksheet

   Dim i As Integer
   Dim j As Integer

      ' Mettre à jour les tables 
      Set WshData = Sheets("Data")
      Set WshLabo = Sheets("Labo")
      Set WshComp = Sheets("Comparaison")

      ' Effacer les données existante
WshComp.Range("A2:G" & Range("A" & Rows.Count).End(xlUp).Row).ClearContents

      ' Copie les données des 3 premières colonnes du tableau 1 

      With WshData
            For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
                  WshComp.Cells(i, 1).Value = .Cells(i, 1).Value
                  WshComp.Cells(i, 2).Value = .Cells(i, 2).Value
                  WshComp.Cells(i, 3).Value = .Cells(i, 3).Value

       'parcourir la feuille wshdata avec l'indie i et wshlabo avec l'indice j

                With WshLabo
    'les données tab Data commence à la ligne 3

                For j = 3 To .Range("A" & Rows.Count).End(xlUp).Row
                  Sheets("Data").Select

                  If .Cells(i, 1).Value = .Cells(j, 1).Value Then

                     If .Cells(i, 3).Value < .Cells(j, 2).Value And .Cells(i, 4).Value > .Cells(j, 2).Value Then

                              WshComp.Cells(i, 4).Value = "Réalisé"

'contrôle pour essai 1                         
                          If IsEmpty(.Cells(i, 4).Value) = False Then

                               If IsEmpty(.Cells(j, 4).Value) = False Then
                                 WshComp.Cells(i, 5).Value = "OUI"
                                 Else
                                 WshComp.Cells(i, 5).Value = "NON"

                              End If
                             End If

'contrôle pour essai 2          
                          If IsEmpty(.Cells(i, 5).Value) = False Then

                                If IsEmpty(.Cells(j, 5).Value) = False Then
                                 WshComp.Cells(i, 6).Value = "OUI"
                                 Else
                                 WshComp.Cells(i, 6).Value = "NON"

                              End If
                             End If

'contrôle pour essai 3         
                         If IsEmpty(.Cells(i, 6).Value) = False Then

                                If IsEmpty(.Cells(j, 6).Value) = False Then
                                 WshComp.Cells(i, 7).Value = "OUI"
                                 Else
                                 WshComp.Cells(i, 7).Value = "NON"

                              End If
                             End If
ContinueForLoop:

                               Else
                              WshComp.Cells(i, 4).Value = "NON réalisé"

                        End If

                      End If

                     Next j
                     End With
               Next i
      End With

End Sub

J'ai essayer avec ce code , en se servant un peu de ton code , mais ca ne marche pas , il y a certainement une logique que j'ai raté dans le code :

12test.xlsm (23.42 Ko)

Bonjour Hafsa Pro, le forum,

Dans ton exemple, la désignation des données PK, de la feuille Data, n’est pas assez explicite pour trouver la même donnée sur la feuille Labo (ou je n’ai pas compris). Exemple : Comment déterminer que la ligne 2 de la colonne A de la feuille Data mentionnant « 2300 », correspond à la ligne 4 ou à la ligne 10 de la colonne A de la feuille Labo ?

Sur le fichier ci-joint, sur la feuille Explications, j’ai regroupé les 2 feuilles, et mentionner les diverses possibilités à l’aide de flèches.

Je pense que tu devras passer par l’utilisation de tableaux internes (arrays) pour diminuer le temps d’exécution des macros.

Cordialement,

Bernard

17test-v2.xlsm (21.67 Ko)

Bonjour,

Si on prend la feuille "explications" que tu as ajouté : Pour la ligne 3 colonne A = 2300 je veux que le code me cherche cette valeur dans l'autre tableau alors il va trouver deux cellules dans la colonne H qui ont cette valeur : ligne 4 ou ligne 10 , pour savoir quelle ligne :

Lorsque excel arrive à la ligne 4 colonne H il doit comparer est ce que cet échantillon PK 2300 a été réalisé dans la plage des profondeurs indiqués donc il doit passer à la (colonne I , ligne 4)= 7 et voir est ce que (colonne B, ligne 3) = 1.5 < (colonne I , ligne 4)=7 < (colonne C , ligne 3)= 3 ; Non du coup il ne s'agit pas de la ligne 4 du tableau Labo , il passe vers les lignes suivantes il trouve aussi 2300 dans la ligne 10 , il doit donc au même temps en trouvant la valeur s'assurer que (colonne B, ligne 3) = 1.5 < (colonne I , ligne 10)= 2 < (colonne C , ligne 3)= 3 : Condition VERIFIEE donc il s'agit DE CETTE ligne .

Donc la ligne 3 de tableau data correspond à la ligne 10 tableau labo : l'échantillon est REALISE (Il va écrire ce résultat dans la ligne 18 colonne D = "REALISE" du tableau "Comparaison ) = (Réellement le tableau "comparaison" se trouve dans une autre feuille) .

Après puisque c'est réalisé il passe à la colonne D ligne 3 , case non vide donc Essai 1 est demandé => voir dans colonne K ligne 10 : case non vide donc essai 1 réalisé => Ecrire "OUI" dans colonne E ligne 18 , passer à la colonne E , ligne 3 : case vide donc essai 2 non demandé donc ne fait rien , passer colonne F, ligne 3 : case non vide : essai demandé donc voir dans colonne M, ligne 10 => case vide => Essai non réalisé => Ecrire "NON" dans la colonne G , ligne 18 .

Voir aussi le fichier excel

15test-v2.xlsm (24.33 Ko)

dans feuille explications

J'espère que j'ai bien expliqué , et que cela est possible avec VBA :D

Merci et Bonne journée

24test-v2-final.xlsm (31.14 Ko)

Bonjour ,

Voici le fichier après que j'ai ajouté une autre feuille "explication 2 " pour mieux expliquer l'algorithme que je souhaite réaliser :).

Bon weekend à tous

Bonjour Hafsa Pro, le forum,

Un essai à tester. J’ai effectué les modifications suivantes :

Les colonnes B et C des feuilles Data, Labo, et Comparaison sont au format Nombre avec une décimale,

Aucun zéro dans les feuilles Data et Labo.

Pour les comparaisons, on pourrait remplacer la condition de cellule vide par le chiffre 1.

Sur la feuille Comparaison, j’ai mis une remarque, car le code ne donne pas le résultat escompté pour le 2ème essai concernant PK 1200.

Cordialement,

Bernard

23test-v2-final.xlsm (46.10 Ko)

Merci beaucoup , c'est ce que je cherche exactement. ^^

Rechercher des sujets similaires à "creer tableau suite resultat comparaison tableaux separes"