Copier-coller des données d'excel vers un logiciel

zombe

XLDnaute Occasionnel
Salut le forum
Je saisis des informations dans une plage de données de la feuille DONNE (B4 :B49).
Après cela, les données de la plage sont récupérées sur une autre feuille intitulée RECUPERATION.
Les données de la feuille récupération doivent être ressaisi sur le logiciel de la société ;ce qui constitue un « double emploi ».
Les connexions du logiciel avec d’autres logiciels sont interdites.
J’ai trouvée une solution alternative pour éviter la double saisie que je souhaiterai partager avec vous afin de bénéficier de vos aides multiformes sur sa faisabilité.
J’ai vu que l’on peut copier les données à partir d’Excel et de les coller un à un et au fur et à mesure dans le champ actif du logiciel(le logiciel le permet).
C'est-à-dire que je copie P45 et je le colle dans le champ 1 du logiciel, je copie P00 et le colle dans le champ 2, je copie CELIBATAIRE et je le colle dans le champ 3 etc…
Pour cela, il faut que par macro ci-possible, j’arrive à copier les données de la plage D3 50 de la feuille RECUPERATION et de pouvoir les coller suivant l’ordre de la copie dans les champs respectifs du logiciel (C3 :C50).
La grande question est de savoir s’il est possible de copier des données comme les miennes et d’assurer leur collage par ordre respectif comme je le souhaite ?
Ne pouvant pas tout expliquer en un seul coup, je me tiens à votre disposition pour de plus amples éclaircissements.

http://cjoint.com/?BGdawS2Mfuo
 

zombe

XLDnaute Occasionnel
Re : Copier-coller des données d'excel vers un logiciel

Salut ERIC S

Merci pour le conseil.
Je finalise le tout et vous reviens.
Je vais miser sur les tests pour mesurer le taux de fiabilité.
Pour ce que j'ai déjà essayé c'est satisfaisant.
Je vous reviens demain.
 

zombe

XLDnaute Occasionnel
Re : Copier-coller des données d'excel vers un logiciel

Salut ERIC S

J'ai remarqué que lorsque la macro est exécuté, il est difficile (voire impossible de l'arrêter).
Serait-il possible de faire en sorte que quelque soit le moment ou le traitement est en cours, je puisse l'interrompre en appuyant la touche ESC ou autre.
Merci
 

ERIC S

XLDnaute Barbatruc
Re : Copier-coller des données d'excel vers un logiciel

Bonjour

normalement esc redonne la main, plus ou moins rapidement en fonction de l'instruction exécutée.

Je ne connais pas de moyen de rendre cela instantané.

Il faut peut-être laisser la touche enfoncée jusqu'à prise en compte car le pc n'analyse pas forcément en permanence
 

zombe

XLDnaute Occasionnel
Re : Copier-coller des données d'excel vers un logiciel

Salut ERIC S

Merci pour votre suggestion.
Je l'ai mis en application mais sans effet.
On m'a proposé le code ci-dessous pour l'arrêt de la macro.
Elle fonctionne mais quand j'essaie de l'adapter à mon code réel, elle ne marche pas.
Pouvez-vous voir un peu ?
le 2è code correspond à mon cas réel que essayé d'adapter.

Code:
Option Explicit

Declare Function GetKeyState Lib "user32" ( _
                 ByVal nVirtKey As Long) As Integer
Dim NoAction As Boolean

Sub activation()
dim I as integer
    'On Error GoTo gestionerreur
    If MsgBox("ASSUREZ-VOUS QUE VOTRE", vbYesNo, "Demande de confirmation") = vbYes Then
        NoAction = False
        AppActivate "essai"

        For I = 3 To 43
            SendKeys Cells(I, 4).Value, True
            attendre 0.6
            If NoAction Then Exit Sub
            SendKeys "~"
            attendre 1
            If NoAction Then Exit Sub
            
        Next
            SendKeys "+{F3}"
            attendre 1
            If NoAction Then Exit Sub
        For I = 44 To 51
            SendKeys Cells(I, 4).Value, True
            attendre 0.6
            If NoAction Then Exit Sub
            SendKeys "~"
            attendre 1
            If NoAction Then Exit Sub
       
        Next
            SendKeys "+{F6}"
            attendre 1
            If NoAction Then Exit Sub
            
        For I = 52 To 52
            SendKeys Cells(I, 4).Value, True
            attendre 0.6
            If NoAction Then Exit Sub
            SendKeys "~"
            attendre 1
            If NoAction Then Exit Sub
        Next
    End If

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)
                NoAction = True
                Exit Sub
             End If
             SendKeys Chr(27)
         End If
    Loop
End Sub

Ci-dessous le cas réel adapté en fonction du code ci-dessus.

Code:
Option Explicit
Declare Function getkeystate Lib "user32" (ByVal nvirtkey As Long) As Integer
Dim noaction As Boolean

Sub activePack()
'On Error GoTo gestionerreur
Dim I As Integer
If MsgBox("ASSUREZ-VOUS QUE VOTRE", vbYesNo, "Demande de confirmation") = vbYes Then
noaction = False
AppActivate "NOM DU LOGICIEL ICI"

