IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

Basic : copier-coller le contenu d'une cellule [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut Basic : copier-coller le contenu d'une cellule
    Bonjour,

    Je voudrais copier-coller le texte contenu dans une cellule avec son formatage. Par exemple, lettres en italique ou en gras
    Ni .string, ni .formula ne permettent d'obtenir ce contenu. "abcd" devient "abcd".
    Comment procéder ?

    Merci.

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 231
    Par défaut
    hello,
    j'ai retrouvé dans le forum un code où je montrais un exemple de copier coller spécial d'une plage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub CopierCollerSpecial
    ' J.P Janvier 2015
    oDoc1 = thisComponent
    oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    oFrame1 = oDoc1.CurrentController.Frame
    ' On sélectionne la plage de cellule à copier
    oSheet = oDoc1.Sheets(0)
    rng = oSheet.getCellRangeByName("A1:A10")
    oDoc1.CurrentController.Select(rng)
    ' On utilise un Dispatch pour copier la plage
    oDispatcher.executeDispatch(oFrame1, ".uno:Copy", "", 0, Array())
    ' On sélectionne la première cellule de l'endroit où coller
    rng = oDoc1.Sheets(0).getCellRangeByName("B1")
    oDoc1.CurrentController.Select(rng)
    ' on renseigne les arguments pour le coller spécial
    dim args1(5) as new com.sun.star.beans.PropertyValue
    ' Flags :  A=Tout VSD=Valeurs T=Formats F=Formules VSDT=Valeurs&Formats
    args1(0).Name = "Flags"
    args1(0).Value = "A"
    'FormulaCommand : 0=aucune 1=addition 2=soustraction 3=multiplication 4=Division
    args1(1).Name = "FormulaCommand"
    '1 : on additionne les valeurs de la plage de départ à celle d'arrivée
    args1(1).Value = 1
    args1(2).Name = "SkipEmptyCells"
    args1(2).Value = false
    args1(3).Name = "Transpose"
    args1(3).Value = false
    args1(4).Name = "AsLink"
    args1(4).Value = false
    args1(5).Name = "MoveMode"
    args1(5).Value = 4
    oDispatcher.executeDispatch(oFrame1, ".uno:InsertContents", "", 0, args1())
    end sub
    Dans cet exemple j'ai eu la bonne idée de mettre un commentaire sur les arguments :
    Flags : A=Tout VSD=Valeurs T=Formats F=Formules VSDT=Valeurs&Formats
    donc avec l'argument Flags à A tu devrais tout coller.

    Ami calmant, J.P

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut
    Waouh !!!

    Haut niveau pour moi !

    Il se trouve que je fais des copiages cellule par cellule (repérées par leur position). Pourrais-tu convertir (simplifier ?) ton code pour l'adapter à cette situation ?

    Merci d'avance.

    JD

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 231
    Par défaut
    hello,
    il faudrait que tu nous montres ton code pour voir comment l'adapter.

    Ami calmant, J.P

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 59
    Par défaut
    Bonjour,

    Il s'agit d'une macro toute simple destinée à "recaler" des cellules sur la gauche, en supprimant les cellules vides.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    iSheet=ThisComponent.Sheets.getByName("Feuille1")
    oSheet=ThisComponent.Sheets.getByName("Feuille2")
    for l%=0 to 30
    	co%=0
    	for c%=0 to 15
    		dat=trim(iSheet.getCellByPosition(c%,l%).string)
    		if dat<>"" then
    			oSheet.getCellByPosition(co%,l%).string=dat
    			co%=co%+1
    		end if
    	next
    next
    end sub
    La partie critique est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dat=trim(iSheet.getCellByPosition(c%,l%).string)
    		if dat<>"" then
    			oSheet.getCellByPosition(co%,l%).string=dat
    Merci d'avance.

    JD

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 231
    Par défaut
    hello,
    tu peux faire comme cela par exemple (pour les propriétés gras,italique,souligné) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub test_copieformat()
    iSheet=ThisComponent.Sheets.getByName("Feuille1")
    oSheet=ThisComponent.Sheets.getByName("Feuille2")
    for l%=0 to 30
    	co%=0
    	for c%=0 to 15
    		dat=trim(iSheet.getCellByPosition(c%,l%).string)
    		if dat<>"" then
    			oSheet.getCellByPosition(co%,l%).string=dat
    			oSheet.getCellByPosition(co%,l%).CharWeight = iSheet.getCellByPosition(c%,l%).CharWeight
    			oSheet.getCellByPosition(co%,l%).CharPosture = iSheet.getCellByPosition(c%,l%).CharPosture
    			oSheet.getCellByPosition(co%,l%).CharUnderline = iSheet.getCellByPosition(c%,l%).CharUnderline
    			co%=co%+1
    		end if
    	next
    next
    end sub
    tu pourrais aussi passer par des styles de cellules nommés.
    Le code à l'air lent à s'exécuter, il faudrait utiliser des plages ( par exemple une seule copie par ligne ou colonne) .

    Ami calmant, J.P

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copier coller le contenu d'une page internet
    Par Maume dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/02/2014, 14h34
  2. Copier/coller la valeur d'une cellule selon recherche
    Par bastienb1 dans le forum Excel
    Réponses: 2
    Dernier message: 27/05/2013, 14h06
  3. Copier à volonté le contenu d'une cellule
    Par rousskoff dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/11/2012, 14h34
  4. [XL-2003] Copier/coller la valeur d'une cellule
    Par mas17 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/03/2012, 09h08
  5. Copier/coller le contenu d'une Listbox
    Par Puntillo33 dans le forum VBA Access
    Réponses: 4
    Dernier message: 03/06/2011, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo