IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Intégrer 1 condition dans un code sendkey


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Par défaut Intégrer 1 condition dans un code sendkey
    Salut le forum
    J’ai besoin d’aide pour intégrer une condition dans mon code sendkey.
    Je saisis les données de la plage J4 :J40 par la méthode sendkey dans le logiciel de notre structure.
    Tout se passe bien mais à partir de J34, je dois intégrer une condition car le logiciel fait la part entre les nationaux représentés par BF et les non nationaux (tout code autre que BF).
    Voici comment le traitement se passe en fonction du code saisi dans le logiciel:
    1ère condition ou la valeur de J34 = BF :Si la valeur de j34 est saisie dans le champ approprié du logiciel, après avoir fait ENTER, la valeur de J35 est répercutée dans le champ suivant, après je souhaite que la touche ENTER soit actionnée 1 fois avant de continuer à saisir les valeurs suivantes des autres cellules.
    2ème condition ou la valeur de J34 est différente de BF : Si la valeur de j34 est saisie dans le champ approprié du logiciel, je souhaite que la touche ENTER soit actionnée 2 fois avant de continuer à saisir les valeurs des autres cellules.

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Afin de garder une lisibilité du code, je te conseil d'utiliser l'indentation suivante les normes de développement

    J'ai essayé d'épurer un peu, alors il y a peut être des trucs de cassé (prudence lors du test, faire une sauvegarde)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub activation()
    'On Error GoTo gestionerreur
    Dim i As Integer, MemJ8 As Integer, Memj34 As String
     
    If MsgBox("Assurez-vous que votre session n'est pas expirée", vbYesNo, "Demande de confirmation") = vbYes Then
        stp = False
        AppActivate "essai"
        Sheets("RECUP").Select
    End If
     
    For i = 4 To 38
        DoEvents
        If stp = True Then Exit Sub
        ' si la valeur dans J34 est autre que BF, on fait ENTER
     
        If i = 34 Then
            Memj34 = Range("J34").Value
     
            SendKeys Cells(i, 10).Value, True
            attendre 0.5
     
            If Memj34 <> "BF" Then
                SendKeys Cells(i, 10).Value, True
                SendKeys "{ENTER 2}"
                If stp = True Then Exit Sub
                SendKeys "~"
                If stp = True Then Exit Sub
                attendre 0.7
            Else
                'Acion si = BF
     
     
            End If
        Else
            SendKeys Cells(i, 10).Value, True
            attendre 0.5
            If stp = True Then Exit Sub
            SendKeys "~"
            If stp = True Then Exit Sub
            attendre 0.7
        End If
     
    Next i
     
    End Sub

  3. #3
    Membre éclairé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Par défaut
    Salut Jfontaine

    Merci pour votre solution que j'apprécie déjà à veu d'oeil.
    Je l'ai intégré dans mon code initial mais je rencontre des difficultés(debogage :variable For déjà utilisée et quand je met Next, il signal Next sans For).
    J'ai beaucoup appris à travers le forum mais mon expérience n'est pas aller loin ce que vous pourez constater à travers mon code complet que je souhaite vous soumettre pour parfaire. A certain niveau, j'ai été obligé de morceller le code par manque de conditions à définir ; Ce qui le rend plus long.
    Si à vue d'oeil vous pouvez m'aider à le peaufiner, je serai content sinon je prêt à vous donner de plus amples explications pour faciliter mon aide.
    N.B : je sais que la méthode sendkey n'est pas très sûr mais pour le moment, j'ai pas autre solution pour éviter la double saisie (source de lenteur et d'erreurs) et également face à des responsables qui ne souhaitent pas qu'on agisse avec les bases du logiciel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    Option Explicit
     
    Declare Function GetKeyState Lib "user32" ( _
     ByVal nVirtKey As Long) As Integer
     Dim stp As Boolean
     Sub activation()
     'On Error GoTo gestionerreur
     Dim i As Integer, MemJ8 As Integer, Memj34 As String
     
     If MsgBox("Assurez-vous que votre session n'est pas expirée", vbYesNo, "Demande de confirmation") = vbYes Then
         stp = False
         AppActivate "essai"
         Sheets("RECUP").Select
     End If
     For i = 4 To 6
     '***************************************
     DoEvents
         If stp = True Then Exit Sub
         attendre 0.5
         SendKeys Cells(i, 10).Value, True
         SendKeys "~"
         attendre 0.5
     
     
    Next i
     SendKeys "{ENTER}"
     If stp = True Then Exit Sub
     attendre 0.5
     
    For i = 8 To 20
     DoEvents
     If stp = True Then Exit Sub
         ' Si I = 8 alor on mémorise la valeur de la cellule
     If i = 8 Then
         MemJ8 = Range("J8").Value
         ' Si I = 16 ou 17
     If i = 17 Or i = 18 Then
     If MemJ8 = 3 Then
         attendre 0.5
         SendKeys Cells(i, 10).Value, True
         If stp = True Then Exit Sub
         SendKeys "~"
         If stp = True Then Exit Sub
         attendre 0.5
     
    End If
     Else
         ' Si I à une autre valeur que 16 ou 17
         SendKeys Cells(i, 10).Value, True
         If stp = True Then Exit Sub
         SendKeys "~"
         attendre 0.6
     End If
     
     
    For i = 21 To 38
         DoEvents
         If stp = True Then Exit Sub
         ' si la valeur dans J34 est autre que BF, on fait ENTER
     
         If i = 34 Then
             Memj34 = Range("J34").Value
     
             SendKeys Cells(i, 10).Value, True
             attendre 0.5
     
             If Memj34 <> "BF" Then
                 SendKeys Cells(i, 10).Value, True
                 SendKeys "{ENTER 1}"
                 If stp = True Then Exit Sub
                 SendKeys "~"
                 If stp = True Then Exit Sub
                 attendre 0.6
             Else
                 'Acion si = BF
     
     
             End If
         Else
             SendKeys Cells(i, 10).Value, True
             attendre 0.5
             If stp = True Then Exit Sub
             SendKeys "~"
             If stp = True Then Exit Sub
             attendre 0.6
         End If
     
     Next i
         For i = 39 To 39
         DoEvents
         If stp = True Then Exit Sub
         SendKeys Cells(i, 10).Value, True
         If stp = True Then Exit Sub
         attendre 0.5
     
    Next i
     SendKeys "{ENTER 2}"
     If stp = True Then Exit Sub
     attendre 0.55
     
        For i = 41 To 45
         DoEvents
         If stp = True Then Exit Sub
         attendre 0.5
         SendKeys Cells(i, 10).Value, True
         SendKeys "~"
         If stp = True Then Exit Sub
         attendre 0.55
     
    Next i
     SendKeys "+{F3}"
     If stp = True Then Exit Sub
     attendre 0.7
     
    For i = 46 To 53
         DoEvents
         If stp = True Then Exit Sub
         SendKeys Cells(i, 10).Value, True
         If stp = True Then Exit Sub
         attendre 0.5
         SendKeys "~"
         If stp = True Then Exit Sub
         attendre 0.55
     
    Next i
         SendKeys "+{F6}"
         If stp = True Then Exit Sub
         attendre 0.6
     
    For i = 54 To 54
         DoEvents
         If stp = True Then Exit Sub
         SendKeys Cells(i, 10).Value, True
         If stp = True Then Exit Sub
         attendre 0.6
     
    SendKeys "~"
     attendre 0.55
     
    Sheets("DONNE").Select
     Range("E4").Select
     
    Exit Sub
     gestionerreur:
     MsgBox "fichier non ouvert ou réduit dans la barre des tâches : abandon"
     
    End Sub
     Sub attendre(sec%)
     Dim deb&, fin&
     deb = Timer
     fin = deb + sec%
     Do Until Timer >= fin
     DoEvents
     If GetKeyState(27) > 0 Then
     'If MsgBox("Confirmation arrêt macro", vbOKCancel + vbQuestion) = vbOK Then
     'SendKeys Chr(27)
     stp = True
     Exit Sub
     'End If
     SendKeys Chr(27)
     End If
     Loop
     End Sub

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    J'a remis le code en forme et ajouter un End if et un Next i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     Sub activation()
     'On Error GoTo gestionerreur
     Dim i As Integer, MemJ8 As Integer, Memj34 As String
     
     If MsgBox("Assurez-vous que votre session n'est pas expirée", vbYesNo, "Demande de confirmation") = vbYes Then
         stp = False
         AppActivate "essai"
         Sheets("RECUP").Select
     End If
     For i = 4 To 6
     '***************************************
        DoEvents
         If stp = True Then Exit Sub
         attendre 0.5
         SendKeys Cells(i, 10).Value, True
         SendKeys "~"
         attendre 0.5
     Next i
     
     SendKeys "{ENTER}"
     
     If stp = True Then Exit Sub
     attendre 0.5
     
    For i = 8 To 20
        DoEvents
        If stp = True Then Exit Sub
            ' Si I = 8 alor on mémorise la valeur de la cellule
        If i = 8 Then
            MemJ8 = Range("J8").Value
            ' Si I = 16 ou 17
           If i = 17 Or i = 18 Then
               If MemJ8 = 3 Then
                   attendre 0.5
                   SendKeys Cells(i, 10).Value, True
                   If stp = True Then Exit Sub
                   SendKeys "~"
                   If stp = True Then Exit Sub
                   attendre 0.5
     
               End If
           Else
               ' Si I à une autre valeur que 16 ou 17
               SendKeys Cells(i, 10).Value, True
               If stp = True Then Exit Sub
               SendKeys "~"
               attendre 0.6
           End If
        End If
    Next i
     
    For i = 21 To 38
        DoEvents
        If stp = True Then Exit Sub
        ' si la valeur dans J34 est autre que BF, on fait ENTER
     
        If i = 34 Then
            Memj34 = Range("J34").Value
     
            SendKeys Cells(i, 10).Value, True
            attendre 0.5
     
            If Memj34 <> "BF" Then
                SendKeys Cells(i, 10).Value, True
                SendKeys "{ENTER 1}"
                If stp = True Then Exit Sub
                SendKeys "~"
                If stp = True Then Exit Sub
                attendre 0.6
            Else
                'Acion si = BF
     
     
            End If
        Else
            SendKeys Cells(i, 10).Value, True
            attendre 0.5
            If stp = True Then Exit Sub
            SendKeys "~"
            If stp = True Then Exit Sub
            attendre 0.6
        End If
     
    Next i
     
    For i = 39 To 39
     
        DoEvents
        If stp = True Then Exit Sub
        SendKeys Cells(i, 10).Value, True
        If stp = True Then Exit Sub
        attendre 0.5
     
    Next i
     
    SendKeys "{ENTER 2}"
    If stp = True Then Exit Sub
    attendre 0.55
     
    For i = 41 To 45
        DoEvents
        If stp = True Then Exit Sub
        attendre 0.5
        SendKeys Cells(i, 10).Value, True
        SendKeys "~"
        If stp = True Then Exit Sub
        attendre 0.55
    Next i
     
    SendKeys "+{F3}"
    If stp = True Then Exit Sub
    attendre 0.7
     
    For i = 46 To 53
         DoEvents
         If stp = True Then Exit Sub
         SendKeys Cells(i, 10).Value, True
         If stp = True Then Exit Sub
         attendre 0.5
         SendKeys "~"
         If stp = True Then Exit Sub
         attendre 0.55
     
    Next i
     
    SendKeys "+{F6}"
    If stp = True Then Exit Sub
    attendre 0.6
     
    For i = 54 To 54
         DoEvents
         If stp = True Then Exit Sub
         SendKeys Cells(i, 10).Value, True
         If stp = True Then Exit Sub
         attendre 0.6
    Next i
     
    SendKeys "~"
     attendre 0.55
     
    Sheets("DONNE").Select
     Range("E4").Select
     
    Exit Sub
    gestionerreur:
     MsgBox "fichier non ouvert ou réduit dans la barre des tâches : abandon"
     
    End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Décembre 2011
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2011
    Messages : 571
    Par défaut
    Salut Jfontaine et le forum

    Je m'excuse du temps de réaction.
    J'ai pris le temps pour bien apprécier le fonctionnement du code et pour pouvoir vous revenir sur les difficultés rencontrées.
    Je pense que les tests sont concluant hors mis les defauts de la sendkey(qui n'est pas fiable à 100%).
    Merci pour votre coaching

Discussions similaires

  1. [XL-2007] Comment integrer une condition dans mon code sendkey
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/07/2012, 16h36
  2. Réponses: 3
    Dernier message: 17/03/2010, 21h56
  3. verification d'une condition dans le code
    Par @rkane dans le forum VBA Access
    Réponses: 6
    Dernier message: 22/09/2007, 21h47
  4. Comment intégrer une image dans le code ?
    Par delphi+ dans le forum Delphi
    Réponses: 5
    Dernier message: 06/04/2007, 14h56
  5. Intégrer du php dans un code HTML ...
    Par Le Parrain dans le forum Langage
    Réponses: 15
    Dernier message: 13/04/2006, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo