Coller un texte de plusieurs lignes dans une seule cellule

Résolu
jeanpatrick50 Messages postés 6 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 mai 2012 - 25 mai 2012 à 16:27
jeanpatrick50 Messages postés 6 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 mai 2012 - 25 mai 2012 à 22:37
Bonjour,
je vous sollicite à propos d'un petit utilitaire que je développe pour des collègues. Il a pour but d'automatiser la saisie d'un fichier excel depuis une page web. Le but est de gagner environs 1 minute par lignes, 40 lignes par jours donc pas négligeable !

Je parts sur le principe suivant: le user fait un ctrl-A, ctrl-C sur la page web. Clique sur le bouton de mon utilitaire, puis Ctrl-V sur la première colonne d'une ligne vide.

L'utilitaire marche très bien sauf à un endroit spécifique.
Dans la page web j'ai :
"
Source :
178.18.245.17
- Zone : Germany
Blacklist : 3
"
Je souhaite rentrer celà dans une seule case, en respectant les retour à la ligne.

En simplifiant, j'utilise:

DataService = Trim(replace(DataService, VbCrLf , " "))
clipboard.SetText(vbtab & DataService & vbtab)

Quand je colle, ça donne dans la case : "178.18.245.17 - Zone : Germany Blacklist : 3"

ça parait etre un détail mais de là découle d'autres choses ensuite.

J'ai donc besoin de votre aide.

Merci de m'avoir lu

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 mai 2012 à 16:52
Bonjour,
si j'ai bien compris, tu pars d'une chaîne (appelons-la toto) ainsi construite :
toto = "178.18.245.17" & vbCrLf & "- Zone : Germany" & vbCrLf & "Blacklist : 3 "

si, comme tu le penses, cette chaine contient des vbcrlf (chr(13)+chr(10))
il suffit de mlui oter les chr(13) car seul le chr(10) est pris en compte par excel dans une cellule.
Essaye donc, pour voir :
Range("A1").Value = Replace(toto, Chr(13), "")



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
3
jeanpatrick50 Messages postés 6 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 mai 2012
25 mai 2012 à 17:15
merci pour ta réponse UCFOUTU.

tu as raison, en fesant des test :
toto = "178.18.245.17" & vbCrLf & "- Zone : Germany" & vbCrLf & "Blacklist : 3 "

je traite cette string avec
Replace(toto, Chr(13), "")

mais ça ne fonctionne pas.
A noter que je n'utilise pas VBA du fichier excel. Je code uniquement ma petite form VB, donc pas de Range("A1").Value =

En regardant je me dis que mon clipboard.SetText colle donc dans le presse papier uniquement une string. Pour passer des lignes dans un cellule, il faut faire un Alt+Entrée à la main.
Un clipboard.SetData ne marcherais pas mieux ? là par contre ça dépasse mes connaissances.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 mai 2012 à 18:27
A noter que je n'utilise pas VBA du fichier excel. Je code uniquement ma petite form VB

Tu veux dire que tu es sous VB6 ?
Il te faut alors piloter Excel en automation et travailler sur les objets Excel créés ! Pas par le presse-papier !
Sers-toi du moteur de recherche de ce forum : mots clés : piloter Excel !
Et utiliser mon code en te référant à l'objet feuille créé en pilotage.
Reviens avec un bout de code dans ce sens, s'il te plait, et je t'aiderai alors si besoin en est encore.
Mais ne compte pas sur moi pour du bidouillage du genre :
Pour passer des lignes dans un cellule, il faut faire un Alt+Entrée à la main

qui est tout, sauf du développement (vocation de ce forum).
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
jeanpatrick50 Messages postés 6 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 mai 2012
25 mai 2012 à 18:51
Je suis bien d'accord avec toi, ce n'est pas du développement.

J'ai déjà fais 1 outils pour mes collègues qui remplit des fichiers excel après un scan d'une BAL exchange.
C'était très plaisant à faire...
Mais je pense que dans ce cas, ça ne serait pas adapté. Il s'agit de faire un outil très simple.

Merci pour ton aide en tous cas, sincèrement.
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 mai 2012 à 19:29
Allez va ...
Reviens ici après dîner.
Je vais te le faire, ton "bidouillage", avec le presse-papier.
Une seule chose, toutefois : tu devras accepter d'écrire du code dans ton fichier Excel. Je te dirais où et comment.
A plus.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 mai 2012 à 20:24
es-tu prêt ?
Moi oui :
mets ce code dans le module de la feuille de ton classeur où tu dois faire le copier/coller :
Private Const CF_TEXT = 1
Private Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Long, ByVal ByteLen As Long)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim hStrPtr As Long, lLength As Long, sBuffer As String
    OpenClipboard Application.hwnd
    hStrPtr = GetClipboardData(CF_TEXT)
    If hStrPtr <> 0 Then
        lLength = lstrlen(hStrPtr)
        If lLength > 0 Then
            sBuffer = Space$(lLength)
            CopyMemory ByVal sBuffer, ByVal hStrPtr, lLength
            Target.Value = Replace(sBuffer, Chr(13), "")
        End If
    End If
    CloseClipboard
End Sub

Pour ce faire : va dans l'éditeur de VB ===>> clique sur ta feuille ==>> insère le code
Reviens lorsque tu l'auras fait



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
25 mai 2012 à 22:14
Tiens ! Plus là ?
Bon ..
Une explication :
Tu n'a même plus besoin de VB6. Seul VBA et le code plus haut. Rien d'autre pour ton bidouillage à l'aide du presse-papier.
1) ton classeur étant ouvert sur la feuille où coller :
2) tu copies ce que tu veux (mets dans le presse papier)
3) tu double-cliques sur la cellule où coller ===>> miracle : tout y est, y compris les retours à la ligne
Elle est pas belle, la vie ?


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
jeanpatrick50 Messages postés 6 Date d'inscription mercredi 7 février 2007 Statut Membre Dernière intervention 25 mai 2012
25 mai 2012 à 22:37
Merci beaucoup pour ce code c'est vraiment très sympathique de ta part !
Je suis très embarrassé car je ne peux pas tester ton travail pour le moment.
Mais je te promets de revenir te confirmer que oui, la vie est belle !

merci encore UCFOUTU
0
Rejoignez-nous