BUG sur ma macro

romss82

XLDnaute Nouveau
bonjour j'ai un Bug sur ma macro,

elle ne prend pas en compte les deux condition que je lui demande

je suis vraiment novice et je n'arrive pas à trouver la solution

pouvez m'aider

ci-dessous la partie qui me pose problème

'-------------------------------------------------------------------
' present dans mecano gedix (feuille 5)pas dans kardex
'-------------------------------------------------------------------
l2 = 2: ' ligne de départ dans feuille "
For Each cle In tab_gedix
If tab_mecano.exists(cle) = True And tab_kardex.exists(cle) = False Then
l1 = tab_gedix(cle) ' recupère la ligne dans gedix
For b = 1 To 5 ' nombre de colonne dans gedix
Sheets("pas dans kardex").Cells(l2, b) = Sheets("gedix").Cells(l1, b)
Next
l2 = l2 + 1
End If
Next
 

romss82

XLDnaute Nouveau
bonjour en effet je n'ai pas préciser c'est sur la ligne For Each cle In tab_gedix
If tab_mecano.exists(cle) = True And tab_kardex.exists(cle) = False Then

d'après ce que je peux comprendre elle ne prends pas en compte les deux conditions.

ci dessous ma macro complète:
Sub lecture()
' lecture des références
Dim tab_kardex
Set tab_kardex = CreateObject("scripting.dictionary")
Dim tab_mecano
Set tab_mecano = CreateObject("scripting.dictionary")
Dim tab_gedix
Set tab_gedix = CreateObject("scripting.dictionary")

'-------------------------------------------------------------------
With Sheets("kardex")
row_min = .UsedRange.Row
row_max = row_min + .UsedRange.Rows.Count - 1
For l = 2 To row_max
tab_kardex(UCase(Trim(.Cells(l, 1)))) = l
Next
End With
'-------------------------------------------------------------------
With Sheets("mecano")
row_min = .UsedRange.Row
row_max = row_min + .UsedRange.Rows.Count - 1
For l = 2 To row_max
tab_mecano(UCase(Trim(.Cells(l, 1)))) = l
Next
End With
'-------------------------------------------------------------------
With Sheets("gedix")
row_min = .UsedRange.Row
row_max = row_min + .UsedRange.Rows.Count - 1
For l = 2 To row_max
tab_gedix(UCase(Trim(.Cells(l, 1)))) = l
Next
End With
'-------------------------------------------------------------------


'-------------------------------------------------------------------
' present dans kardex mecano gedix (feuille 3)donc ok
' recopie gedix en OK
'-------------------------------------------------------------------
l2 = 2: ' ligne de départ dans feuille "
For Each cle In tab_kardex
If tab_mecano.exists(cle) = True And tab_gedix.exists(cle) = True Then
l1 = tab_gedix(cle) ' recupère la ligne dans gedix
For b = 1 To 5 ' nombre de colonne dans gedix
Sheets("ok").Cells(l2, b) = Sheets("gedix").Cells(l1, b)
Next
l2 = l2 + 1
End If
Next
'-------------------------------------------------------------------
' present dans mecano gedix (feuille 5)pas dans kardex
'-------------------------------------------------------------------
l2 = 2: ' ligne de départ dans feuille "
For Each cle In tab_gedix
If tab_mecano.exists(cle) = True And tab_kardex.exists(cle) = False Then
l1 = tab_gedix(cle) ' recupère la ligne dans gedix
For b = 1 To 5 ' nombre de colonne dans gedix
Sheets("pas dans kardex").Cells(l2, b) = Sheets("gedix").Cells(l1, b)
Next
l2 = l2 + 1
End If
Next
'-------------------------------------------------------------------
' present dans mecano et kardex mais pas dans gedix
'-------------------------------------------------------------------
l2 = 2: ' ligne de départ dans feuille "
For Each cle In tab_mecano
If tab_kardex.exists(cle) = True And tab_gedix.exists(cle) = False Then
l1 = tab_mecano(cle) ' recupère la ligne dans mecano
For b = 1 To 9 ' nombre de colonne dans mecano
Sheets("a créer dans gedix").Cells(l2, b) = Sheets("mecano").Cells(l1, b)
Next
l2 = l2 + 1
End If
Next

