OVH Cloud OVH Cloud

Pour Michel Galoby

4 réponses
Avatar
deeperpaul
Bonjour Michel,

Je rentre de vacances et j'ai lu ton message dans le dossier (comment
convertir une macro excel en vba). Mais j'ai toujours un probleme à la ligne
« set c=selection… » , j’ai le message « erreur d’execution 13 :
incompatibilité de type ».

Et encore merci pour ton aide.

fichier Entrees:
Date, BE, CodeArt, Design, Numserie, dhr, cde, clt, Qte, gisem,Sortie le, N°
BS

fichier Sorties:
Date, BS, CodeArt, Design, Numserie, cde, clt, Qte, gisem, verif

je voudrais donc les comparés, afin de gérer le stock. je compare donc les
n° de serie et je calcule le stock restant avec les qte. Si qte = 0 je mets
Ok dans verif.


Sub Macro_Compar_Bon()

Dim qte_E
Dim qte_S
Dim numserie
Dim c

qte_E = 0
qte_S = 0
Workbooks.Open Filename:="D:\Privé\PLMAHUT\LOG_INT\Entrees.xls"
Range("A2").Select
Workbooks.Open Filename:="D:\Privé\PLMAHUT\LOG_INT\Sorties.xls"
Range("A2").Select
While ActiveCell <> ""
Cells(ActiveCell.Row, 10).Select
While ActiveCell = "OK"
ActiveCell.Offset(1, 0).Select
Wend
Cells(ActiveCell.Row, 5).Select
numserie = ActiveCell.Value
Cells(ActiveCell.Row, 8).Select
qte_S = ActiveCell.Value
Windows("Entrees.xls").Activate

Set c = Selection.Find(ActiveSheet.Evaluate("numSerie"), ActiveCell,
xlFormulas, xlPart, xlByRows, xlNext, False)
If Not c Is Nothing Then
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Windows("Entrees.xls").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 1).Select
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 2).Select
Selection.Copy
Windows("Entrees.xls").Activate
ActiveSheet.Paste
Cells(ActiveCell.Row, 9).Select
qte_E = ActiveCell.Value
ActiveCell = qte_E - qte_S
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 10).Select
ActiveCell.FormulaR1C1 = "OK"
End If
Cells(ActiveCell.Row + 1, 1).Select
qte_E = 0
qte_S = 0
Wend
Windows("Entrees.xls").Activate
Cells(1, 1).Select
End Sub

4 réponses

Avatar
Michel Gaboly
Bonsoir,

Dans la ligne Set c, ...

pourquoi "ActiveSheet.Evaluate("numSerie")"

Cela revient à utiliser la valeur associée au nom "numSerie" da ns la feuille (créé par Macro ou avec
Insertion/Nom/Définir...). Quelle est cette valeur ?

Si tu es sur PC, au moment de l'erreur, sélectionne "ActiveSheet.Eva luate("numSerie")" et appuie à la fois sur Maj et F9
pour avoir la réponse.

Que se passe-t-il en remplaçant "ActiveSheet.Evaluate("numSerie")" p ar "numsérie", sans guillemet, variable définie un
peu + haut dans le code (numserie = ActiveCell.Value) ?

L'instruction modifiée serait alors:

Set c = Selection.Find(numserie, ActiveCell, xlFormulas, xlPart, xlByRo ws, xlNext, False)


Enfin, si tu ne connais pas VBA, pourquoi comme le suggérait un des intervenants ne pas continuer à utiliser la macro
XL4 ? Elle devrait continuer à fonctionner avec n'importe quelle ver sion récente d'Excel (Mac ou PC) ?


Tiens-moi au courant.


Bonjour Michel,

Je rentre de vacances et j'ai lu ton message dans le dossier (comment
convertir une macro excel en vba). Mais j'ai toujours un probleme à la ligne
« set c=selection… » , j’ai le message « erreur d’execution 13 :
incompatibilité de type ».

Et encore merci pour ton aide.

fichier Entrees:
Date, BE, CodeArt, Design, Numserie, dhr, cde, clt, Qte, gisem,Sortie l e, N°
BS

fichier Sorties:
Date, BS, CodeArt, Design, Numserie, cde, clt, Qte, gisem, verif

je voudrais donc les comparés, afin de gérer le stock. je com pare donc les
n° de serie et je calcule le stock restant avec les qte. Si qte = 0 je mets
Ok dans verif.


Sub Macro_Compar_Bon()

Dim qte_E
Dim qte_S
Dim numserie
Dim c

qte_E = 0
qte_S = 0
Workbooks.Open Filename:="D:PrivéPLMAHUTLOG_INTEntrees.x ls"
Range("A2").Select
Workbooks.Open Filename:="D:PrivéPLMAHUTLOG_INTSorties.x ls"
Range("A2").Select
While ActiveCell <> ""
Cells(ActiveCell.Row, 10).Select
While ActiveCell = "OK"
ActiveCell.Offset(1, 0).Select
Wend
Cells(ActiveCell.Row, 5).Select
numserie = ActiveCell.Value
Cells(ActiveCell.Row, 8).Select
qte_S = ActiveCell.Value
Windows("Entrees.xls").Activate

