Comparer deux colonnes sur deux feuilles

Comparer deux colonnes sur deux feuilles - VB/VBA/VBS - Programmation

Marsh Posté le 28-07-2014 à 14:28:17    

Bonjour,
 
après avoir parcouru quelques sujets similaires, je ne trouve pas réponse à mon soucis:
 
J'aimerais comparer deux colonnes de deux feuilles, pour mettre oui ou non selon résultat dans une autre colonne.
 

Code :
  1. Sub ComparerN°Inv2()
  2. Dim I As Single
  3. Dim J As Single
  4. For I = 1 To Worksheets("EXTRACTION" ).Range("B2" ).End(xlDown).Row
  5. For J = 1 To Worksheets("A ENLEVER" ).Range("A1" ).End(xlDown).Row
  6. If I.Value = J.Value Then
  7. Worksheets("EXTRACTION" ).Cells(I, 10).Value = "Oui"
  8. Else: Worksheets("EXTRACTION" ).Cells(I, 10).Value = "Non"
  9. End If
  10. Next I
  11. End Sub


 
Excusez le caractère brouillon de la chose...
 
Merci!

Reply

Marsh Posté le 28-07-2014 à 14:28:17   

Reply

Marsh Posté le 28-07-2014 à 14:51:28    

Oh mais pourquoi tu écris du code pour faire ça ?? C'est déjà ce que fait la fonction VLOOKUP (ou RECHERCHEV en français)

Reply

Marsh Posté le 28-07-2014 à 14:53:36    

Parce que je viens ramener régulièrement un nouvel onglet Extraction issu de SAP :)
 
et je veux automatiser le truc car les futurs utilisateurs ne sont pas capables de manipuler l'ensemble du fichier (qui bien sur ne comporte pas seulement cette petite maccro)
 
:D

Reply

Marsh Posté le 28-07-2014 à 16:45:37    

Il manque un

Next J.


 
Edit : Et au lieu de

If I.Value = J.Value Then


avoir


Set sheet1 = ThisWorkbook.Sheets("Nom_de_la_feuille" )
...
If (sheet1.Cells(i, 2) = sheet1.Cells(j, 1)) Then


 
Edit2 :
Et les boucles For I = 1 ... For J = 1 ... me paraissent étranges.
Je ferais plutôt :

Set sheet1 = ThisWorkbook.Sheets("Nom_de_la_feuille 1" )
Set sheet2 = ThisWorkbook.Sheets("Nom_de_la_feuille 2" )
Ecol_no = 2
Erow_no = 2
Do While Not IsEmpty(Sheet1.Cells(Erow_no, Ecol_no).Value)
   Acol_no = 1
   Arow_no = 1
   flag_found = "N"
   Do While Not IsEmpty(Sheet2.Cells(Arow_no, Acol_no).Value)
      If (sheet1.Cells(i, 2).Value = sheet2.Cells(j, 1).Value) Then
         flag_found = "Y"
         Exit Loop
      End If
      Arow_no = Arow_no + 1
   Loop
   If (flag_found = "N" ) Then
      Worksheets("EXTRACTION" ).Cells(Erow_no, 10).Value = "Oui"
      Else: Worksheets("EXTRACTION" ).Cells(Erow_no, 10).Value = "Non"
   End If
   Erow_no = Erow_no + 1
Loop


Message édité par olivthill le 28-07-2014 à 17:09:20
Reply

Marsh Posté le 28-07-2014 à 18:35:45    

 
            :non:  Pas de cross posting sauvage ‼
 
           Voir ici
 

Reply

Marsh Posté le 29-07-2014 à 09:25:05    

Olivthill, ça me met erreur de synthaxe sur Exit Loop ?
 
Marc L, sujet trop long et Nico Chg plus dispo pour répondre ;)

Reply

Marsh Posté le 29-07-2014 à 11:30:55    

Désolé, c'est un Exit Do qu'il faut avoir.


Message édité par olivthill le 29-07-2014 à 11:31:14
Reply

Marsh Posté le 29-07-2014 à 16:42:45    

Merci. Par contre, maintenant il y a un bloquant : erreur d'exécution à la ligne :
 

Code :
  1. If (sheet1.Cells(i, 2).Value = sheet2.Cells(j, 1).Value) Then


 
 
 

Reply

Marsh Posté le 29-07-2014 à 20:07:38    

Oh, c'est encore pas grand chose, juste remplacer i et j par les indices idoines.
 
If (sheet1.Cells(Arow_no, 2).Value = sheet2.Cells(Erow_no, 1).Value) Then

Reply

Marsh Posté le 30-07-2014 à 10:54:07    

Je n'ai plus d'erreur, mais le oui/non ne marche pas, je n'ai que deux non dans la liste (et je me demande d'ailleurs pourquoi ces deux là)
 
Après je pense qu'il y a une histoire de format entre les colonnes comparée.
 
Un extrait de la liste A ENLEVER que je compare avec l'onglet Extraction :
 
9AUTO
9MONT
BAT GARAG1
BAT GARAG2
BAT%
BATGLORIA
BAUTO
CAUTO
CHAUFAUT
CHAUFAUTO
DAUTO
EAUX
EBAT%
ECOND%
EFABR%
 
Le % indique qu'il ya quelque chose après et le format est standard.
 
Le format par defaut de l'onget EXTRACTION est texte.
 
J'espère être plus claire :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed