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] Macro pour modifier les propriétés de contrôle d'un formulaire [LibreOffice][Tableur]


Sujet :

OpenOffice & LibreOffice

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable association
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable association

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut [BASIC] Macro pour modifier les propriétés de contrôle d'un formulaire
    Bonjour,

    dans une feuille CALC j'ai ajouté une "Zone de liste" (une liste déroulante qui permet de sélectionner un élément parmi plusieurs). Avec une macro je rajoute des éléments à la liste. Comment puis-je modifier la plage de cellule source avec ma macro ?

    Ci-joint la capture d'écran correspondante. On y voit la zone de liste et ses propriétés ("Contrôle") ouvertes à l'onglet "Données" faisant apparaître la propriété "Plage de cellule source" ?


    Merci pour votre aide

    Nom : Capture-1.jpg
Affichages : 1898
Taille : 102,9 Ko

  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 pour modifier les propriétés de contrôle d'un formulaire
    Bonjour,
    Pour pouvoir t'aider convenablement il aurait été utile de joindre ton fichier. S'il contient des données que tu ne veux pas faire voir il suffit de joindre ce fichier anonymisé avec des données bidons.
    A défaut voici un exemple de code, qu'il faudra adapter.
    Auparavant dans les propriétés du contrôle il ne faut rien mettre dans la zone "Plage de cellule source. (onglets données).

    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
    Private tabNoms() As String 
     
    Sub ChargementListe()
      Dim monCtrl As Object, vueCtrl As Object, lesFormulaires As Object, unFormulaire As Object
      Dim oFeuille As Object
      Dim sNom As String
      oFeuille = ThisComponent.getSheets.getByName("Feuille1")
      lesFormulaires = oFeuille.DrawPage.Forms
      unFormulaire = lesFormulaires.getByName("Formulaire")
      monCtrl = unFormulaire.getByName("MaListe")
      vueCtrl = ThisComponent.CurrentController.getControl(monCtrl)
      'J'efface l'ancienne liste du contrôle pour éviter que la nouvelle se rajoute à la suite de l'ancienne
      Dim i As Integer, X As Integer
      i = vueCtrl.getItemCount() 
      vueCtrl.RemoveItems( x - 1, i )
      'Chargement liste à jour
      Call RechargementListeNoms()
      vueCtrl.addItems(tabNoms(),0)
     
    End Sub
     
    'Lit dans la colonne A les noms pour y rajouter éventuellement les nouveaux
    Sub RechargementListeNoms()
     Dim oFEuille As Object, oCell As Object 
     Dim i As Integer, f As Integer 
     f=0 
     oFeuille = ThisComponent.getSheets.getByName("Feuille1") 
     For i = 1 To 100
      oCell = oFeuille.getCellRangeByName("A" & i)
      If oCell.String <> "" Then 
       Redim preserve tabNoms(f) 
    	tabNoms(f)= oCell.String 
    	f=f+1
      End If 
     Next i 
    End Sub
    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

  3. #3
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 275
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 275
    Points : 1 992
    Points
    1 992
    Par défaut
    Pourquoi utiliser un contrôle Zone de liste ?
    Il y a la fonctionnalité de liste de validité.
    Elle permet une implémentation plus simple sans avoir recours aux macros.
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Responsable association
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable association

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Fichier
    Bonjour,

    vous avez parfaitement raison. Voilà le fichier en pièce jointe. J'ai supprimé toutes les protections pour un utilisateur. Ce programme permet de remplir une fiche de temps pour un employé (appelé ici animateur). Le bouton "Ajout animateur" permet comme son nom l'indique d'ajouter un animateur supplémentaire. Et la zone de liste permet de choisir l'animateur à afficher. Cette zone est par défaut sur une certaine plage (en bas de la feuille de calcul, colonne A). Mais lorsqu'on ajoute un animateur, j'ai besoin d'actualiser la plage de cellule source.
    Je vais regarder votre code ce week-end. Si j'y arrive, je posterai la solution.

    Cordialement

    Citation Envoyé par Mobydick_62 Voir le message
    Bonjour,
    Pour pouvoir t'aider convenablement il aurait été utile de joindre ton fichier. S'il contient des données que tu ne veux pas faire voir il suffit de joindre ce fichier anonymisé avec des données bidons.
    A défaut voici un exemple de code, qu'il faudra adapter.
    Auparavant dans les propriétés du contrôle il ne faut rien mettre dans la zone "Plage de cellule source. (onglets données).

    Cordialement
    Fichiers attachés Fichiers attachés

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable association
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable association

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Je ne suis pas certain de comprendre. Est-ce que l'explication de mon problème explique bien pourquoi j'ai besoin d'accéder au contrôle de la zone de liste par macro ? Ou existe-t-il une autre solution plus simple que je ne vois pas ?

    Cordialement

    Citation Envoyé par Bidouille Voir le message
    Pourquoi utiliser un contrôle Zone de liste ?
    Il y a la fonctionnalité de liste de validité.
    Elle permet une implémentation plus simple sans avoir recours aux macros.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Responsable association
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable association

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour Mobydick_62

    j'ai un souci avec la macro que tu as donnée.
    Je ne comprends pas ce qu'est "X" (ou "x" car je pense qu'il y a une erreur de casse de caractère dans le message initial).
    D'ailleurs j'obtiens une erreur (peu importe la casse du "X") :
    Nom : Capture-1.png
