Bonjour tout le monde,
Je rencontre un petit problème avec une macro que je suis entrain de réaliser pour permettre la communication entre Excel et JDE (un simulateur AS/400 d'IBM).
J'ai écris cette macro :
Le problème c'est que j'aimerai modifier 2 choses, j'ai essayé plusieurs méthode mais soit j'ai des erreurs, soit ca me fait n'importe quoi.
Première question :
Je souhaiterai faire en sorte que ma boucle do while ne copie que les cellules comprise entre 30 999 999 et 32 000 000. Si la cellule n'est pas comprise entre ces 2 valeurs la macro passe a la cellule suivante.
J'ai donc essayé :
Mais rien ne change, la macro fait exactement comme avant, elle prends en compte toute les cellules.
Deuxième question
J'ai remarqué un problème dans le déroulement de la macro.
Lorsque excel copie un code article d'une cellule dans JDE, si cet article est créé alors JDE affiche un code et le curseur de JDE revient en position initial dans la page (c'est cette partie qui pose problème pour la suite). Je vais donc chercher ce code avec :
Puis je le copie et excel analyse le presse papier, si le presse papier contient quelque chose alors il passe a la cellule suivante (ce qui signifie que l'article est déjà créé). Cette opération fonctionne parfaitement.
Le problème c'est si le code article n'est pas créé, tout se décale car le curseur ne revient pas ou il devrait, il reste sur le champ ou je colle le code article (comme quoi il y'a une erreur et que le code article n'existe pas), donc la suite de la macro est complètement foiré.
Je voudrais donc changer mon champ de sélection et ne plus dire si presse papier vide alors mettre un 1 dans excel mais plutôt si presse papier différent de I alors mettre un 1 dans excel.
J'ai essayé de changer ma macro par :
Mais ca ne marche pas :s.
Si quelqu'un veut bien apporter son aide je lui en serai très reconnaissant !
Merci d'avance.
Je rencontre un petit problème avec une macro que je suis entrain de réaliser pour permettre la communication entre Excel et JDE (un simulateur AS/400 d'IBM).
J'ai écris cette macro :
Code:
Private Sub OK_Click()
'===============================================================================================
'================================ Déclaration des variables ====================================
'===============================================================================================
'Login
Dim Utilisateur As String
Dim MotDePasse As String
Utilisateur = User.Text
MotDePasse = Mdp.Text
'Paramétrage du presse papier
Dim MyData As DataObject
Set MyData = New DataObject
Dim N_Article As String
'Incrémentation de la nomenclature excel
Dim i As Integer
'===============================================================================================
'================================ Authentification TN52/JDE ====================================
'===============================================================================================
If Utilisateur = "User" And MotDePasse = "Password" Then
Unload Me 'Fermeture de la fenêtre login (UserForm1)
Shell ("Y:\Base\Fichiers Macro\TN5250J.bat") 'Lancement de TN5250j
Application.Wait (Now + TimeValue("0:00:06")) 'Temps de pause 6s
UsrCMD = "" & User & "{TAB}" 'Rappel de la saisie User
SendKeys UsrCMD 'Importer la saisie dans JDE
Application.Wait (Now + TimeValue("0:00:02")) 'Temps de pause 2s
PassCMD = "" & Mdp & "{ENTER}" 'Rappel de la saisie Password
SendKeys PassCMD 'Importer la saisie dans JDE
Application.Wait (Now + TimeValue("0:00:02")) 'Temps de pause 2s
Else
Exit Sub
End If
'===============================================================================================
'================================ Interrogation articles =======================================
'===============================================================================================
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 02s
SendKeys ("1"), True 'Article
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 ("2"), True 'Fiche article
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "{ENTER}", True
Application.Wait (Now + TimeValue("0:00:03")) 'Temps de pause 01s
SendKeys "i", True 'Interrogation
'Séléction des cellules en boucle
i = 1
Do While Cells(i, 3) <> ""
i = i + 1
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
SendKeys "+{TAB}", True
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^!", True 'Selection du champ n° article (8 caractères)
SendKeys "^!", True
SendKeys "^!", True
SendKeys "^!", True
SendKeys "^!", True
SendKeys "^!", True
SendKeys "^!", True
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^c", True 'Copie du champ numéro article de JDE
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^s", True 'Suppression du champ n° Article
'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 <> 0 Then
Cells(i, 2).Value = "1" 'Presse papier vide = article à créer
SendKeys "{TAB}", True 'Remise en position sur le code article
Else
Cells(i, 2).Value = "" 'Presse papier non vide = article déjà créé
SendKeys "{TAB}", True 'Remise en position sur le code article
End If
NotText:
If Err <> 0 Then 'Permet l'arrêt de la boucle sans erreurs
Cells(i, 2).Value = "1"
SendKeys "{TAB}", True
Else
Cells(i, 2).Value = ""
SendKeys "{TAB}", True
End If
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
Loop
End sub
Le problème c'est que j'aimerai modifier 2 choses, j'ai essayé plusieurs méthode mais soit j'ai des erreurs, soit ca me fait n'importe quoi.
Première question :
Je souhaiterai faire en sorte que ma boucle do while ne copie que les cellules comprise entre 30 999 999 et 32 000 000. Si la cellule n'est pas comprise entre ces 2 valeurs la macro passe a la cellule suivante.
J'ai donc essayé :
Code:
i = 1
Do While Cells(i, 3) <> ""
If Cells(i, 3) > 30999999 or 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
End If
Mais rien ne change, la macro fait exactement comme avant, elle prends en compte toute les cellules.
Deuxième question
J'ai remarqué un problème dans le déroulement de la macro.
Lorsque excel copie un code article d'une cellule dans JDE, si cet article est créé alors JDE affiche un code et le curseur de JDE revient en position initial dans la page (c'est cette partie qui pose problème pour la suite). Je vais donc chercher ce code avec :
Code:
SendKeys "+{TAB}", True
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^!", True 'Selection du champ n° article (8 caractères)
SendKeys "^!", True
SendKeys "^!", True
SendKeys "^!", True
SendKeys "^!", True
SendKeys "^!", True
SendKeys "^!", True
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^c", True 'Copie du champ numéro article de JDE
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
SendKeys "^s", True 'Suppression du champ n° Article
Puis je le copie et excel analyse le presse papier, si le presse papier contient quelque chose alors il passe a la cellule suivante (ce qui signifie que l'article est déjà créé). Cette opération fonctionne parfaitement.
Le problème c'est si le code article n'est pas créé, tout se décale car le curseur ne revient pas ou il devrait, il reste sur le champ ou je colle le code article (comme quoi il y'a une erreur et que le code article n'existe pas), donc la suite de la macro est complètement foiré.
Je voudrais donc changer mon champ de sélection et ne plus dire si presse papier vide alors mettre un 1 dans excel mais plutôt si presse papier différent de I alors mettre un 1 dans excel.
J'ai essayé de changer ma macro par :
Code:
'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
SendKeys "{TAB}", True 'Remise en position sur le code article
Else
Cells(i, 2).Value = "" 'Presse papier non vide = article déjà créé
SendKeys "{TAB}", True 'Remise en position sur le code article
End If
NotText:
If Err <> "I" Then 'Permet l'arrêt de la boucle sans erreurs
Cells(i, 2).Value = "1"
SendKeys "{TAB}", True
Else
Cells(i, 2).Value = ""
SendKeys "{TAB}", True
End If
Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
Loop
Mais ca ne marche pas :s.
Si quelqu'un veut bien apporter son aide je lui en serai très reconnaissant !
Merci d'avance.
Dernière édition: