Coller le presse papier dans une cellule Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
a
azertym
Membre habitué
Membre habitué
Messages : 57
Inscrit le : 13 septembre 2008
Version d'Excel : 2007-fr

Message par azertym » 10 février 2012, 11:59

Bonjour a tous,

Je cherche à coller dans une cellule un numéro que j'ai copié dans un autre logiciel de façon automatique.

J'ai donc utilisé ceci :
Sub ColleDansA1()
Dim Presspp As New DataObject
Presspp.GetFromClipboard
Range("A1") = Presspp.GetText
End Sub

Le problème c'est qu'il ne me colle pas le deuxième élément que j'ai copié mais le premier.

Je cherche juste à faire un Ctrl+C d'un logiciel en Java (cette fonction fonctionne)
et la coller dans la cellule L6 par exemple d'excel.

Quelqu'un peut-il m'aider ?

Merci.
Modifié en dernier par azertym le 10 février 2012, 15:21, modifié 2 fois.
Avatar du membre
paritec
Passionné d'Excel
Passionné d'Excel
Messages : 4'066
Appréciations reçues : 424
Inscrit le : 7 juin 2011
Version d'Excel : W10 - 2003 FR - 2010 FR

Message par paritec » 10 février 2012, 12:06

Bonjour Azertym le forum
utilises le sendkeys et cela ira tout seul
a+
papou :)
Des bonnes explications et des petits fichiers représentatifs vont nous aider à vous aider !!!!
a
azertym
Membre habitué
Membre habitué
Messages : 57
Inscrit le : 13 septembre 2008
Version d'Excel : 2007-fr

Message par azertym » 10 février 2012, 12:54

Merci Papou ! Je connais les sendkeys puisque toute ma macro est faite ainsi ^^.

Le soucis (et j'en suis pas fier) c'est que je n'arrive pas a rendre active une cellule pour effectuer le ctrl+v ... :oops:
Avatar du membre
paritec
Passionné d'Excel
Passionné d'Excel
Messages : 4'066
Appréciations reçues : 424
Inscrit le : 7 juin 2011
Version d'Excel : W10 - 2003 FR - 2010 FR

Message par paritec » 10 février 2012, 13:34

Bonjour Azertym le forum
range("L6").select
a+
Papou :)
Des bonnes explications et des petits fichiers représentatifs vont nous aider à vous aider !!!!
a
azertym
Membre habitué
Membre habitué
Messages : 57
Inscrit le : 13 septembre 2008
Version d'Excel : 2007-fr

Message par azertym » 10 février 2012, 13:48

C'est bon Papou, j'ai réussi a trouvé une solution qui est peut être un peu plus "ordonné".

J'ai joué avec le presse papier de windows avec ce code ci :
'Parametrage du presse papier
Dim MyData As DataObject
Set MyData = New DataObject
Dim N_Article As String


        On Error GoTo NotText
            MyData.GetFromClipboard 'Recherche du pressepapier.
      
            N_Article = MyData.GetText(1)
            
            If N_Article <> 0 Then 'analyse du presse papier
            Range("B2").Value = "1"
            Else
            Range("B2").Value = "0"
        End If
NotText:
        If Err <> 0 Then
            Range("B2").Value = "1"
            Else
            Range("B2").Value = "0"
        End If
En tout cas je te remercie de ton aide ! :D

Maintenant il faut que j'essaie de boucler tout ca :s. de passer d'une cellule a l'autre.