Affichages : 1628
Taille : 58,9 Ko
    Je comprends que la ligne 127 permet d'accéder à la zone de liste.
    J'imagine que la ligne128 permet d'accéder au contrôle de la zone de liste.
    Mais ensuite, je suis perdu. Comment sait-on que c'est la "Plage de cellules source" que l'on modifie et pas la "Cellule liée" ou un autre élément du contrôle ? En d'autres termes que fait la ligne 131 ? Et comment faire si on souhaite accéder justement à un autre élément du contrôle (ce n'est pas mon cas aujourd'hui mais sait-on jamais) ?

    Merci de ton aide

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable association
    Inscrit en
    Mai 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable association

    Informations forums :
    Inscription : Mai 2018
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour Mobydick_62

    l'erreur que j'avais était due au fait que j'avais gardé remplie la "Plage de cellules source" de l'onglet "Données".
    Comme X n'était pas défini, j'ai remplacé X-1 par 0. J'imagine que X servait à autre chose dans ta routine. Cela marche. Et c'est normal :
    - removeItems a comme arguments le premier élément à supprimer (donc 0 ici) et le nombre d'éléments supprimer.
    - addItems a comme arguments les éléments à ajouter et le numéro du rang où il faut les ajouter. Comme tout a été supprimer le rang est 0.
    Voilà donc le fichier qui fonctionne.
    Je comprends que ce que je voulais faire initialement est impossible : il faut passer par cette liste.

    Merci Mobydick_62 de m'avoir mis sur la voie.

    Cordialement
    Fichiers attachés Fichiers attachés

  8. #8
    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 pour modifier les propriétés de contrôle d'un formulaire
    Bonjour,
    En effet j'ai du faire une erreur dans mon code. Par paresse j'ai fait un copier coller de ce code que j'utilise ailleurs dans mes tableurs. Et mon X ou x était à 1. Donc la raison du X-1 pour qu'il commence à l'élément 0
    Content que cela a pu t'aider.
    Cordialement
    Libre Office Version: 7.4.3.2 (x64)
    Windows 10

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

Discussions similaires

  1. [XL-2010] Pour modifier les propriétés d'un contrôle ActiveX
    Par goofyto8 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/06/2015, 20h24
  2. [XL-2007] Modifier les propriétés d'un contrôle
    Par Walterbelo dans le forum Excel
    Réponses: 2
    Dernier message: 01/11/2012, 18h06
  3. Réponses: 1
    Dernier message: 19/10/2011, 11h16
  4. Réponses: 4
    Dernier message: 11/05/2009, 14h48
  5. Réponses: 3
    Dernier message: 08/04/2007, 13h29

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