Set c = Selection.Find(ActiveSheet.Evaluate("numSerie"), ActiveC ell,
xlFormulas, xlPart, xlByRows, xlNext, False)
If Not c Is Nothing Then
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Windows("Entrees.xls").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 1).Select
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 2).Select
Selection.Copy
Windows("Entrees.xls").Activate
ActiveSheet.Paste
Cells(ActiveCell.Row, 9).Select
qte_E = ActiveCell.Value
ActiveCell = qte_E - qte_S
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 10).Select
ActiveCell.FormulaR1C1 = "OK"
End If
Cells(ActiveCell.Row + 1, 1).Select
qte_E = 0
qte_S = 0
Wend
Windows("Entrees.xls").Activate
Cells(1, 1).Select
End Sub




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
JLuc
Tiens, un message de Michel Gaboly pour Michel Gaboly...
Nouveau pense be^te : un forum lol

--
JLuc
Avatar
deeperpaul
Salut Michel,

Avec la modif je n'ai plus de message d'erreur par contre il ne fait rien du
tout, cela va directement à End If.

j'ai remplacé set c = selection.... par
On Error Resume Next
Err = 0
Cells.Find(What:=numserie, LookIn:=xlValues).Activate
If Err <> 0 Then
MsgBox numserie + " pas trouvé !"
Else

et cela marche très bien.

Je te remercie pout tout le mal que tu t'ai donné.
Effectivement je ne connais pas VBA, mais justement j'essaie de m'y mettre,
ce qui est moins évident que les macros excel (pour moi).




Bonsoir,

Dans la ligne Set c, ...

pourquoi "ActiveSheet.Evaluate("numSerie")"

Cela revient à utiliser la valeur associée au nom "numSerie" dans la feuille (créé par Macro ou avec
Insertion/Nom/Définir...). Quelle est cette valeur ?

Si tu es sur PC, au moment de l'erreur, sélectionne "ActiveSheet.Evaluate("numSerie")" et appuie à la fois sur Maj et F9
pour avoir la réponse.

Que se passe-t-il en remplaçant "ActiveSheet.Evaluate("numSerie")" par "numsérie", sans guillemet, variable définie un
peu + haut dans le code (numserie = ActiveCell.Value) ?

L'instruction modifiée serait alors:

Set c = Selection.Find(numserie, ActiveCell, xlFormulas, xlPart, xlByRows, xlNext, False)


Enfin, si tu ne connais pas VBA, pourquoi comme le suggérait un des intervenants ne pas continuer à utiliser la macro
XL4 ? Elle devrait continuer à fonctionner avec n'importe quelle version récente d'Excel (Mac ou PC) ?


Tiens-moi au courant.


Bonjour Michel,

Je rentre de vacances et j'ai lu ton message dans le dossier (comment
convertir une macro excel en vba). Mais j'ai toujours un probleme à la ligne
« set c=selection… » , j’ai le message « erreur d’execution 13 :
incompatibilité de type ».

Et encore merci pour ton aide.

fichier Entrees:
Date, BE, CodeArt, Design, Numserie, dhr, cde, clt, Qte, gisem,Sortie le, N°
BS

fichier Sorties:
Date, BS, CodeArt, Design, Numserie, cde, clt, Qte, gisem, verif

je voudrais donc les comparés, afin de gérer le stock. je compare donc les
n° de serie et je calcule le stock restant avec les qte. Si qte = 0 je mets
Ok dans verif.


Sub Macro_Compar_Bon()

Dim qte_E
Dim qte_S
Dim numserie
Dim c

qte_E = 0
qte_S = 0
Workbooks.Open Filename:="D:PrivéPLMAHUTLOG_INTEntrees.xls"
Range("A2").Select
Workbooks.Open Filename:="D:PrivéPLMAHUTLOG_INTSorties.xls"
Range("A2").Select
While ActiveCell <> ""
Cells(ActiveCell.Row, 10).Select
While ActiveCell = "OK"
ActiveCell.Offset(1, 0).Select
Wend
Cells(ActiveCell.Row, 5).Select
numserie = ActiveCell.Value
Cells(ActiveCell.Row, 8).Select
qte_S = ActiveCell.Value
Windows("Entrees.xls").Activate

Set c = Selection.Find(ActiveSheet.Evaluate("numSerie"), ActiveCell,
xlFormulas, xlPart, xlByRows, xlNext, False)
If Not c Is Nothing Then
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Windows("Entrees.xls").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 1).Select
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 2).Select
Selection.Copy
Windows("Entrees.xls").Activate
ActiveSheet.Paste
Cells(ActiveCell.Row, 9).Select
qte_E = ActiveCell.Value
ActiveCell = qte_E - qte_S
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 10).Select
ActiveCell.FormulaR1C1 = "OK"
End If
Cells(ActiveCell.Row + 1, 1).Select
qte_E = 0
qte_S = 0
Wend
Windows("Entrees.xls").Activate
Cells(1, 1).Select
End Sub




