Coller dans une autre appli (débutant)

Résolu/Fermé
Patrack33 Messages postés 10 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 21 janvier 2014 - Modifié par pijaku le 17/01/2014 à 11:32
Patrack33 Messages postés 10 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 21 janvier 2014 - 19 janv. 2014 à 22:19
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?
A voir également:

6 réponses

pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
16 janv. 2014 à 10:48
Bonjour,

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

A tester
A+
0
Merci , je test ça ce soir !
0
Patrack33 Messages postés 10 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 21 janvier 2014
16 janv. 2014 à 19:20
Malheureusement , ça ne marche toujours pas ...
ce n'est pas lié à la minuscule ...

une autre piste ?
0
Patrack33 Messages postés 10 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 21 janvier 2014
16 janv. 2014 à 21:50
L'application ne fait pas partie de la suite office , est-ce que ça expliquerait pourquoi le ctrl V ne fonctionne pas ?
0
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 643
17 janv. 2014 à 09:50
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
Patrack33 Messages postés 10 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 21 janvier 2014
17 janv. 2014 à 10:22
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
17 janv. 2014 à 11:38
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
Patrack33 Messages postés 10 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 21 janvier 2014
17 janv. 2014 à 12:14
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 745
17 janv. 2014 à 12:54
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
17 janv. 2014 à 13:20
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
Patrack33 Messages postés 10 Date d'inscription mercredi 15 janvier 2014 Statut Membre Dernière intervention 21 janvier 2014
19 janv. 2014 à 22:19
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