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

Excel Discussion :

Coller cellules Excel dans l'IHM d'une autre application [XL-2010]


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Coller cellules Excel dans l'IHM d'une autre application
    Bonjour à tous,

    Voici mon problème. J'ai de la saisie informatique à faire dans une application tierce ou les informations sont sur un fichier Excel, et je déteste faire de la saisie.
    J'ai donc créé un petit code VBA me permettant de reprendre une cellule défini dans l'Excel et de le coller dans l'application tierce via le pointeur de la souris (je ferai une boucle par la suite).
    Ça fonctionne car l'appli tierce prend toute la page et que les champs sont toujours au même endroit.

    Mais voilà le seul hic dans mon programme réside dans le fait que si je ne mets pas une temporisation (matérialisé par "TimedMess") entre 2 cellules copié/collé il me colle la même valeur dans tous les champs (et la dernière en plus, chose très bizarre).
    Ce qui est dommage car du coup je fais une fenêtre Popup et je suis toujours obligé d'appuyer sur entrée à chaque fois. Au bout de 500 actions c'est aussi rébarbatif
    Je vous joints mon code test :

    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
     
    Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Private Declare Function SetCursorPos& Lib "user32" (ByVal x As Long, ByVal y As Long)
    'Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
     
     
    'constantes:
    Const MOUSEEVENTF_ABSOLUTE = &H8000
    Const MOUSEEVENTF_LEFTDOWN = &H2
    Const MOUSEEVENTF_LEFTUP = &H4
    Const MOUSEEVENTF_MIDDLEDOWN = &H20
    Const MOUSEEVENTF_MIDDLEUP = &H40
    Const MOUSEEVENTF_MOVE = &H1
    Const MOUSEEVENTF_RIGHTDOWN = &H8
    Const MOUSEEVENTF_RIGHTUP = &H10
    Const MOUSEEVENTF_WHEEL = &H80
    Const MOUSEEVENTF_XDOWN = &H100
    Const MOUSEEVENTF_XUP = &H200
    Const WHEEL_DELTA = 120
    Const XBUTTON1 = &H1
    Const XBUTTON2 = &H2
     
     
    Sub Processus_copie_appli()
     
    'On copie la cellule A6 de notre fichier Excel
    Range("A6").Select
    Selection.Copy
    'On colle le texte dans l'encadré où se trouve la position de la souris
    Call Souris(428, 887)
    SendKeys ("^{v}")
     
    'Obligation de temporiser. Pourquoi? Aucune réponse à l'heure actuelle
    TimedMess Range("A6").Value, "REPONSE"
     
    'On copie la cellule A6 de notre fichier Excel
    Range("A7").Select
    Selection.Copy
    'On colle le texte dans l'encadré où se trouve la position de la souris
    Call Souris(438, 966)
    SendKeys ("^{v}")
     
    'Obligation de temporiser. Pourquoi? Aucune réponse à l'heure actuelle
    TimedMess Range("A7").Value, "REPONSE"
     
    'On clique sur le bouton enregistrer de l'application
    Call Souris(334, 187)
     
    'Obligation de temporiser. Pourquoi? Aucune réponse à l'heure actuelle
    TimedMess "Enregistrement", "REPONSE"
     
    'Fenetre Popup de l'application pour validation (mise à non car nous sommes en test)
    SendKeys ("{RIGHT}")
    SendKeys ("{ENTER}")
    'Obligation pour le moment de remettre le numlock car désactivé durant la macro.
    'A voir pourquoi
    SendKeys ("{NUMLOCK}")
     
    End Sub
     
     
    Public Function Souris(x, y)
     
    'on active la position du curseur
    SetCursorPos x, y
    'on clique sur le bouton
    Call mouse_event(MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_ABSOLUTE, x, y, 0, 0)
    'on relache la bouton
    Call mouse_event(MOUSEEVENTF_LEFTUP + MOUSEEVENTF_ABSOLUTE, x, y, 0, 0)
     
    End Function
     
     
    'windows script host object model à activer!
    Sub TimedMess(Message As String, Optional Titre As String)
     
    Dim SH As IWshRuntimeLibrary.WshShell
    Set SH = New IWshRuntimeLibrary.WshShell
    'fenêtre popup correspondant au msgbox
    'mais on a la main sur cette fenêtre étant sur une autre application contrairement au msgbox
    SH.Popup Message, 2, Titre, vbOKOnly
     
    End Sub
    Merci pour vos réponses

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Et si tu supprimes les Select (qui n'ont pas d'intérêt).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Processus_copie_appli()
     
    Range("A6").Copy
    Call Souris(428, 887)
    SendKeys ("^{v}")
     
    TimedMess Range("A6").Value, "REPONSE"
     
    Range("A7").Copy
    Call Souris(438, 966)
    SendKeys ("^{v}")
    Pour temporiser, tu as aussi la possibilité d'utiliser Application.Wait
    https://msdn.microsoft.com/fr-fr/lib.../ff822851.aspx
    Ca t'évitera d'avoir à valider chaque cellule.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci de ta réponse rapide.
    En effet j'ai viré les .select et Selection.Copy, je sais même pas pourquoi je les ai mis

    Sinon ta méthode et top avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.Wait (Now + TimeValue("0:00:02"))
    Ça fonctionne d’enfer et les valeurs sont collées correctement.
    Y'a des fois faut pas chercher très loin...
    Merci en tous les cas.
    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 22/09/2015, 17h16
  2. Réponses: 2
    Dernier message: 12/05/2014, 11h26
  3. Coller une plage de cellules Excel dans Word
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 21/09/2007, 00h32
  4. valeur d'une cellule excel dans une userform
    Par kbakouan dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/06/2007, 15h38
  5. Simple copie du texte d'une cellule excel dans le titre d'un graphique chart
    Par pinto_armindo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/05/2007, 10h59

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