'POSITIONNEZ-VOUS SUR LE MENU
For I = 3 To 6
    SendKeys Cells(I, 10).Value, True
    attendre 1
    If noaction Then Exit Sub
    SendKeys "~"
    attendre 0.6
    If noaction Then Exit Sub
 Next
    SendKeys "N" & Chr(13), True
    attendre 1
    If noaction Then Exit Sub
    SendKeys "{LEFT}"
    SendKeys "{ENTER}"
    attendre 0.6
    If noaction Then Exit Sub
    
For I = 7 To 43
    SendKeys Cells(I, 10).Value, True
    attendre 1
    If noaction Then Exit Sub
    SendKeys "~"
    attendre 0.6
    If noaction Then Exit Sub
    
Next
    SendKeys "+{F3}"
    attendre 0.6
    If noaction Then Exit Sub
For I = 44 To 51
    SendKeys Cells(I, 10).Value, True
    attendre 1
    SendKeys "~"
    attendre 0.6
    If noaction Then Exit Sub

Next
    SendKeys "+{F6}"
    attendre 0.6
    If noaction Then Exit Sub
    
'For I = 51 To 51
    'SendKeys Cells(I, 10).Value, True
    'attendre 0.6
    'SendKeys "~"
    'attendre 1
End If

Exit Sub
gestionerreur:
MsgBox "fichier non ouvert ou réduit dans la barre des tâches : abandon"

End Sub

Sub activesimple()
Dim I As Integer
'On Error GoTo gestionerreur
If MsgBox("ASSUREZ-VOUS QUE VOTRE", vbYesNo, "Demande de confirmation") = vbYes Then
noaction = False
AppActivate "NOM DU LOGICIEL ICI"

'POSITIONNEZ-VOUS SUR LE MENU
For I = 3 To 43
    SendKeys Cells(I, 10).Value, True
    attendre 1
    If noaction Then Exit Sub
    SendKeys "~"
    attendre 0.6
    If noaction Then Exit Sub
    
Next
    SendKeys "+{F3}"
    attendre 0.6
    If noaction Then Exit Sub
For I = 44 To 51
    SendKeys Cells(I, 10).Value, True
    attendre 1
    SendKeys "~"
    attendre 0.6
    If noaction Then Exit Sub

Next
    SendKeys "+{F6}"
    attendre 0.6
    If noaction Then Exit Sub
    
For I = 52 To 52
    SendKeys Cells(I, 10).Value, True
    attendre 1
    If noaction Then Exit Sub
    SendKeys "~"
    attendre 0.6
    If noaction Then Exit Sub
Next
End If
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)
noaction = True
Exit Sub
End If
SendKeys Chr(27)
End If

Loop
End Sub
La 2è macro signale un débogage dans cette partie du code
Code:
If getkeystate(27) > 0 Then
Merci
 

zombe

XLDnaute Occasionnel
Re : Copier-coller des données d'excel vers un logiciel

Bonjour ERIC S

Je viens vers vous pour 2 cas :
1- par rapport à votre proposition, j'ai mis la majuscule sur ce code
Code:
If getkeystate(27) > 0 Then
mais le système l'a remi automatiquement en minuscule.

2- Pouvez-vous voir le point ci-dessous pour moi? c'est pour ajouter une condition dans le code (voir fichier joint).

Je rencontre un soucis avec mon code sendkeys.
En effet, le code me permet de renseigner automatiquement notre logiciel à partir des informations contenues dans une plage excel.
Le problème qui se pose est que le logiciel est fait de telle sorte que lorsque la valeur de la cellule D7=3 (ce qui signifie que c'est femme mariée), le logiciel demande le nom et prenom du mari mais lorsque D7 = 2 ou 4, le logiciel saute les champs reservés au nom et prenom du mari.
Puis que ma plage excel comporte en cellule D16 et D17, les cellules reservées au nom du mari.
Comment faire pour que lorsque la valeur en D7 = 3, il prenne en compte la valeur des cellules D16 et D17.
Mais si D7 est different de 3, il doit laisser les cellules D16 et D17 et aller directement à la cellule D18.
Je reste à votre disposition si pas clair chez vous.
Ci-joint le fichier.
http://cjoint.com/?BGmj1t87wwn
 

ERIC S

XLDnaute Barbatruc
Re : Copier-coller des données d'excel vers un logiciel

Bonjour

je te propose un code basique mais facile à comprendre, à tester
en fait on divise ta première boucle en 3

Code:
For I = 3 To 15
    SendKeys Cells(I, 4).Value, True
    attendre 0.6
    SendKeys "~"
    attendre 1
Next
For I = 16 To 17 'si mariée
    If Cells(7, 4).Value = 3 Then
        SendKeys Cells(I, 4).Value, True
        attendre 0.6
    End If
    SendKeys "~"
    attendre 1
Next
For I = 18 To 44
    SendKeys Cells(I, 4).Value, True
    attendre 0.6
    SendKeys "~"
    attendre 1
Next

pour les majuscules, c'est dans la déclaration qu'il faut chager la syntaxe. Chez moi je l'ai fait par copier coller de la version qui marchait vers la tienne, car dans un premier temps, je ne l'avais pas repérée

Code:
Option Explicit

Declare Function GetKeyState Lib "user32" ( _
                 ByVal nVirtKey As Long) As Integer
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 368
Messages
2 087 654
Membres
103 630
dernier inscrit
Azashoriu