En fait, j'ai du mal concernant le bouclage de tout ce code :
 Range("C2").Select  'Selection du code JDE dans excel
            Selection.Copy 'Copie la cellule dans presse papier
            SendKeys "^v", True 'Colle la cellule dans le presse papier
            SendKeys "{ENTER}", True
            Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
            SendKeys "{RIGHT}", True
            Application.Wait (Now + TimeValue("0:00:01"))
            SendKeys "+{TAB}", True
            Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
            SendKeys "+!", True 'Selection du champs numéro article
            SendKeys "+!", True
            SendKeys "+!", True
            SendKeys "+!", True
            SendKeys "+!", True
            SendKeys "+!", True
            SendKeys "+!", True
            Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
            SendKeys "^c", True 'copie du champs numéro article
            Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
              
            On Error GoTo NotText
            MyData.GetFromClipboard 'Recherche du pressepapier.
      
            N_Article = MyData.GetText(1)
            
            If N_Article <> 0 Then 'analyse du presse papier
            Range("B2").Value = "1"
            Else
            Range("B2").Value = "0"
        End If
NotText:
        If Err <> 0 Then
            Range("B2").Value = "1"
            Else
            Range("B2").Value = "0"
        End If
            Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
Il faudrait que j'arrive a incrémenter la copie de C2 vers C3, C4, C5 etc et que la partie du presse papier suivent ces cellules :s La je suis perdu...
Avatar du membre
paritec
Passionné d'Excel
Passionné d'Excel
Messages : 4'066
Appréciations reçues : 424
Inscrit le : 7 juin 2011
Version d'Excel : W10 - 2003 FR - 2010 FR

Message par paritec » 10 février 2012, 15:48

Re azertym le forum
tu peux nous traduire STP
Il faudrait que j'arrive a incrémenter la copie de C2 vers C3, C4, C5 etc et que la partie du presse papier suivent ces cellules :s La je suis perdu...

a+
papou :)
Des bonnes explications et des petits fichiers représentatifs vont nous aider à vous aider !!!!
a
azertym
Membre habitué
Membre habitué
Messages : 57
Inscrit le : 13 septembre 2008
Version d'Excel : 2007-fr

Message par azertym » 10 février 2012, 16:12

J'avoue que ce n'est pas très compréhensible. J'explique :

Premièrement excel va chercher la deuxième cellule de la colonne C (C2). Il va copier la valeur de la cellule dans JDE (via un Ctrl+v). Une fois ce code collé, JDE va afficher une fiche produit. Sur cette fiche produit il y'a un champ "N_Article". Ce champ est copié par excel, si ce champ est vide alors c'est que l'article doit être créer, Excel met donc un 1 en B2, puis il passe a la cellule C3. Si le champ est remplit c'est que l'article est déjà créé, il n y'a donc rien a faire il passe directement en C3.

Schématiquement :

Copie de C2 vers JDE
SI copie de "N_Article" vide alors mettre un 1 en B2 et passer en cellule B3
Sinon ne rien mettre et passer directement en B3

Copie de C3 vers JDE
SI copie de "N_Article" vide alors mettre un 1 en B3 et passer en cellule B4
Sinon ne rien mettre et passer directement en B4

Et ainsi de suite jusqu’à ce qu'une ligne de la colonne C soit vide. A ce moment il arrête la boucle.

C'est peut être un peu plus claire comme ca :)
Avatar du membre
paritec
Passionné d'Excel
Passionné d'Excel
Messages : 4'066
Appréciations reçues : 424
Inscrit le : 7 juin 2011
Version d'Excel : W10 - 2003 FR - 2010 FR

Message par paritec » 11 février 2012, 11:14

re bonjour azertym le forum,
bon alors si j'ai compris ce que tu veux testes le code modifié ci-dessous
a+
papou :)

 i=2   
do while Cells(i,3) <>""
Cells(i,3).Copy 'Copie la cellule dans presse papier
               SendKeys "^v", True 'Colle la cellule dans le presse papier
               SendKeys "{ENTER}", True
                Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
               SendKeys "{RIGHT}", True
                Application.Wait (Now + TimeValue("0:00:01"))
                SendKeys "+{TAB}", True
                Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
               SendKeys "+!", True 'Selection du champs numéro article
               SendKeys "+!", True
                SendKeys "+!", True
                SendKeys "+!", True
                SendKeys "+!", True
                SendKeys "+!", True
                SendKeys "+!", True
                Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
               SendKeys "^c", True 'copie du champs numéro article
               Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s                 
                On Error GoTo NotText
                MyData.GetFromClipboard 'Recherche du pressepapier.         
                N_Article = MyData.GetText(1)               
                If N_Article <> 0 Then 'analyse du presse papier
               Cells(i,2).Value = "1"
                Else
                Cells(i,2).Value = "0"
            End If
    NotText:
            If Err <> 0 Then
                Cells(i,2).Value = "1"
                Else
                Cells(i,2).Value = "0"
            End If
                Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
loop
Des bonnes explications et des petits fichiers représentatifs vont nous aider à vous aider !!!!
a
azertym
Membre habitué
Membre habitué
Messages : 57
Inscrit le : 13 septembre 2008
Version d'Excel : 2007-fr

Message par azertym » 13 février 2012, 10:37

Salut Panitec !

C'est nickel ta boucle fonctionne le soucis c'est qu'elle "n'incrémente" pas les cellules, j'ai essayé avec :
          
        Do
              i = i + 1
        
        Loop While Cells(i, 3) <> ""
            Cells(i, 3).Copy 'Copie la cellule d'excel dans presse papier
            SendKeys "^v", True 'Colle la cellule dans le champs code article de JDE
            SendKeys "{ENTER}", True
            Application.Wait (Now + TimeValue("0:00:01"))
            SendKeys "+{TAB}", True
            Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
            SendKeys "+!", True 'Selection du champs numéro article (8 caractères)
            SendKeys "+!", True
            SendKeys "+!", True
            SendKeys "+!", True
            SendKeys "+!", True
            SendKeys "+!", True
            SendKeys "+!", True
            Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s
            SendKeys "^c", True 'Copie du champs numéro article de JDE
              
            On Error GoTo NotText
            MyData.GetFromClipboard 'Recherche du presse papier.
            N_Article = MyData.GetText(1)
            
        If N_Article <> 0 Then 'analyse du presse papier si PP vide
            Cells(i, 2).Value = "1"
            SendKeys "{TAB}", True 'Remise en position sur le code article
            SendKeys "{TAB}", True
            
        Else
            Cells(i, 2).Value = "" 'analyse du presse papier si PP non vide
            SendKeys "{TAB}", True 'Remise en position sur le code article
            SendKeys "{TAB}", True
        End If

NotText:
        If Err <> 0 Then
            Cells(i, 2).Value = "1" 'analyse du presse papier si PP vide
            SendKeys "{TAB}", True 'Remise en position sur le code article
            SendKeys "{TAB}", True
            Else
            Cells(i, 2).Value = "" 'analyse du presse papier si PP non vide
            SendKeys "{TAB}", True 'Remise en position sur le code article
            SendKeys "{TAB}", True
        End If
            Application.Wait (Now + TimeValue("0:00:01")) 'Temps de pause 01s

End Sub
Mais là il ne va plus me chercher la cellule dans excel, il copie du vide.

J'ai ensuite pensé a créer une autre variable comme dim d As Integer avec comme valeur d = 2 pour mettre :

Do
i = d+1
etc etc ...

Mais sans résultat non plus.

As tu une idée du problème ?
Z
Zirak
Membre impliqué
Membre impliqué
Messages : 1'200
Appréciations reçues : 2
Inscrit le : 18 mai 2011
Version d'Excel : 2010 FR

Message par Zirak » 13 février 2012, 10:44

Bonjour,

Une erreur dans le début de la macro :
Do
              i = i + 1
        
        Loop While Cells(i, 3) <> ""

essais :
Do while Cells(i,3) <> ""
'traitement
i = i+1
loop
Cordialement,
A méditer:

"Au fur et à mesure que vous connaissez les problèmes des autres, vous vous rendez compte que le votre n'est pas si grave."
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message