Coller dans une autre appli (débutant)

Résolu
Patrack33 Messages postés 10 Statut Membre -  
Patrack33 Messages postés 10 Statut Membre -
Bonjour à tous ,

Je touche pour la première fois au VBA et tout n'est pas simple pour moi (même ce qui peut vous parraitre évident).

je voudrait copier les valeurs d'une colone excel dans un autre logiciel.
Ce logiciel ne me permet que de copier cellules par cellules.

J'ai donc voulu commencer déjà avec une cellule , mais ça coince

Sub Macrotransfert()    
    Sheets("Feuil1").Select 'je selectionne ma feuille
    Range("A1").Select ' selection de ma cellule
    Selection.Copy 'copie de ma cellule
    SendKeys ("%+{TAB}") 'basculement vers mon appli (jusqu'ici tout va bien)
    SendKeys "^V" 'collage dans mon appli , mais c'est là que ça coince
    SendKeys ("%+{TAB}") 'retour sur excel
End Sub


J'esperait pouvoir utiliser les raccourcis windows pour y arriver.
Même si c'est un peu du bricolage , ça me parraissait plus simple.
J'ai cru comprendre qu'il falait peut être y rajouter une tempo pour laisser le temps d'ouverture du programme annexe, j'ai essayé avec la fonction Sleep 2000 après mon controle+tab , mais ça ne copie toujours pas.

Auriez vous la réponse ? ou une piste?

6 réponses

  1. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour,

    Je pense qu'il faut tout simplement essayer avec V en minuscule :
    SendKeys "^v"

    A tester
    A+
    0
    1. Patrack33
       
      Merci , je test ça ce soir !
      0
    2. Patrack33 Messages postés 10 Statut Membre
       
      Malheureusement , ça ne marche toujours pas ...
      ce n'est pas lié à la minuscule ...

      une autre piste ?
      0
  2. Patrack33 Messages postés 10 Statut Membre
     
    L'application ne fait pas partie de la suite office , est-ce que ça expliquerait pourquoi le ctrl V ne fonctionne pas ?
    0
    1. pilas31 Messages postés 1878 Statut Contributeur 648
       
      Bonjour,

      Moi j'ai fait le test avec Word et cela fonctionne.
      Est-ce que la manip "à la main" fonctionne ?

      Peut-être que le problème vient du fait qu'il faut donner le focus à l'autre application
      et que dans cette autre application il faut que le focus soit sur un champ de saisie.

      Dans ce cas cela dépasse mes compétences car pour donner précisément le focus à une autre application, il faut probablement utiliser les API Windows sans doute la bibliothèque "user32"
      0
  3. Patrack33 Messages postés 10 Statut Membre
     
    A la main ça fonctionne impec.
    Si je comprend bien , ce n'est pas parceque ma fenêtre est au premier plan que j'ai le focus dessus.
    J'ai lu des truc dessus , mais encore une fois , je suis complètement néophyte.
    J'esperais pouvoir automatiser mes action répétitives clavier "simplement"

    J'ai lu qu'il fallait trouver le "handle" de l'application.
    J'ai entendu parler de keyevent aussi.

    J'ai lu ça sur un autre forum , ça a l'air de ressembler a ce que je veux faire , mais la syntaxe n'est pas décrite et donc il me manque le moyen d'y arriver.
    https://www.developpez.net/forums/d122447/environnements-developpement/delphi/api-com-sdks/simuler-ctrlpv/

    Que faire ?

    Choix 1 : creuser cette histoire de focus , c'est pas si compliquer et je touche au but ?
    Choix 2 : changer de méthode ,le vba est compliquer pour l'usage que je souhaite en faire , il existe des méthodes plus simple ?
    Choix 3 : l'appel a un ami (maman les ordinateurs sont méchants avec moi).
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,

      Peut être pourrais tu également nous en dire plus sur l'appli en question.
      Il y a peut être un moyen de la faire gérer par VBA. Ou pas...
      0
  4. Patrack33 Messages postés 10 Statut Membre
     
    Malheureusement c'est un logiciel développé pour ma boîte , je ne sais pas s'il est géré par vba , (il y a une procédure pour le savoir ?).
    On m'a dit que ce serait une base accès géré en java , mais c'est a mettre au conditionnel .
    Et déjà le vba j'ai du mal , alors le java , ....
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bon.
      Normalement, une base Access devrait facilement être pilotable par VBA depuis Excel.
      Malheureusement, je n'ai jamais tenté ce genre de manipulations...

      Alors.
      Tu parlais tout à l'heure de récupérer le handle de ton appli.
      En voici le moyen :
      - Sources :
      Sources

      - Code :
      Private Declare Function GetWindow Lib "user32" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
      Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
      Private Declare Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long
      Private Declare Function GetDesktopWindow Lib "user32" () As Long
      
      Private Sub CommandButton1_Click()
      Dim hWnd As Long
      Dim Titre_Fenetre As String * 255
      Dim TitreFen As String
      Dim j As Long
      ListBox1.Clear  ' On vide la listbox
      
      hWnd = GetWindow(GetDesktopWindow(), 5)
      Do While (Not IsNull(hWnd)) And (hWnd <> 0) 'Passe en revue chaque fenêtre
            Titre_Fenetre = String(255, 0)  'Formate la chaine destinée à accueillir le titre de la fenêtre
            ret = GetWindowText(hWnd, Titre_Fenetre, 255)   'récupère le titre de la fenêtre et le nombre de caractères de ce titre
            If Titre_Fenetre <> String(255, 0) Then         'Si le titre n'est pas vide
                  If IsWindowVisible(hWnd) = 1 Then         'Pour ne tenir compte que des fenêtres visibles (regardez ce que ça donne en retirant cette condition)
                     TitreFen = Titre_Fenetre        'récupère le titre de la fenêtre
                     TitreFen = Left(TitreFen, ret)  'sans les caractères supplémentaires finaux
                     j = j + 1
                     If Val(j) < 10 Then j = "0" & j
                     ListBox1.AddItem TitreFen & "  [ " & hWnd & " ]" 'stocke le tout dans une listbox
                  End If
            End If
            hWnd = GetWindow(hWnd, 2) 'cherche la fenêtre suivant
      Loop
      End Sub
      


      - fichier exemple :
      Exemple sous Excel
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour à tous,

    S'il s'agit de faire des Inserts dans une base de données Access, le meilleur moyen est d'utilisé une connection ODBC. Ca se pilote très bien depuis Excel.

    Il faut utiliser le driver OLEDB adéquat (voir sur ce site). On trouve sur la toile assez d'exemple de connexion entre Excel et Access.

    Ensuite il faut connaître le modèle de la base pour faire les Inserts là où ça va bien ^^

    ;0)
    0
  7. Patrack33 Messages postés 10 Statut Membre
     
    Merci à tous , je suis trop débutant pour m'attaquer à tout ça , j'ai trouver le logiciel actionaz , qui me permet d'avancer plus simplement.

    encore merci de m'avoir proposé votre aide !
    0