Incrémenter le chiffre d'un usertext dans un userform

Résolu
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014 - 12 mars 2012 à 10:29
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014 - 12 mars 2012 à 10:46
Bonjour les codeurs !

Me revoici sur le forum pour une dernière question.

Je dispose d'un userform (Fenetre_Inter_SA) avec un Usertext (Code_SE).
J'aimerai que le Userform demande à l'utilisateur de saisir un chiffre. Puis ce chiffre est testé et incrémenté 20 fois. Si au bout de 20 fois il n'y a aucun retour, il redemande de saisir un chiffre.

Voici le code que j'ai pour le moment :
Sub Verification_SousEmsemble()

'Login
Dim Code As Long
Dim compteur As Integer


'Incrémentation de la nomenclature excel
Dim L As Integer
Dim i As String

MsgBox "Veuillez activer la fenêtre de JDE"
Application.Wait (Now + TimeValue("0:00:04")) 'Temps de pause 02s

SendKeys "{F3}", True
SendKeys "{F12}", True
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 03s
SendKeys "i", True 'Interrogation
            
Code = Fenetre_Inter_SA.Code_SE.Text
      
For compteur = Code To Code + 20 'Compteur jusque +20
        
        SendKeys "" & Str(compteur) 'Rappel de la saisie code sous assemblage
        Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 02s
        SendKeys "{ENTER}", True
        Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
        SendKeys "+!", True 'Selectionner le code d'action
        SendKeys "^c", True 'Copier de la lettre code d'action
        SendKeys "+{TAB}", True 'placer le curseur sur code action
        Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
        Cells(1, 1).Select
        ActiveSheet.Paste 'Coller la selection
                        
            If Cells(1, 1).Text <> 23 Then 'Analyser la celulle A1
                SendKeys "+{TAB}", True 'Placer le curseur sur le N° Article
                SendKeys "^e", True 'Effacer le numéro article
                SendKeys "{TAB}", True 'Placer le curseur sur code action
                SendKeys "{TAB}", True 'Placer le curseur sur code article
            Else
                MsgBox "libre"
            End If
            
If compteur > Code + 20 Then
    ' retour car pas de numéro libre
    Exit Sub
  End If

Next

SendKeys "{F3}", True 'retour page articles
SendKeys "2", True 'Fiche article
SendKeys "{ENTER}", True

    If Application.WorksheetFunction.CountIf(Range("B:B"), 1) > 0 Then
Fenetre_Suite.Show 0 'Fin de la vérification des articles, demande de passer à la macro suivante.
Else
MsgBox "Vérification términée." 'Fin de la vérification des articles.

End If

SendKeys "{NUMLOCK}", True

End Sub


Le soucis avec ce code c'est que VB me retourne un message d'erreur :
Erreur 6, Dépassement de capacité sur cette ligne :

For compteur = Code To Code + 20 'Compteur jusque +20


Je ne comprends pas bien pourquoi puisque j'ai mis la variable "code" en As Long puisque l'utilisateur saisie un 23 000 000. Normalement en As long on est pas limité si ?

Merci d'avance.

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 mars 2012 à 10:34
pas limité ?
pourquoi pas ?

-2 147 483 648 à 2 147 483 647

pour un long

mais compteur est un Integer, donc 32767 max

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 10:35
Bonjour,

Je ne sais ce qu'est ton "UserText" ici mentionné.
Travailler avec des sendkeys, encore une fois, est très tortueux et maladroit.
Quant au problème que tu exposes ici : dépassement de capacityé, il est évident : compteur, déclaré en Integer, ne saurait compter au delà de la limite d'un integer !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014
12 mars 2012 à 10:36
Donc normalement je dois bien utiliser un As long ? Un integer je serai beaucoup trop limité dans mon cas.
0
azertym Messages postés 47 Date d'inscription vendredi 8 août 2003 Statut Membre Dernière intervention 7 décembre 2014
12 mars 2012 à 10:46
Roh le c... J'ai zappé le compteur .... C'était bien ca le problème. J'ai oublié de me dire que le compteur était lui aussi un As long ....

Pour les sendkeys je te l'ai dis Ucfoutu, je n'ai absolument pas le choix. Et crois moi tu verrais le programme, j'ai du trouver plein de subterfuges pour éviter le plus d'erreurs possible. Pour le moment tout fonctionne quand même mais c'est très très aléatoire à cause du temps de connexion avec JDE .... Des fois la connexion met 2 secondes des fois 15. Du coup les sendkeys eux n'attendent pas, sa balance a tout va sans réfléchir :\. C'est le seul point négatif que j'ai sur toutes mes macros.

En tout cas ce forum m'aura était d'une très grande utilité et surtout toi Ucfoutu !
0
Rejoignez-nous