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 :

Macro - comment, en fonction du contenu d'une cellule, créer une ligne ou bien passer à la ligne suivante


Sujet :

OpenOffice & LibreOffice

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Macro - comment, en fonction du contenu d'une cellule, créer une ligne ou bien passer à la ligne suivante
    Bonjour,

    j'ai commencé il y a quelques jours avec les macros et j'ai réussi à enregistrer une première macro assez simple et à la placer derrière un raccourci clavier.
    Cette macro permet de :
    - à partir d'une cellule sur une ligne d'origine
    - créer une ligne vierge au dessus de la ligne de focus
    - copier le contenu de la cellule "Raison sociale"
    - déplacer le curseur vers le haut
    - coller le contenu de la cellule
    - déplacer le curseur vers la première cellule de la nouvelle ligne créée
    - écrire un libellé [Société] dans cette cellule de la nouvelle ligne
    - ramener le curseur sur la cellule d'origine
    - déplacer le curseur d'une ligne vers le bas

    Par exemple, la situation de départ montre :

    Nom : yz301.png
Affichages : 272
Taille : 9,0 Ko

    où le curseur est sur la cellule D2
    Je lance la macro (par un raccourci clavier CTRL-Q) et la situation de fin montre :

    Nom : yz302.png
Affichages : 278
Taille : 9,4 Ko

    donc j'ai créé une nouvelle ligne Société au dessus du contact de cette société.
    Je pourrais faire ça manuellement pour les 150 lignes de mon fichier, càd faire 150 CTRL-Q mais c'est fastidieux et "pas malin".

    Je cherche donc à améliorer la chose de manière à ce que la macro s'exécute toute seule càd se lance autant de fois que nécessaire jusqu'à la fin des lignes existantes. Ca serait une première étape dans ma compréhension des choses.

    Mais, encore mieux, il y a certaines lignes où la macro ne doit pas être exécutée, par exemple :

    Nom : yz303.png
Affichages : 296
Taille : 12,4 Ko

    je me trouve sur la ligne 6 et je m'apprête à ajouter une nouvelle ligne pour la société "ACTEMIUM" : lorsque j'aurai ajouté cette nouvelle ligne, je me rends compte que la ligne 7 contient également ACTEMIUM, et je ne devrais pas créer une nouvelle ligne Société puisqu'elle aura déjà été créée à partir de la ligne 6.
    Donc la macro doit repérer que le contenu de la cellule D7 est égal au contenu de la cellule D6 et doit donc juste passer à la ligne suivante. Et à la ligne suivante, le contenu de la cellule D8 n'est pas égal au contenu de la cellule D7 et donc la macro s'exécute et crée une nouvelle ligne Société.

    Le résultat après quelques lignes donne :

    Nom : yz304.png
Affichages : 281
Taille : 14,2 Ko

    Je joins un fichier d'exemple test.ods en PJ

    Merci pour l'aide que vous pourrez m'apporter

    JP
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 261
    Points : 388
    Points
    388
    Par défaut Macro - comment, en fonction du contenu d'une cellule, créer une ligne ou bien passer à la ligne suivante
    Bonsoir,

    Ton fichier que tu as transmis ne contient pas ta macro. Il aurait été souhaitable qu'elle y soit histoire de voir comment tu t'y prends.
    Je vais de mon côté te faire une ébauche.

    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour Mobydick,

    merci de prendre du temps sur mon sujet.
    Bizarre que la macro ne soit pas dans le fichier chargé : quand je réouvre le fichier sur mon pc, le CTRL-Q exécute bien la macro.
    Voici le code-source de la macro (libellée "AjoutSociete") qui est sur mon PC :

    Nom : yz307.png
