[Résolu][Calc] Modifier une liste et un formulaire

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
baptiste971
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 03 déc. 2016 09:47

[Résolu][Calc] Modifier une liste et un formulaire

Message par baptiste971 »


La modération vous a écrit: Les termes via une macro supprimés du titre de votre sujet car implicites dans la section Macros

Bonjour,

Après plusieurs recherche sur le forum je ne trouve pas la réponse à ma question. Bien souvent les solutions proposées ne fonctionnent pas sur mon fichier ou me renvoi un message d'erreur lorsque je fais un copier-coller du code.

MA question la suivante:
Quel est le code macro à implanter sur mon bouton pour que les données du formulaire soit copier (là dessus pas de soucis) mais surtout pour qu'l fasse une recherche de valeur sur un deuxième feuillet afin de coller en transposer les informations en lieu et place des anciennes?

Pour information: après avoir fouiller partout j'ai abandonner la fonction recherchev qui ne fonctionne absolument pas sur mon document et je suis passé par la fonction index + equiv qui fonctionne parfaitement pour remplir mon tableau à partir de la liste déroulante (afin d'afficher la liste des données qui vont être modifier manuellement)
PAr contre je ne sais pas comment implanter cette fonction index+equiv dans une macro (si c'est bien là, la solution)



ici mon fichier:
baptiste971_modif_list.ods
Merci du temps que vous m'accorderez, j'apprends pas à pas à m'en sortir grâce à ce forum et aux contributeurs
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par baptiste971 le 07 déc. 2016 16:09, modifié 2 fois.
Libre office 5.2 sous Windows 10
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 467
Inscription : 10 nov. 2012 17:05

Re: [Calc]Comment modifier une liste via une macro et un for

Message par ThierryT »

J'utilise souvent une fonction qui permet de rechercher dans une zone donnée d'une feuille donnée un texte.
La fonction RechercheTexte dans le fichier ci-joint.
J'ai mis en œuvre son utilisation et la recherche de la ligne dans la feuille concernée => appui sur le bouton modifié.

ATTENTION, dans ta liste de choix, tu as ajouté les entêtes de la feuille "f"!!!

Je poursuis avec l'enregistrement dans la zone trouvée...A suivre.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc]Modifier une liste et un formulaire

Message par Hubert Lambert »

Bonjour,

Ci-joint une approche utilisant les fonctions natives de Calc, via le service FunctionAccess :

Code : Tout sélectionner

Sub modifier(ev)
    doc = thiscomponent
    FA = createUnoService("com.sun.star.sheet.FunctionAccess")
    '# Transposer les données à l'aide de la fonction Calc TRANSPOSE
    donnees = doc.NamedRanges.getByName("données").ReferredCells
    donnees = FA.callFunction("TRANSPOSE",array(donnees))
    '# Rechercher la référence à l'aide de la fonction Calc EQUIV (MATCH en anglais)
    noms = doc.NamedRanges.getByName("noms").ReferredCells
    ligne = FA.callFunction("MATCH", array(donnees(0)(1), noms, 0))
    if isempty(ligne) then
        msgbox("Référence non trouvée")
        '# ou sans doute insérer une nouvelle ligne...
    else
        range = doc.Sheets.getByName("f").getCellRangeByPosition(0, ligne, ubound(donnees(0)), ligne)
        range.setDataArray(donnees)    
    end if
End Sub
Cordialement.
 Ajout : J'ai ajouté une fonction pour récupérer les données lorsque la cellule D11 est modifiée : les formules INDEX/EQUIV fonctionnent bien, mais elles seront supprimées à chaque modification... 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Hubert Lambert le 07 déc. 2016 11:30, modifié 1 fois.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 467
Inscription : 10 nov. 2012 17:05

Re: [Calc]Modifier une liste et un formulaire

Message par ThierryT »

Le fichier finalisé avec toutes les fonctions en Basic.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
baptiste971
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 03 déc. 2016 09:47

Re: [Calc]Modifier une liste et un formulaire

Message par baptiste971 »

Bonjour,

Merci Thierry T,

le fichier fonctionne parfaitement mais hubert lambert à raison sur un point auquel je n'avais pas réfléchi c'est qu'en modifiant la cellule je perds ma formule pour remplir mon tableau à modifier. Je regarde plus en détail les solutions de hubert lambert aussi et je tente de bidouiller quelque chose. En tout cas merci ça me permet déjà d'avancer vers la solution

Bonne journée
Libre office 5.2 sous Windows 10
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 467
Inscription : 10 nov. 2012 17:05

Re: [Calc]Modifier une liste et un formulaire

Message par ThierryT »

La même chose dans le fichier joint avec des fonctions purement en basic sans appel aux fonctions de CALC.
En début de fichier, j'ai ajouté la définition des constantes pour la définition des zones sur chacune des feuilles.
On aurait pu effectuer la même chose en utilisant des plages nommées et faire appel à ces plages nommées dans le code ensuite mais cela aurait alourdi celui-ci.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
baptiste971
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 03 déc. 2016 09:47

[Résolu] [Calc]Modifier une liste et un formulaire

Message par baptiste971 »

Bonsoir,

Finalement le fichier de hubert lambert fonctionne parfaitement en tenant compte de mon tableau.

Merci à vous deux.

Thierry les fichiers que tu m'as envoyé sont une mine d'information (je prends un cours magistral en ce moment avec même si je ne comprends pas encore grand chose.

Et une chose m'interpelle. Pourquoi lorsque je fais un copier coller du code de hubert sur un autre fichier l'exécution me sort des messages d'erreurs alors que dans le sien tout va bien ce qui me conduit à partir de son fichier pour avancer ??

Dans tous les cas merci
Libre office 5.2 sous Windows 10
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Résolu][Calc] Modifier une liste et un formulaire

Message par Hubert Lambert »

En plus de la plage nommée que tu avais définies ("noms"), j'ai ajouté les plages "recherche" et "données", pour faciliter la récupération des plages.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
baptiste971
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 03 déc. 2016 09:47

Re: [Résolu][Calc] Modifier une liste et un formulaire

Message par baptiste971 »

Bonjour Hubert,

c'est ce que j'ai vu et c'est super comme fonctionnement.

J'ai pu ajouter ton code à mon fichier principal et du coup il ne reste qu'un problème que je n'avais pas anticipé. A savoir, le listing est alimenté via un autre formulaire qui insère une ligne en haut de feuille à chaque nouvelle entrée et du coup je ne vois pas très bien en quoi modifier ton code pour qu'il puisse prendre en compte cette nouvelle ligne pour la recherche et la modif de la macro.

Merci du coup de main je continue mes recherches
Libre office 5.2 sous Windows 10
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Résolu][Calc] Modifier une liste et un formulaire

Message par Hubert Lambert »

Il y a deux possibilités au moins :
- cocher l'option Outils->Options->LibreOffice Calc->Général->Étendre les références lors de l'insertion de colonnes/lignes, mais je n'ai jamais vraiment tester cette option globale...;
- remplacer la plage nommée par une plage de base de données (menu Données->Définir la plage), qui permet de définir la même option juste pour une plage (mais il faut inclure alors la première ligne).
Je joins une illustration de la seconde option, avec le code modifié.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
baptiste971
NOOuvel adepte
NOOuvel adepte
Messages : 13
Inscription : 03 déc. 2016 09:47

Re: [Résolu][Calc] Modifier une liste et un formulaire

Message par baptiste971 »

Bonjour,

Je comprends mieux la différence un petit détail qui change tout


Merci du coup de main le fichier fonctionne nickel
Libre office 5.2 sous Windows 10