Comparaison automatique de 2 feuilles

koewin

XLDnaute Junior
bonjour,

J'ai un tableau avec 4 feuilles :
  • un inventaire a un jour donné (Inventaire)
  • une liste de matériel normalement présent (Matériel)
  • les non pointés (non pointé)
  • les manquants (A renseigner)

J'aimerai comparer les chiffres correspondants au code barre de mes matériels dans les 2 première feuilles (Inventaire et Materiel).

Si le code barre est présent dans les 2 -> ne rien faire
Si CB présent dans Inventaire et pas dans Matériel -> copier infos dans "A renseigner"
Si CB présent dans Matériel et pas dans Inventaire -> copier infos dans "non pointé"

Qui pourrait m'aider à faire un petit bouton sur la 1ère feuille qui me fait tout ça automatiquement ?

Je vous joins un fichier exemple de ce que je voudrais à la fin.

Merci d'avance.de votre aide.

Cdt.

koewin
 

Pièces jointes

  • tri inventaire.xls
    19 KB · Affichages: 108
  • tri inventaire.xls
    19 KB · Affichages: 110
  • tri inventaire.xls
    19 KB · Affichages: 122

pierrejean

XLDnaute Barbatruc
Re : Comparaison automatique de 2 feuilles

Re

Non la reference ne m'a pas froissée puisqu'il ne s'agit pas d'un code de mon cru
Elle pourrait par contre legitimement froisser JB
Ceci dit , je n'ai aucune animosité envers Efgé qui se sert aux bonnes sources mais doit encore apprendre quelques finesses d'adaptation
Quant a l'inspiration d'autres personnes j'y ai bien entendu recours comme nous tous et je crois que c'est l'esprit de ce forum
 

tototiti2008

XLDnaute Barbatruc
Re : Comparaison automatique de 2 feuilles

Re,

@PierreJean

par contre je ne peux toujours pas ouvrir les zip et j'aurais aimé pouvoir consulter ta version pour comprendre pourquoi elle est 2 fois plus rapide que celle de Bebere et la mienne

Pourrais-tu poster le code ? ou en MP sinon...

Merci
 

pierrejean

XLDnaute Barbatruc
Re : Comparaison automatique de 2 feuilles

Re

Pas de problème , la voici

Je presume que c'est l'utilisation de tableaux qui permet ce leger gain de vitesse
Sinon l'esprit est le meme

Code:
Sub compare()
debut = Timer
Sheets("A renseigner").Range("A2:C65536").ClearContents
Sheets("Non pointé").Range("A2:C65536").ClearContents
ligne = 2
ligne1 = 2
tableau1 = Sheets("Inventaire").Range("A2:C" & Sheets("Inventaire").Range("A65536").End(xlUp).Row)
tableau2 = Sheets("Materiel").Range("A2:C" & Sheets("Materiel").Range("A65536").End(xlUp).Row)
For n = LBound(tableau1, 1) To UBound(tableau1, 1)
  For m = LBound(tableau2, 1) To UBound(tableau2, 1)
     If tableau1(n, 1) = tableau2(m, 1) Then
        ok = True
        Exit For
     End If
  Next m
  If ok Then
    ok = False
  Else
  Sheets("A renseigner").Cells(ligne, 1) = tableau1(n, 1)
  Sheets("A renseigner").Cells(ligne, 2) = tableau1(n, 2)
  Sheets("A renseigner").Cells(ligne, 3) = tableau1(n, 3)
  ligne = ligne + 1
  End If
Next n
For n = LBound(tableau2, 1) To UBound(tableau2, 1)
  For m = LBound(tableau1, 1) To UBound(tableau1, 1)
     If tableau2(n, 1) = tableau1(m, 1) Then
        ok = True
        Exit For
     End If
  Next m
  If ok Then
    ok = False
  Else
  Sheets("Non pointé").Cells(ligne1, 1) = tableau2(n, 1)
  Sheets("Non pointé").Cells(ligne1, 2) = tableau2(n, 2)
  Sheets("Non pointé").Cells(ligne1, 3) = tableau2(n, 3)
  ligne1 = ligne1 + 1
  End If
