Extraire la différence de deux listes
Bonjour tous le monde,
Voici mon premier POST sur le forum en espérant que celui-ci soit aussi explicite que possible.
Alors le problème principal est : IMPOSSIBLE d'extraire la différence entre deux colonnes lorsque le nombre de valeur et trop importante (une colonne de 2500 lignes et une deuxième colonne avec 2000 lignes) EXCEL PLANTE
Avec des colonnes de plus petite taille, la macro fonctionne très bien
Lorsque je teste mon programme avec moins de valeur à calculer la macro ne plante pas
Actuellement je travaille dans l'aéronautique et je dois extraire la différence la valeur des cellules différente entre deux colonne.
Je reprend la logique avec vous pour que vous puissiez me guider :
Col 1Col 2
AA
BC
DE
FF
ED
ZX
Le résultat me donne :
Dif 1 vers 2Dif 2 vers 1
BC
ZX
Jusque la tout fonctionne mais le "DRAME" se produit lorsque la quantité d'information grandi (2500 ligne comparé à 200 ligne). Avant tout chose j'ai déjà trié les 2 colonne pour une recherche plus facile des différence.
Donc j'ai le classeur qui s'appelle ELA
Un feuille avec la liste 1 qui s'appelle ALL_MOD1
Un feuille avec la liste 2 qui s'appelle ALL_MOD2
Et l'extraction dans une feuille que s'appelle DELTA
(Les valeurs se situe bien sur dans la colonne A et sont déjà trié)
Et voici le code :aie: :mouarf: :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
Sub Compare70()
'déclaration des variables
Dim VAL71, POS71, VAL72, POS72, POS73 As Integer
'activation de la feuille de macro
Workbooks("ELA.xls").Activate
'valeur de base des positionnement des ligne (elles s'incrémentent petit a petit)
POS71 = 1
POS72 = 1
POS73 = 2
'récupération de la valeur de la premiere cellule de la premiere colonne
Sheets("ALL_MOD1").Activate
VAL71 = Cells(POS71, 1).Text
'récupération de la valeur de la premiere cellule de la deuxiéme colonne
Sheets("ALL_MOD2").Activate
VAL72 = Cells(POS72, 1).Text
'boucle qui vérifie si la cellule a la position POS71 de la collone 1 est vide, si c'est vrai on sort de la boucle
Sheets("ALL_MOD1").Activate
While Not IsEmpty(Cells(POS71, 1))
'Dé-activations du refresh
Application.ScreenUpdating = False
'While POS71 < 10
'boucle qui vérifie si la cellule a la position POS72 de la collone 2 est vide, si c'est vrai on sort de la boucle
Sheets("ALL_MOD2").Activate
While Not IsEmpty(Cells(POS72, 1))
'While POS72 < 2500
' cette boulce verifi la val de la col 1 avec val de la col 2, si egale on passe a la cellule suivante de col 1
' sinon on passe a la valeur suivant dans col 2
' si on ne trouve pas la mod de col 1 dans col 2 on ecris cette valeur dans une autre feuille
If VAL71 = VAL72 Then
'Si la cellule de la col 1 = la cellule de col 2 on incrémente est on passe a la cellulre suivant de la col 1
POS71 = POS71 + 1
Sheets("ALL_MOD1").Activate
VAL71 = Cells(POS71, 1).Text
' on repasse la position de le colonne 2 a 1 pour re vérifier dans l'ordre
POS72 = 1
Else
' si les cellules sont différence on incremente les ligne de la col2
POS72 = POS72 + 1
Sheets("ALL_MOD2").Activate
VAL72 = Cells(POS72, 1).Text
End If
'Else
Sheets("ALL_MOD2").Activate
VAL72 = Cells(POS72, 1).Text
'End If
Wend
'la mod de col 1 dans col 2 est introuvable on ecris cette valeur dans une autre feuille, la feuille DELTA
Sheets("DELTA").Select
Cells(POS73, 1).Value = VAL71
VAL73 = Cells(POS73, 4).Text
POS73 = POS73 + 1
POS71 = POS71 + 1
Sheets("ALL_MOD1").Select
VAL71 = Cells(POS71, 1).Text
Sheets("ALL_MOD1").Select
If Not IsEmpty(Cells(POS71, 1)) Then
POS72 = 1
Sheets("ALL_MOD2").Activate
VAL72 = Cells(POS72, 1).Text
Sheets("ALL_MOD1").Select
VAL71 = Cells(POS71, 1).Text
End If
Sheets("ALL_MOD1").Select
VAL71 = Cells(POS71, 1).Text
'Ré-sactive la mise à jour de l'affichage
Application.ScreenUpdating = True
'Wend
'POS71 = POS71 + 1
Wend
End Sub |
Merci pour vos suggestionsssss et vos remarquesssss. Je suis preneur de toutes les propositions même les plus simples qui pourrais améliorer mon code ^^ !
Voila vous savez tout, j'ai lâché mon code dans l'arène :ccool:
1 pièce(s) jointe(s)
Re: identifier les données d'une liste via 2 critéres (critére d'une plage et critére fixe)
Bonjour,
je me permet de solliciter à nouveau votre savoir et votre temps :mouarf: !
Je suis toujours dans mes listes de nombre :) et dans le même principe mais je n'y arrive pas :( !(en utilisant le même code mais modifié)
ACCROCHE-VOUS ! Il me semble qu'a comprendre cela n'est pas simple mais à réaliser (pour vous) c'est simple :) !
Le but est : Comparer dans une liste (LISTE 1, comprenant plusieurs colonne de données) si les nombre d'un autres liste (LISTE 2, 1 seule colonne) sont pressant et savoir si les nombre de la liste 1 on été validé (un colonne comportant un 1 ou un 0)
Par exemple:
Donnée d'entrée LISTE 1 :
Une liste qui comporte de nombreuses colonnes, dont une colonne comprenant les nombres et une colonne comprenant un "1" ou un "0" (code de validation).
Donnée d'entrée LISTE 2 :
Une liste de nombre dans une seule colonne.
Résultat:
Écrire sur une feuille les Nombres de la LISTE 2 (les nombres a rechercher) avec en face de chaque nombre 2 Colonnes :
Une Colonne pour savoir si le nombre est dans la liste 1 ou non (1 ou 0)
Une autres Colonne pour savoir si le nombre est dans la LISTE 1 et qu'il est été validé (1 ou 0).
J'espère avoir été clair ! NON, je déconne c'est trop bizarre à comprendre pour être plus explicite je joint un fichier qui explique cela.(TEST1, un feuille d'explication, 2 feuille d'entrée, et une feuille RÉSULTAT, qui devrais me donner ce que je veux mais qui ne veux pas :( )
Je croit que je suis nul :cry:, car je n'arrive pas a adapter le code de HERVE (qui pourtant est simple et efficace)
Merci par avance,
:ccool: