Comparaison de cellules, et probleme de méthodologie de developpement

handek94

XLDnaute Nouveau
Bonjour

Je suis débutant en Excel et VBA.
Mon problème est assez difficile à expliquer, mais je vais tenter de faire au mieux.
Pour simplifier les choses, j'ai un fichier excel avec deux onglets.
Dans les onglets on peut trouver quelque chose comme ca :

HTML:
  Num secu                      Salaire
1028806015                      1200
1098046065                      2632
1587609809                      3620 
1870906878                      1450

La plupart des numéros de sécu sont les mêmes dans les deux onglets, mais pas dans le même ordre.
Je dois, à chaque fois que je trouve un numéro de sécu identique, calculer l'écart de salaire (la différence entre les salaires).

J'ai commencé simple, en faisant une macro, qui compart chaque numéro de secu du premier onglet avec tous ceux du deuxieme onglet.
Et le problème, c'est que mes deux onglets ont 54.000 ligne, et l'autre 63.000, ce qui fait que le temps d'execution est abérant si je dois comparer chaque cellule une par une.


Voilà la macro que j'ai commencé à developpé (Pour les 100 premières lignes car plus on augmente, plus le temps d'execution est long) :


Code:
Private Sub CommandButton1_Click()
Dim i, j As Long
Dim nbEg As Integer

nbEg = 1
i = 3
j = 3

Do While j <> 100

    i = 3
    Do While Feuil4.Cells(j, 1).Value <> Feuil1.Cells(i, 2).Value And Feuil4.Cells(j, 1).Value <> "" And Feuil1.Cells(i, 2).Value <> ""
        i = i + 1
    Loop
    
    
    If Feuil4.Cells(j, 1).Value = Feuil1.Cells(i, 2).Value Then
        nbEg = nbEg + 1
    End If
    
    j = j + 1

Loop


    MsgBox "Parmi les 100 premier num de secu : " & nbEg & " sont égaux"

End Sub


Je sollicite donc tous ceux qui aurait une idée à me proposer, un algorithme plus performant que le mien par exemple, et qui me permette de traiter ce très gros fichier avec un temps d'execution plus respectable.

Merci d'avance.
 

pierrejean

XLDnaute Barbatruc
Re : Comparaison de cellules, et probleme de méthodologie de developpement

Bonjour handek94

Et bienvenue sur XLD

Peux-tu poster un fichier exemple ( une dizaine de lignes par feuille est suffisant) avec des données anonymes ??
Cela nous evitera de partir sur de fausses pistes
 

tbft

XLDnaute Accro
Re : Comparaison de cellules, et probleme de méthodologie de developpement

Bonjour

Perso quand je traite des données comme ça, je passe par des tableaux

table1=worksheet("Feuil1").usedrange.value
table2=worksheet("Feuil2").usedrange.value

j'ai remarqué que le travail était plus rapide

Mais comme le dit pierrejean: un fichier ne serait pas de trop (avec des données bidons)...
 

jp14

XLDnaute Barbatruc
Re : Comparaison de cellules, et probleme de méthodologie de developpement

Bonjour
Salut PierreJean

Il est préférable d'utiliser les fonctions intégrés à Excel, en particulier "Find" pour rechercher la valeur dans le deuxième tableau.

JP
 

handek94

XLDnaute Nouveau
Re : Comparaison de cellules, et probleme de méthodologie de developpement

J'ai repris quelques lignes de mon fichier, en modifiant bien evidemment les valeurs, qui sont dans mon cas confidentiels.
J'ai de plus supprimé les autres colonnes inutilisé.
Tout celà sur 54.000 et 63.000 ligne
 

Pièces jointes

  • exemple.xls
    16 KB · Affichages: 42
  • exemple.xls
    16 KB · Affichages: 48
  • exemple.xls
    16 KB · Affichages: 45

JNP

XLDnaute Barbatruc
Re : Comparaison de cellules, et probleme de méthodologie de developpement

Bonjour le fil :),
Pourquoi pas en A4
Code:
=SI(NB.SI(Feuil2!$A$2:$A$65000;Feuil1!B4)>0;INDEX(Feuil2!$B$2:$B$65000;EQUIV(Feuil1!B4;Feuil2!$A$2:$A$65000;0));"")
à glisser vers le bas, et une MFC pour vérifier si le salaire ramené est le même :rolleyes: ?
Bonne suite :cool:
 

jp14

XLDnaute Barbatruc
Re : Comparaison de cellules, et probleme de méthodologie de developpement

Bonjour le Fil


Ci dessous un code à tester.
Attention les numéro de sécurité sociale doivent être des nombres.
Code:
Sub travdem()
Dim Cellule As Range
Dim Nomfeuille1 As String
Dim Nomfeuille2 As String
Dim Col As String
Dim c As Variant
'parametre
' pour boucler sur la colonne 1
Nomfeuille1 = "Feuil1"
Nomfeuille2 = "Feuil2"
Col = "b"


For Each Cellule In Sheets(Nomfeuille1).Range(Col & "2:" & Col & Sheets(Nomfeuille1).Range(Col & Sheets(Nomfeuille1).Rows.Count).End(xlUp).Row)
    If Cellule <> "" Then
    
    With Worksheets(Nomfeuille2).Range("a1:a" & Worksheets(Nomfeuille2).Range("b" & Worksheets(Nomfeuille2).Rows.Count).End(xlUp).Row)
    Set c = .Find(Cellule.Value, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns)
    If Not c Is Nothing Then
    Call MsgBox("Salaire 1 :" & Cellule.Offset(0, 2).Value _
                & vbCrLf & "Salaire2 :" & c.Offset(0, 1).Value _
                , vbExclamation, Application.Name)
    
    End If
    'a = c.Value
End With

End If
Next Cellule


End Sub


A tester

JP
 

jp14

XLDnaute Barbatruc
Re : Comparaison de cellules, et probleme de méthodologie de developpement

Bonsoir

Quand on appelle une procédure on met "call" devant le nom si les paramètres à passer sont entre des parenthèses.
On peut donc écrire
Code:
MsgBox "c wwxc", vbExclamation, Application.Name
ou
Code:
Call MsgBox("c wwxc", vbExclamation, Application.Name)


JP
 

Discussions similaires

Réponses
0
Affichages
154
Réponses
16
Affichages
1 K