Coller le presse papier dans une cellule
Voila le code. Tout fonctionne pour le mieux quand tout les articles sont créés dans la nomenclature. Quand j'insère un article non créé tout se décale. Forcément je n'ai pas mis de consigne dans THEN.
'Séléction des cellules en boucle
i = 1
Do While Cells(i, 3) <> ""
i = i + 1
If Cells(i, 3) > 30999999 And Cells(i, 3) < 32000000 Then
Cells(i, 3).Copy 'Copie la cellule d'excel dans le presse papier
SendKeys "^v", True 'Colle la cellule dans le champ code produit de JDE
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "{ENTER}", True
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^!", True 'Selection du champ n° article (8 caractères)
SendKeys "^c", True 'Copie du champ numéro article de JDE
'Vérification du contenu du presse papier
On Error GoTo NotText
MyData.GetFromClipboard 'Recherche du presse papier.
N_Article = MyData.GetText(1)
If N_Article <> "I" Then
Cells(i, 2).Value = "1" 'Presse papier vide = article à créer
Else
Cells(i, 2).Value = "" 'Presse papier non vide = article déjà créé
SendKeys "+{TAB}", True 'Remise en position sur le premier caractère code d'action
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "+{TAB}", True 'Mise en position N° Article
SendKeys "^s", True 'Suppression N°Article
SendKeys "{TAB}", True 'Remise en position code d'action
SendKeys "i", True
End If
NotText:
If Err <> 0 Then 'Permet l'arrêt de la boucle sans erreurs
Cells(i, 2).Value = "1"
Else
Cells(i, 2).Value = "" 'Presse papier non vide = article déjà créé
SendKeys "+{TAB}", True 'Remise en position sur le premier caractère code d'action
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "+{TAB}", True 'Mise en position N° Article
SendKeys "^s", True 'Suppression N°Article
SendKeys "{TAB}", True 'Remise en position code d'action
SendKeys "i", True
End If
End If
Loop
Par contre avec ce code ci, quand le champ THEN est complété et que dans la nomenclature tout les codes sont déjà créé (donc même condition que le code précédent) c'est du grand n'importe quoi. Ca me met des "1" dans chaque cellule alors que l'article est créé, puis sa me les enlève, ca passe une autre cellule, ca met un 1, me l'enlève et ainsi de suite. J'ai l'impression que les conditions IF rentre en conflit.
'Vérification du contenu du presse papier
On Error GoTo NotText
MyData.GetFromClipboard 'Recherche du presse papier.
N_Article = MyData.GetText(1)
If N_Article <> "I" Then
Cells(i, 2).Value = "1" 'Presse papier vide = article à créer
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^s", True
SendKeys "+{TAB}", True
SendKeys "i", True
Else
Cells(i, 2).Value = "" 'Presse papier non vide = article déjà créé
SendKeys "+{TAB}", True 'Remise en position sur le premier caractère code d'action
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "+{TAB}", True 'Mise en position N° Article
SendKeys "^s", True 'Suppression N°Article
SendKeys "{TAB}", True 'Remise en position code d'action
SendKeys "i", True
End If
NotText:
If Err <> 0 Then 'Permet l'arrêt de la boucle sans erreurs
Cells(i, 2).Value = "1" 'Presse papier vide = article à créer
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^s", True
SendKeys "+{TAB}", True
SendKeys "i", True
Else
Cells(i, 2).Value = "" 'Presse papier non vide = article déjà créé
SendKeys "+{TAB}", True 'Remise en position sur le premier caractère code d'action
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "+{TAB}", True 'Mise en position N° Article
SendKeys "^s", True 'Suppression N°Article
SendKeys "{TAB}", True 'Remise en position code d'action
SendKeys "i", True
End If
End If
Loop
Ca commence à m'énerver cette histoire de presse papier
Bonjour Azertym le forum,
bon alors dans ta boucle do while le i=i+1 il doit être à la dernière ligne juste avant le loop et pas ou tu l'as mis,
car tu vérifies Cell(i,2)<>"" et juste derrrière tu incrémentes le i de 1 comment veux tu ne pas avoir de décalage!!!
a+
Papou
Salut Paritec !
C'est marrant parce que le code fonctionne très bien aussi dans le cas ou je met je "i = i+1" à la fin de la boucle.
Quand je parlais du décalage c'est quand dans la nomenclature il y'a un code article qui n'est pas créé. Le décalage ce fait dans JDE car le curseur de sélection ne revient pas ou il devrait.
Donc pour résoudre ce problème je souhaiterai donc faire "Si le presse papier contient I alors ..... Sinon ......"
Le problème c'est que j'ai l'impression que le presse papier est limité a ce niveau. Je pense que l'on peu juste lui demander si presse papier <> "" alors ...... sinon .... On ne peut lui demander d'analyser un caractère. Après plusieurs essais et exemples sur le net je n'ai jamais vu " presse papier <> "exemple" then " Ce n'est que mon avis après je suis peut être passé a coté de quelque chose.
Bonjour Azertym le forum
Pour l'incrémentation je te certifie que c'est bien en bas qu'il faut le mettre, il faut bien traiter la première valeur I non ??
pour le reste le problème majeur est que l'on a pas le dossier pour faire les tests, si on l'avait, tu aurais déjà eu ta réponse depuis longtemps.
Maintenant pour le presse papier, je ne vois pas pourquoi tu ne pourrais pas le comparer à la valeur 1, même si tu dois passer par une copie du presse papier dans une variable ou cellule, après tu compares et en fonction du résultat tu traites ou non
a+
papou
Bonjour Paritec,
Je veux bien vous passer le fichier mais le soucis c'est que je ne sais pas si vous pourrez le tester puisque qu'il vous faut TN5250J (bon bien sur il est en téléchargement libre sur : https://sourceforge.net/projects/tn5250j/files/
Je vous met les fichiers si vous êtes intéressé par ce problème :
Il y'a le fichier Nomenclature_JDE.xls qui contient la nomenclature (ici modifié pour effectuer les tests) Le code article 31707720 est un article qui n'existe pas. JDE doit donc mettre un 1 a coté de celui ci. Le reste existe.
Ensuite il y'a un fichier .bat qui permet l’exécution de TN5250J. il vous faudra donc changer le chemin de ce fichier dans la macro.
Autre point, au lancement du fichier excel vous allez avoir une erreur, c'est normal puisque vous ne disposez pas de pro engineer, mais vous pouvez tester quand même la macro car une nomenclature est déjà présente dans le fichier.
En ce qui concerne ta remarque Paritec je suis d'accord avec toi, et c'est pour cela que je viens vers vous car je ne comprends pas pourquoi ca ne veut pas fonctionner.
En tout cas je te remercie beaucoup de vouloir m'aider
P.S: La macro est dans le bouton OK du Userform 1 qui se trouve dans xlsTOjde.
Bon j'ai réussi a trouver d’où vient le problème, mais je n'arrive pas à le résoudre, après moult et moult essai j'en ai déduis que la boucle IF du presse papier ne s'effectuait pas.
Mon code actuel est donc celui ci :
'Séléction des cellules en boucle
i = 1
Do While Cells(i, 3) <> ""
If Cells(i, 3) > 30999999 And Cells(i, 3) < 32000000 Then
Cells(i, 3).Copy 'Copie la cellule d'excel dans le presse papier
SendKeys "^v", True 'Colle la cellule dans le champ code produit de JDE
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "{ENTER}", True
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s 'le curseur se remet automatiquement sur code d'action
SendKeys "^!", True 'Selection du champ code d'action
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^c", True 'Copie de la lettre code d'action "I"
SendKeys "+{TAB}", True 'Revenir sur le premier caractère du code d'action
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
'Analyse du presse papier
On Error GoTo NotText
MyData.GetFromClipboard 'Recherche du presse papier.
N_Article = MyData.GetText(1)
If UCase(N_Article) = "I" Then ''''''''''''''''''''''''''''''''''''''' celle ci ne se réalise pas, pourtant un I est bien copié (vu a l'aide d'un msgbox)
Cells(i, 2).Value = ""
SendKeys "+{TAB}", True 'remonter au N° d'article
SendKeys "^s", True 'suppression du N° d'article
SendKeys "{TAB}", True 'descendre au code d'action
SendKeys "{TAB}", True 'descendre au code article et reprise de la boucle
Else
Cells(i, 2).Value = "1" 'Pas encore écrit
End If
NotText:
If Err <> 0 Then 'Permet l'arrêt de la boucle sans erreurs
MsgBox "Il n y'a rien dans le presse papier"
End If
End If
i = i + 1
Loop
Je reviens vers vous, pour vous dire que le problème est résolu, ce n'est pas ma boucle if qui pose problème mais bel et bien mes sendkeys. Un très gros conflit s'opère au niveau des sendkeys :
En tout cas merci beaucoup pour avoir essayé de m'aider. J'aurai appris certaine chose en vb quand même tout n'est pas perdu.