--
Cordialement,

Michel Gaboly
www.gaboly.com




Avatar
Michel Gaboly
Bonsoir,

C'est en forgeant qu'on devient forgeron, persévère ;-))

VBA n'est pas + difficile que les anciennes macros, mais il faut changer d'approche, car on ne programme pas du tout de
la même façon, à cause en particulier de la possibilité de déclencher un traitement lorqu'un événement survient.

Salut Michel,

Avec la modif je n'ai plus de message d'erreur par contre il ne fait ri en du
tout, cela va directement à End If.

j'ai remplacé set c = selection.... par
On Error Resume Next
Err = 0
Cells.Find(What:=numserie, LookIn:=xlValues).Activate
If Err <> 0 Then
MsgBox numserie + " pas trouvé !"
Else

et cela marche très bien.

Je te remercie pout tout le mal que tu t'ai donné.
Effectivement je ne connais pas VBA, mais justement j'essaie de m'y met tre,
ce qui est moins évident que les macros excel (pour moi).




Bonsoir,

Dans la ligne Set c, ...

pourquoi "ActiveSheet.Evaluate("numSerie")"

Cela revient à utiliser la valeur associée au nom "numSerie" dans la feuille (créé par Macro ou avec
Insertion/Nom/Définir...). Quelle est cette valeur ?

Si tu es sur PC, au moment de l'erreur, sélectionne "ActiveSheet. Evaluate("numSerie")" et appuie à la fois sur Maj et F9
pour avoir la réponse.

Que se passe-t-il en remplaçant "ActiveSheet.Evaluate("numSerie") " par "numsérie", sans guillemet, variable définie un
peu + haut dans le code (numserie = ActiveCell.Value) ?

L'instruction modifiée serait alors:

Set c = Selection.Find(numserie, ActiveCell, xlFormulas, xlPart, xlB yRows, xlNext, False)


Enfin, si tu ne connais pas VBA, pourquoi comme le suggérait un d es intervenants ne pas continuer à utiliser la macro
XL4 ? Elle devrait continuer à fonctionner avec n'importe quelle version récente d'Excel (Mac ou PC) ?


Tiens-moi au courant.


Bonjour Michel,

Je rentre de vacances et j'ai lu ton message dans le dossier (comment
convertir une macro excel en vba). Mais j'ai toujours un probleme à   la ligne
« set c=selection… » , j’ai le message  « erreur d’execution 13 :
incompatibilité de type ».

Et encore merci pour ton aide.

fichier Entrees:
Date, BE, CodeArt, Design, Numserie, dhr, cde, clt, Qte, gisem,Sortie le, N°
BS

fichier Sorties:
Date, BS, CodeArt, Design, Numserie, cde, clt, Qte, gisem, verif

je voudrais donc les comparés, afin de gérer le stock. je c ompare donc les
n° de serie et je calcule le stock restant avec les qte. Si qte = 0 je mets
Ok dans verif.


Sub Macro_Compar_Bon()

Dim qte_E
Dim qte_S
Dim numserie
Dim c

qte_E = 0
qte_S = 0
Workbooks.Open Filename:="D:PrivéPLMAHUTLOG_INTEntrees .xls"
Range("A2").Select
Workbooks.Open Filename:="D:PrivéPLMAHUTLOG_INTSorties .xls"
Range("A2").Select
While ActiveCell <> ""
Cells(ActiveCell.Row, 10).Select
While ActiveCell = "OK"
ActiveCell.Offset(1, 0).Select
Wend
Cells(ActiveCell.Row, 5).Select
numserie = ActiveCell.Value
Cells(ActiveCell.Row, 8).Select
qte_S = ActiveCell.Value
Windows("Entrees.xls").Activate

Set c = Selection.Find(ActiveSheet.Evaluate("numSerie"), Activ eCell,
xlFormulas, xlPart, xlByRows, xlNext, False)
If Not c Is Nothing Then
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 1).Select
Selection.Copy
Windows("Entrees.xls").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 1).Select
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 2).Select
Selection.Copy
Windows("Entrees.xls").Activate
ActiveSheet.Paste
Cells(ActiveCell.Row, 9).Select
qte_E = ActiveCell.Value
ActiveCell = qte_E - qte_S
Windows("Sorties.xls").Activate
Cells(ActiveCell.Row, 10).Select
ActiveCell.FormulaR1C1 = "OK"
End If
Cells(ActiveCell.Row + 1, 1).Select
qte_E = 0
qte_S = 0
Wend
Windows("Entrees.xls").Activate
Cells(1, 1).Select
End Sub



--
Cordialement,

Michel Gaboly
www.gaboly.com





--
Cordialement,

Michel Gaboly
www.gaboly.com