OVH Cloud OVH Cloud

pb bizzar sur macro

1 réponse
Avatar
Romaric
Bonjour a tous,
Je suis confronter a un tric bizarre sur une macro. Si quelqu’un a une idée,
ça me sauve :

Dans un tableau « produce » ici [U9 :U18] je rentre des références (qui
peuvent être identique sur plusieurs ligne. Je voudrai en lançant la macro
les transférer dans un tableau a deux colonnes : référence et quantité : ici
[Q26 :R100]. Si la référence n’existai pas encore, elle se rajoute et la
quantité 1 apparaît si elle existai : +1 s’ajoute a la quantité existante.
La macro si dessous semble marcher mais par un grand mystère, si une
référence était dans mon tableau initial [U9 :U18] a plusieurs reprises et
n’existait pas dans mon tableau [référence, quantité], alors au lieu de crée
la référence la première fois et d’ajouter 1 en quantité au chaque foi
suivante, la référence se rajoute (se créé) plusieurs fois dans le tableau.
Or ce n’est pas ce que je veux. Je comprend pas pourquoi ! merci pour voa
aide precedente! ca sauve!

On Error Resume Next
For produce_line = 9 To 18
produce_cell = "U" & produce_line

If Range(produce_cell) = "" Then GoTo produce_next

[Q26:Q100].Find(what:=Range(produce_cell)).Activate
If Err.Number <> 0 Then
Range("Q27:R27").Select
Selection.Insert Shift:=xlDown

Range(produce_cell).Select

Selection.Copy
Range("Q27").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False

Range("R27").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "1"
Else
With Selection
ActiveCell.End(xlToRight).Value =
ActiveCell.End(xlToRight).Value + 1
End With
End If

produce_next:

Next produce_line

Range("Q26:R100").Select
Selection.Sort Key1:=Range("Q26"), Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

--
romaric

1 réponse

Avatar
anonymousA
bonjour,

il te manque un err.clear quand il y a eu une erreur. voir dasn ce qui suit
le bout de ta proc remaniée.

If Err.Number <> 0 Then
Err.Clear
Range("Q27:R27").Insert Shift:=xlDown
Range(produce_cell).Copy
Range("Q27").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("R27").FormulaR1C1 = "1"
Else
With Selection
ActiveCell.End(xlToRight).Value =
ActiveCell.End(xlToRight).Value + 1
End With
End If

Par ailleurs, je ne l'ai pas corrigé, mais il me semble qu'il y a une
incohérence logique dans ta proc.
En effet, si tu as un élement nouveau dans ta liste en U9:U18, tel que tu
écris ta proc , celui-ci vient se rajouter à la liste Q26:Q100. Du coup, ta
liste à scruter ne devrait plus être plus Q26:Q100 mais Q26:Q101 et ainsi de
suite chaque fois que tu auras un élement nouveau. Or dans ta proc, le test
est toujours fait sur Q26:Q100.
En conséquence, si tu as au moins 1 élément nouveau et que celui-ci est
positionné avant la fin de liste en U89:U18 (initial), tu peux risquer
d'ajouter au moins 1 élement dans la liste Q26:Qx qui existait déjà par
ailleurs, puisque le test sur Q26:Q100 ne l'aura pas détecté. Tu as peut-être
eu de la chance jusqu'ici mais ca pourrait ne pas durer.
J'espère avoir été clair

A+


Bonjour a tous,
Je suis confronter a un tric bizarre sur une macro. Si quelqu’un a une idée,
ça me sauve :

Dans un tableau « produce » ici [U9 :U18] je rentre des références (qui
peuvent être identique sur plusieurs ligne. Je voudrai en lançant la macro
les transférer dans un tableau a deux colonnes : référence et quantité : ici
[Q26 :R100]. Si la référence n’existai pas encore, elle se rajoute et la
quantité 1 apparaît si elle existai : +1 s’ajoute a la quantité existante.
La macro si dessous semble marcher mais par un grand mystère, si une
référence était dans mon tableau initial [U9 :U18] a plusieurs reprises et
n’existait pas dans mon tableau [référence, quantité], alors au lieu de crée
la référence la première fois et d’ajouter 1 en quantité au chaque foi
suivante, la référence se rajoute (se créé) plusieurs fois dans le tableau.
Or ce n’est pas ce que je veux. Je comprend pas pourquoi ! merci pour voa
aide precedente! ca sauve!

On Error Resume Next
For produce_line = 9 To 18
produce_cell = "U" & produce_line

If Range(produce_cell) = "" Then GoTo produce_next

[Q26:Q100].Find(what:=Range(produce_cell)).Activate
If Err.Number <> 0 Then
Range("Q27:R27").Select
Selection.Insert Shift:=xlDown

Range(produce_cell).Select

Selection.Copy
Range("Q27").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
xlNone, SkipBlanks:úlse, Transpose:úlse

Range("R27").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "1"
Else
With Selection
ActiveCell.End(xlToRight).Value =
ActiveCell.End(xlToRight).Value + 1
End With
End If

produce_next:

Next produce_line

Range("Q26:R100").Select
Selection.Sort Key1:=Range("Q26"), Order1:=xlDescending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

--
romaric