Affichages : 252
Taille : 55,9 Ko

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    REM  *****  BASIC  *****
     
    Sub Main
     
    End Sub
     
     
     
     
     
    sub AjoutSociete
    rem ----------------------------------------------------------------------
    rem define variables
    dim document   as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
    rem get access to the document
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
     
    rem ----------------------------------------------------------------------
    dim args1(0) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "Flags"
    args1(0).Value = "R"
     
    dispatcher.executeDispatch(document, ".uno:InsertCell", "", 0, args1())
     
    rem ----------------------------------------------------------------------
    dim args2(1) as new com.sun.star.beans.PropertyValue
    args2(0).Name = "By"
    args2(0).Value = 1
    args2(1).Name = "Sel"
    args2(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
     
    rem ----------------------------------------------------------------------
    dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
     
    rem ----------------------------------------------------------------------
    dim args4(1) as new com.sun.star.beans.PropertyValue
    args4(0).Name = "By"
    args4(0).Value = 1
    args4(1).Name = "Sel"
    args4(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args4())
     
    rem ----------------------------------------------------------------------
    dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())
     
    rem ----------------------------------------------------------------------
    dim args6(1) as new com.sun.star.beans.PropertyValue
    args6(0).Name = "By"
    args6(0).Value = 1
    args6(1).Name = "Sel"
    args6(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args6())
     
    rem ----------------------------------------------------------------------
    dim args7(1) as new com.sun.star.beans.PropertyValue
    args7(0).Name = "By"
    args7(0).Value = 1
    args7(1).Name = "Sel"
    args7(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args7())
     
    rem ----------------------------------------------------------------------
    dim args8(1) as new com.sun.star.beans.PropertyValue
    args8(0).Name = "By"
    args8(0).Value = 1
    args8(1).Name = "Sel"
    args8(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args8())
     
    rem ----------------------------------------------------------------------
    dim args9(1) as new com.sun.star.beans.PropertyValue
    args9(0).Name = "By"
    args9(0).Value = 1
    args9(1).Name = "Sel"
    args9(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args9())
     
    rem ----------------------------------------------------------------------
    dim args10(1) as new com.sun.star.beans.PropertyValue
    args10(0).Name = "By"
    args10(0).Value = 1
    args10(1).Name = "Sel"
    args10(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoLeft", "", 0, args10())
     
    rem ----------------------------------------------------------------------
    dim args11(0) as new com.sun.star.beans.PropertyValue
    args11(0).Name = "StringName"
    args11(0).Value = "société"
     
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args11())
     
    rem ----------------------------------------------------------------------
    dim args12(1) as new com.sun.star.beans.PropertyValue
    args12(0).Name = "By"
    args12(0).Value = 1
    args12(1).Name = "Sel"
    args12(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args12())
     
    rem ----------------------------------------------------------------------
    dim args13(0) as new com.sun.star.beans.PropertyValue
    args13(0).Name = "StringName"
    args13(0).Value = "société"
     
    dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args13())
     
    rem ----------------------------------------------------------------------
    dim args14(1) as new com.sun.star.beans.PropertyValue
    args14(0).Name = "By"
    args14(0).Value = 1
    args14(1).Name = "Sel"
    args14(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args14())
     
    rem ----------------------------------------------------------------------
    dim args15(1) as new com.sun.star.beans.PropertyValue
    args15(0).Name = "By"
    args15(0).Value = 1
    args15(1).Name = "Sel"
    args15(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoUp", "", 0, args15())
     
    rem ----------------------------------------------------------------------
    dim args16(1) as new com.sun.star.beans.PropertyValue
    args16(0).Name = "By"
    args16(0).Value = 1
    args16(1).Name = "Sel"
    args16(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args16())
     
    rem ----------------------------------------------------------------------
    dim args17(1) as new com.sun.star.beans.PropertyValue
    args17(0).Name = "By"
    args17(0).Value = 1
    args17(1).Name = "Sel"
    args17(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args17())
     
    rem ----------------------------------------------------------------------
    dim args18(1) as new com.sun.star.beans.PropertyValue
    args18(0).Name = "By"
    args18(0).Value = 1
    args18(1).Name = "Sel"
    args18(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args18())
     
    rem ----------------------------------------------------------------------
    dim args19(1) as new com.sun.star.beans.PropertyValue
    args19(0).Name = "By"
    args19(0).Value = 1
    args19(1).Name = "Sel"
    args19(1).Value = false
     
    dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args19())
     
     
    end sub
    en espérant que ça peut te permettre d'avancer.

    Merci
    JP

  4. #4
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 261
    Points : 388
    Points
    388
    Par défaut Macro - comment, en fonction du contenu d'une cellule, créer une ligne ou bien passer à la ligne suivante
    Bonsoir,

    Dans un premier temps tu dis :
    Bizarre que la macro ne soit pas dans le fichier chargé : quand je réouvre le fichier sur mon pc, le CTRL-Q exécute bien la macro.
    C'est normal car tu l'as enregistré dans la bibliothèque "Standard" de LibreOffice et non pas dans la bibliothèque de ton document "Standard"

    Ta macro a été faite avec l'enregistreur de macro et dans ta problématique il faut écrire le code à la main.

    Revenons à ton besoin

    Si j'ai bien compris ta problématique, tu cherches à créer une ligne avec le mot société pour les raisons sociales qui n'en ont pas.
    Si c'est bien çà, voici le résultat en pièce jointe.
    Pour bien voir et pour l'exemple j'ai colorié les lignes avec l'étiquette "société"

    J'ai mis un bouton sur la feuille pour lancer la macro qui se trouve dans le module1 du document.

    Cordialement
    Fichiers attachés Fichiers attachés
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2021
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour Moby,

    désolé pour le temps de réponse, vacances oblige...

    J'ai bien compris (et donc appris grace à toi) le pbm d'embarquement manqué de ma macro, ça a du sens. J'ai tenté de la déplacer pour l'embarquer, elle s'est bien déplacée mais est du coup inutilisable (et je n'arrive pas à la remettre à sa place d'origine, bref le bordel).

    Ceci dit, vu que tu me proposes une solution directe, je la regarde et je constate que le bouton "Lancer la macro" réalise EXCELLEMENT BIEN ce que je voulais atteindre : tu as dépassé de 150% mon objectif le plus optimiste.

    2 questions :
    - je n'ai pas besoin du bouton, je peux exécuter la macro directement depuis Outils/Macro/ etc / puis bouton "Exécuter", on est d'accord ?
    - je vais utiliser cette macro sur différents fichiers, comment est-ce que je peux l'exporter / importer sur un autre fichier ?

    Merci de ton aide PRECIEUSE...

    JP

  6. #6
    Membre averti Avatar de Mobydick_62
    Homme Profil pro
    Retraité
    Inscrit en
    Septembre 2009
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2009
    Messages : 261
    Points : 388
    Points
    388
    Par défaut Macro - comment, en fonction du contenu d'une cellule, créer une ligne ou bien passer à la ligne suivante
    Bonjour,
    Pour répondre à tes questions : dans l'ordre :

    je n'ai pas besoin du bouton, je peux exécuter la macro directement depuis Outils/Macro/ etc / puis bouton "Exécuter", on est d'accord ?
    Oui tu peux supprimer le bouton. Pour l'exécution de cette macro il est préférable d'intégrer la commande dans un menu (voir mon tuto)

    je vais utiliser cette macro sur différents fichiers, comment est-ce que je peux l'exporter / importer sur un autre fichier ?
    Oui tu peux importer cette macro. Le mieux est de l'importer dans la bibliothèque de libre office. Elle sera donc disponible pour tous les fichiers.

    Par contre, la macro actuelle se lance sur la feuille : "présentiel+distanciel"
    Si les autres fichiers que tu vas utiliser n'ont pas forcément la feuille : "présentiel+distanciel", il sera donc préférable de changer le code suivant (en début de macro)
    Remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oFeuille = ThisComponent.getSheets.getByName("présentiel+distanciel")
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oFeuille = ThisComponent.getCurrentController().getActiveSheet()
    Ainsi la macro s’exécutera sur la feuille active du document à l'écran.

    reviens vers moi si souci.

    Cordialement
    Images attachées Images attachées
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

Discussions similaires

  1. Réponses: 8
    Dernier message: 08/03/2018, 10h13
  2. Comment récupérer des variables contenues dans une fonction ?
    Par Spixz dans le forum Général Python
    Réponses: 2
    Dernier message: 03/04/2016, 11h10
  3. [Toutes versions] comment récupérer via VBA les arguments d’une fonction excel contenue dans une cellule ?
    Par popaul88 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/08/2014, 18h27
  4. [XL-2007] Macro remplir une cellule en fonction du contenu d'une autre cellule
    Par Coco_O dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/05/2011, 20h16
  5. [VBA-E] Lancement d'une macro en fonction du contenu d'une cellule
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2007, 15h13

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