Copier coller 2 cellule en 1

Martialou

XLDnaute Nouveau
Bonsoir,

je me permet de vous demander s'il existe un moyen de "coller" une copie de 2 cellules dans 1 cellule ?

Je vous explique avec un morceau du code :

Code:
Sub Etat_OI()

'********************************************
'Ici il y a toute la macro de connection à l'autre logiciel
'********************************************

    Worksheets("Tableau B3").Rows(1).Copy
    'Effectue une copie de la sélection
    Selection.Copy

Sess0.Screen.SendKeys ("<Home>")
        Sess0.Screen.WaitHostQuiet (g_HostSettleTime)
    Sess0.Screen.SendKeys ("=2.1.5_")
        Sess0.Screen.WaitHostQuiet (g_HostSettleTime)
    Sess0.Screen.SendKeys ("<Enter>")
        Sess0.Screen.WaitHostQuiet (g_HostSettleTime)
    Sess0.Screen.Paste
        Sess0.Screen.WaitHostQuiet (g_HostSettleTime)
    Sess0.Screen.SendKeys ("<Enter>")
        Sess0.Screen.WaitHostQuiet (g_HostSettleTime)

    Set MyScreen = Sess0.Screen
    Set MyArea = MyScreen.Area(4, 64, 4, 70)
    MyArea.Select
    Sess0.Screen.Copy
    System.TimeoutValue = OldSystemTimeout
    ActiveCell.Offset(0, 1).Select
    ActiveSheet.Paste

Donc, je sélectionne sur mon Tableau B3, une cellule "C25" par exemple, sur mon autre logiciel, je colle la donnée copier en "C25" et des infos s'affiche, je copie des données en ligne 4, colonne 64 à 70 (MyArea)
Je copie cette sélection, un petit temps de pose, et ensuite, je la colle dans mon tableau Excel sur la même ligne mais décalé d'une cellule à droite. Sauf que là, quand ça colle, le "ActiveSheet.Paste" prend 2 cellules au lieu d'une !

Exemple :
Je copie dans mon logiciel : Test 10 (Test <espace> 10)
Et je colle dans Excel : Test (saut de colonne) 10

Ce que je recherche, c'est de pouvoir coller dans la même cellule.
Merci de votre aide :)
 

fhoest

XLDnaute Accro
Re : Copier coller 2 cellule en 1

Bonjour,
plutôt que de copier directement il serait préférable de passer par une variable qui serait égale a une seule valeur texte que tu pourrait transposer dans une seule cellule.
exemple:
copie de logiciel=> mavariable ( dim as string) = "test <espace> 10"
cellule excel = mavariable.
voilà ce que je suggére.
A+
 

Dranreb

XLDnaute Barbatruc
Re : Copier coller 2 cellule en 1

Bonjour
si l'autre logiciel envoit sa bafouille dans le presse papier, ceci pourrait avoir son utilité :
VB:
Property Get PressePapier() As String
Dim DOb As New DataObject
DOb.GetFromClipboard: PressePapier = DOb.GetText
End Property
Property Let PressePapier(Z As String)
Dim DOb As New DataObject
DOb.SetText Z: DOb.PutInClipboard
End Property
À+
 

Martialou

XLDnaute Nouveau
Re : Copier coller 2 cellule en 1

Bonsoir, j'ai essayé de rajouter une variable comme tu m'as suggéré fhoest, mais j'ai du mal à la placer .. :(
J'ai essayé aussi le code de Dranreb, mais là, je sais même pas, ou, et comment l'insérer, ayant une connaissance de Vba et Excel médiocre, je vous remercie d'avance de votre aide.

Je vous envois le code complet, et si vous avez 5 min, me faire voir ou est ce qu'on met tout ça ! :)

'--------------------------------------------------------------------------------
' Cette macro a été créée par l'enregistreur de macros.
' Document de session : "C:\ProgramData\RobotEPC.110\Sessions\SYGMACHI-EXPL.edp"
' Date : Thursday, August 18, 2011 12:27:12
'--------------------------------------------------------------------------------

' Déclarations des variables globales
Global g_HostSettleTime%
Global g_szPassword$