'-------------------------------------------------------------------
' present dans gedix et kardex mais pas mecano
'-------------------------------------------------------------------
l2 = 2: ' ligne de départ dans feuille "
For Each cle In tab_gedix
If tab_kardex.exists(cle) = True And tab_mecano.exists(cle) = False Then
l1 = tab_gedix(cle) ' recupère la ligne dans gedix
For b = 1 To 5 ' nombre de colonne dans gedix
Sheets("a créer dans mecano").Cells(l2, b) = Sheets("gedix").Cells(l1, b)
Next
l2 = l2 + 1
End If
Next

'-------------------------------------------------------------------
' present dans mecano mais pas gedix
'-------------------------------------------------------------------
l2 = 2: ' ligne de départ dans feuille "
For Each cle In tab_mecano
If tab_gedix.exists(cle) = False Then
l1 = tab_mecano(cle) ' recupère la ligne dans mecano
For b = 1 To 9 ' nombre de colonne dans mecano
Sheets("mecano mais pas gedix").Cells(l2, b) = Sheets("mecano").Cells(l1, b)
Next
l2 = l2 + 1
End If
Next

'-------------------------------------------------------------------
' present dans mecano mais pas kardex
'-------------------------------------------------------------------
l2 = 2: ' ligne de départ dans feuille "
For Each cle In tab_mecano
If tab_kardex.exists(cle) = False Then
l1 = tab_mecano(cle) ' recupère la ligne dans mecano
For b = 1 To 9 ' nombre de colonne dans mecano
Sheets("mecano mais pas kardex").Cells(l2, b) = Sheets("mecano").Cells(l1, b)
Next
l2 = l2 + 1
End If
Next

'-------------------------------------------------------------------
' present dans gedix mais pas kardex
'-------------------------------------------------------------------
l2 = 2: ' ligne de départ dans feuille "
For Each cle In tab_gedix
If tab_kardex.exists(cle) = False Then
l1 = tab_gedix(cle) ' recupère la ligne dans gedix
For b = 1 To 4 ' nombre de colonne dans gedix
Sheets("gedix mais pas kardex").Cells(l2, b) = Sheets("gedix").Cells(l1, b)
Next
l2 = l2 + 1
End If
Next
End Sub

et en pièce joints le fichier complet.
merci d'avance
 

Pièces jointes

  • export mecano.xlsm
    1.9 MB · Affichages: 77

Roland_M

XLDnaute Barbatruc
Bonjour,

j'ai exécuté la macro et il ne s'est rien passé !? pas de bug !?

'commences déjà par déclarer tes variables en tête du module !
Dim L&, I&, I1&, I2&, Row_Min&, Row_Max& ' ... voir idem s'il y en a d'autres !?
Dim Cle As Variant
 
Dernière édition:

romss82

XLDnaute Nouveau
bonjour Roland_M,
en fait la Macro fonctionne sans souci le problème c'est qu'elle ne me sort pas le bon résultat

normalement pour la ligne
For Each cle In tab_gedix
If tab_mecano.exists(cle) = True And tab_kardex.exists(cle) = False Then

on est bien d'accord qu'elle doit vérifier si ce qui est trouvé dans la table GEDIX et bien présente dans mecano et inconnu dans kardex.

mais comme je ne connais pas grand chose au macro je ne sais pas si c'est réellement le cas.

en tout cas le résultat qui en ressort me démontre que ce que je suppose être juste ne l'ai pas.
 
C

Compte Supprimé 979

Guest
Bonjour romss82

Tu nous dis :
en fait la Macro fonctionne sans souci le problème c'est qu'elle ne me sort pas le bon résultat
Ok, mais quel résultat attends-tu !?

normalement pour la ligne
For Each cle In tab_gedix
If tab_mecano.exists(cle) = True And tab_kardex.exists(cle) = False Then
on est bien d'accord qu'elle doit vérifier si ce qui est trouvé dans la table GEDIX et bien présente dans mecano et inconnu dans kardex.
C'est bien ça ;-)

Peut-être un exemple de ce que tu attends ?

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 412
Messages
2 088 196
Membres
103 763
dernier inscrit
p.michaux