Next n
MsgBox (Timer - debut)
End Sub
 

Efgé

XLDnaute Barbatruc
Re : Comparaison automatique de 2 feuilles

Re à tous, tototiti2008, Pierrejean,
Je ne pensais pas que ma contribution puisse porter à tel débat :eek:
Ceci dit , je n'ai aucune animosité envers Efgé qui se sert aux bonnes sources mais doit encore apprendre quelques finesses d'adaptation
Je suis tout à fait d'accord sur le fait qu'il me reste encore beaucoup à apprendre, et heureusement qu'il m'est possible de cotoyer des professeurs tels que vous. (je suis particulièrement sérieux sur ce point... .... C'est quand même vous, Pierrejean, qui m'avez appris l'utilisation des boucles Ici)

Elle pourrait par contre legitimement froisser JB

Si j'ai cité Mr Boisgontier c'est uniquement pour respecter un principe du forum : Le respect du aux créateurs de codes. Tous le monde utilise les codes mis en ligne, mais il me parait plus honnête de signaler l'origine des codes proposés.

Maintenant je vais expliquer ma démarche:
Ma première idée était d'utiliser le code en multipliant les copies de valeurs de cellules, mais j'ai pensé (à première vue a tort) que l'exemple proposé n'était... ...qu'un exemple et que si le nombre de colonne se multipliait la macro deviendrait vite ingérable; d'où mon idée de copie de la ligne entière.

Sur ce :
Bon, l'insertion de ligne est de trop, je suis d'accord, un coller aurait largement suffit ;)
Avec tous mes respects pour les contributions dont vous nous faites "cadeau" et en espérant avoir appris quelque chose de ce fil,
Très Cordialement
Fred
 

Bebere

XLDnaute Barbatruc
Re : Comparaison automatique de 2 feuilles

bonjour à tous

en reprenant le code de Pierre Jean
tout se fait en tableaux avec redim preserve et transpose avant d'écrire dans les 2 feuilles
les lignes sont en colonnes pour pouvoir ajouter

à bientôt
 

Pièces jointes

  • tri inventaire.zip
    15.3 KB · Affichages: 44
  • tri inventaire.zip
    15.3 KB · Affichages: 22
  • tri inventaire.zip
    15.3 KB · Affichages: 26

david84

XLDnaute Barbatruc
Re : Comparaison automatique de 2 feuilles

Bonjour à tous,
une petite question en passant : comment fait-on pour mesurer la vitesse de déroulement d'une macro ?
Est-ce uniquement possible avec le VBA ou est-ce aussi possible avec une formule ?
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Comparaison automatique de 2 feuilles

Bonjour,

0,56s pour 10.000 lignes

Code:
Sub ARenseigner()
  Application.ScreenUpdating = False
  Set f1 = Sheets("Inventaire")
  Set f2 = Sheets("Materiel")
  a = f2.Range("A1").CurrentRegion.Value
  b = f1.Range("A1").CurrentRegion.Value
  Set MonDico1 = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(a): MonDico1(a(i, 1)) = 1: Next i
  ligne = 1
  Dim c
  ReDim c(1 To Application.Max(UBound(a), UBound(b)), 1 To UBound(a, 2))
  For i = 1 To UBound(b)
    If Not MonDico1.exists(b(i, 1)) Then
      For k = 1 To UBound(b, 2): c(ligne, k) = b(i, k): Next k
      ligne = ligne + 1
    End If
  Next
  Sheets("A renseigner").[A2].Resize(UBound(a, 1), UBound(a, 2)) = c
End Sub

JB
 

Pièces jointes

  • Copie de tri inventaire.zip
    14.5 KB · Affichages: 31

tototiti2008

XLDnaute Barbatruc
Re : Comparaison automatique de 2 feuilles

Bonjour à tous,

Merci à PierreJean pour le code, j'étais parti sur des tableaux au début, mais un peu flemmard je me suis dit que finalement tout était dans les cellules... intéressant de savoir que c'est plus rapide

BOISGONTIER, tu vas finir par me convaincre de jetter sérieusement un oeil aux dictionnaires ;)
 

Discussions similaires

Réponses
15
Affichages
791
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11