Sub Etat_OI()
Do
'--------------------------------------------------------------------------------
' Cherche l'objet principal du système
Dim Sessions As Object
Dim System As Object
Set System = CreateObject("EXTRA.System") ' Cherche l'objet du système
If (System Is Nothing) Then
MsgBox "Impossible de créer l'objet du système EXTRA. L'exécution de la macro est interrompue."
Stop
End If
Set Sessions = System.Sessions

If (Sessions Is Nothing) Then
MsgBox "Impossible de créer l'objet de la collection Sessions. L'exécution de la macro est interrompue."
Stop
End If
'--------------------------------------------------------------------------------
' Définir la valeur du délai d'attente par défaut
g_HostSettleTime = 200 ' millisecondes

OldSystemTimeout& = System.TimeoutValue
If (g_HostSettleTime > OldSystemTimeout) Then
System.TimeoutValue = g_HostSettleTime
End If

' Cherche l'objet nécessaire pour la session
Dim Sess0 As Object
Set Sess0 = System.ActiveSession
If (Sess0 Is Nothing) Then
MsgBox "Impossible de créer l'objet Session. L'exécution de la macro est interrompue."
Stop
End If
If Not Sess0.Visible Then Sess0.Visible = True
Sess0.Screen.WaitHostQuiet (g_HostSettleTime)

' Cette section du code contient les événements enregistrés.
'--------------------------------------------------------------------------------

'Sélectionne le cible du clic de la souris
Worksheets("Tableau B3").Rows(1).Copy

'Effectue une copie de la sélection
Selection.Copy

'Script Sygma
Sess0.Screen.SendKeys ("<Home>")
Sess0.Screen.WaitHostQuiet (g_HostSettleTime)
Sess0.Screen.SendKeys ("=2.1.5_")
Sess0.Screen.WaitHostQuiet (g_HostSettleTime)
Sess0.Screen.SendKeys ("<Enter>")
Sess0.Screen.WaitHostQuiet (g_HostSettleTime)
Sess0.Screen.Paste
Sess0.Screen.WaitHostQuiet (g_HostSettleTime)
Sess0.Screen.SendKeys ("<Enter>")
Sess0.Screen.WaitHostQuiet (g_HostSettleTime)

'--------------------------------------------------------------------------------

Set MyScreen = Sess0.Screen
Set MyArea = MyScreen.Area(4, 64, 4, 70)
MyArea.Select
Sess0.Screen.Copy
System.TimeoutValue = OldSystemTimeout
ActiveCell.Offset(0, 1).Select
ActiveSheet.Paste

ActiveCell.Offset(1, -1).Select

Loop Until ActiveCell.Value = ""

End Sub

Donc avec cette macro, elle me recherche automatiquement le texte qui est situé sur la ligne 4, colonne 64 à 70
Set MyArea = MyScreen.Area(4, 64, 4, 70)
Le logiciel, fait une copie de cette zone, colle sur mon tableau Excel, et revient à la ligne du dessous pour relancer la macro, et s'arrête dès qu'il y a une cellule vide (Loop). Le seul hic dans tout ça, c'est que "coller", me prend 2 cellules en longueur, car le texte copier contient un espace entre les 2 mots ...

Merci beaucoup de votre aide ! :D
 

Dranreb

XLDnaute Barbatruc
Re : Copier coller 2 cellule en 1

le code de Dranreb, mais là, je sais même pas, ou, et comment l'insérer
Mais dans un module ordinaire, tout simplement.
Après quoi PressePapier s'utilise un peu comme une variable String. Mais lorsqu'on y affecte une valeur celle ci est reproduite par un Ctrl+V dans une multitude d'environnements, dans lesquel Ctrl+C lui affecte une autre valeur qu'on peut ensuite y récupérer.

Dans la mesure où à priori une autre application qu'Excel ne copie pas des cellules Excel,
moi à votre place, après votre instruction Sess0.Screen.Copy je serais curieux de savoir ce que contient PressePapier !
Faites un MsgBox PressePapier
À+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 452
Messages
2 088 541
Membres
103 879
dernier inscrit
JJB2