[Résolu][Calc] Import de feuilles depuis plusieurs classeurs

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 !
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 11:32

[Résolu][Calc] Import de feuilles depuis plusieurs classeurs

Message par coincoin »

Salut,

Je retente donc ma chance ici, parce qu'à priori, je ne devrais pas pouvoir faire l'économie d'une macro ;-)
Voici donc ce que je veux faire:

Lorsque j'insère une nouvelle feuille, je choisis l'option "à partir d'un fichier", mais je ne peux effectivement sélectionner qu'un fichier à la fois ce qui va m'obliger à répéter l'action 50 fois :evil:
Comment faire pour tout importer d'un coup (chaque fichier ne comportant qu'un seule feuille)

Par exemple, je veux importer (en une seule fois) la feuille de l'élève A et de l'élève B dans mon classeur prof:
Pièces jointes
eleveB.ods
(48.85 Kio) Téléchargé 128 fois
eleveA.ods
(48.8 Kio) Téléchargé 127 fois
prof.ods
(48.76 Kio) Téléchargé 143 fois
Dernière modification par micmac le 12 mai 2015 23:14, modifié 2 fois.
Raison : Ajout de la coche
libreOffice 4.3.6.2 sous Windows7
Avatar de l’utilisateur
TheHache
PassiOOnné
PassiOOnné
Messages : 653
Inscription : 02 déc. 2009 10:43

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par TheHache »

Bonjour,

On comprend mieux ce que tu veux avec les fichiers joints (On le dit souvent !). Du coup, une macro n'est peut-être pas nécessaire !

Puisque tu connais la structure de tes fichiers élèves il serait alors plus simple de récupérer leurs réponses avec une liaison de ton classeur 'Prof' vers tes fichiers élèves.

Tu connais le nom de tes élèves, le nom du fichier de leurs réponses est leur nom, donc les liaisons ne devraient pas poser de problème. Sois tu fais une liaison de leurs réponses dans une feuille à leur nom dans ton classeur 'Prof', soit tu fais un récapitulatif de leurs réponses dans une feuille 'Récap'.

Le forum doit bien avoir un sujet sur les liaisons (je n'ai pas cherché). S'il n'y a pas, ouvre un nouveau sujet, on t'aidera. :wink:

@+
LibO 7.4.4.2 - Windows 10 Pro
AOO 4.1.13 - Windows 10 Pro
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 11:32

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par coincoin »

Salut,

Merci pour ta proposition, mais avec des élèves de collège, je suis sûr que sur 300 élèves, une bonne 50aine ne respecteront pas le format d'écriture de nom de fichier que j'aurais imposé, donc je ne peux malheureusement pas miser sur cette option.

c'est pourquoi je souhaite passer par l'importation de feuille multiple, même s'il m'en coûte :?
libreOffice 4.3.6.2 sous Windows7
Avatar de l’utilisateur
TheHache
PassiOOnné
PassiOOnné
Messages : 653
Inscription : 02 déc. 2009 10:43

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par TheHache »

coincoin a écrit :...une bonne 50aine ne respecteront pas le format d'écriture de nom de fichier que j'aurais imposé...
Le format d'écriture de nom de fichier peut être "forcé" par macro.

Il serait plus simple et moins coûteux en temps de développement de lier tes classeurs et d'obliger tes élèves à respecter le formalisme de sauvegarde par macro.

@+
LibO 7.4.4.2 - Windows 10 Pro
AOO 4.1.13 - Windows 10 Pro
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par Piaf »

Bonjour
Un petit exemple mais qui doit remplir certaines conditions.
  • Le fichier Prof et les fichiers élèves doivent être dans le même répertoire.
  • Les feuilles à importer doivent avoir le même nom que le classeur sans l'extension.

Code : Tout sélectionner

Option Explicit

Global monTab() as String

Sub ImporterFeuilles
Dim oDoc as Object, mesFeuilles as Object, maFeuille as Object
Dim sURL as String, x as Integer,adrDocSource as String, NomFeuille as String
	oDoc = thisComponent
	sURL = getDirectory(thisComponent.getURL())
	SelectionClasseurs(sURL)
	mesFeuilles = oDoc.Sheets
	For x = LBound(monTab) To UBound(monTab)
		adrDocSource = monTab(x)
		NomFeuille = ConvertFromUrl(getFileNameOnly(adrDocSource))
		mesFeuilles.insertNewByName(NomFeuille, mesFeuilles.Count)
		maFeuille = mesFeuilles.getByName(NomFeuille)
		maFeuille.link(adrDocSource, NomFeuille, "", "", com.sun.star.sheet.SheetLinkMode.NORMAL )
		maFeuille.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)		
	Next
End Sub

Sub SelectionClasseurs(monURL as String)
Dim FP As Object, lesClasseurs() As String
Dim x As Long
	FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
	FP.DisplayDirectory = monURL
	FP.appendFilter("Documents Calc", "*.ods")
	FP.CurrentFilter = "Documents Calc"
	FP.MultiSelectionMode = True
	FP.Title = "Choisissez le ou les classeurs à importer"
	If FP.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
		lesClasseurs() = FP.Files
		If UBound(lesClasseurs) > 0 Then
			For x = 1 to UBound(lesClasseurs)
			reDim Preserve monTab(x - 1)
				monTab(x - 1) = lesClasseurs(x)
			Next
		Else
			reDim monTab(0)
			monTab(0) = lesClasseurs(0)
		End If
	End If
	FP.dispose
End Sub
Pas testé sur 50 fichiers.
A+
Pièces jointes
Importation.zip
(47.41 Kio) Téléchargé 148 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 11:32

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par coincoin »

Les conditions ne me posent pas de soucis, j'essaie ça sans tarder merci
libreOffice 4.3.6.2 sous Windows7
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 11:32

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par coincoin »

Piaf a écrit :Bonjour
Un petit exemple mais qui doit remplir certaines conditions.
  • Le fichier Prof et les fichiers élèves doivent être dans le même répertoire.
  • Les feuilles à importer doivent avoir le même nom que le classeur sans l'extension.

Code : Tout sélectionner

Option Explicit

Global monTab() as String

Sub ImporterFeuilles
Dim oDoc as Object, mesFeuilles as Object, maFeuille as Object
Dim sURL as String, x as Integer,adrDocSource as String, NomFeuille as String
	oDoc = thisComponent
	sURL = getDirectory(thisComponent.getURL())
	SelectionClasseurs(sURL)
	mesFeuilles = oDoc.Sheets
	For x = LBound(monTab) To UBound(monTab)
		adrDocSource = monTab(x)
		NomFeuille = ConvertFromUrl(getFileNameOnly(adrDocSource))
		mesFeuilles.insertNewByName(NomFeuille, mesFeuilles.Count)
		maFeuille = mesFeuilles.getByName(NomFeuille)
		maFeuille.link(adrDocSource, NomFeuille, "", "", com.sun.star.sheet.SheetLinkMode.NORMAL )
		maFeuille.setLinkMode(com.sun.star.sheet.SheetLinkMode.NONE)		
	Next
End Sub

Sub SelectionClasseurs(monURL as String)
Dim FP As Object, lesClasseurs() As String
Dim x As Long
	FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
	FP.DisplayDirectory = monURL
	FP.appendFilter("Documents Calc", "*.ods")
	FP.CurrentFilter = "Documents Calc"
	FP.MultiSelectionMode = True
	FP.Title = "Choisissez le ou les classeurs à importer"
	If FP.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK Then
		lesClasseurs() = FP.Files
		If UBound(lesClasseurs) > 0 Then
			For x = 1 to UBound(lesClasseurs)
			reDim Preserve monTab(x - 1)
				monTab(x - 1) = lesClasseurs(x)
			Next
		Else
			reDim monTab(0)
			monTab(0) = lesClasseurs(0)
		End If
	End If
	FP.dispose
End Sub
Pas testé sur 50 fichiers.
A+
Après plusieurs tentative, j’exécute la macro qui me demande bien de choisir un fichier à importer, mais un seul, et ça ne résout pas mon problème... à moins que je m'y prenne mal?
libreOffice 4.3.6.2 sous Windows7
Avatar de l’utilisateur
MrPropre
MOOdérateur
MOOdérateur
Messages : 1139
Inscription : 01 oct. 2008 18:54

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par MrPropre »

Bonjour,

Évitez de citer l'ensemble du message précédent, cela rend la lecture très difficile.
coincoin a écrit :à moins que je m'y prenne mal?
Image
Comment joindre un fichier au format ODF
Penser également à dépersonnaliser le fichier joint.
Nettoyez votre PC du piratage, utilisez des logiciels libres à chaque lavage.
Une seule dose de OpenOffice suffit à éliminer durablement toute trace de MS-Office.
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par Piaf »

Bonjour
coincoin a écrit :Après plusieurs tentative, j’exécute la macro qui me demande bien de choisir un fichier à importer, mais un seul
Si tu ne sélectionnes qu'un fichier, la macro n'importera qu'un fichier, le titre de la boite de dialogue de sélection est : Choisissez le ou les classeurs à importer.
Teste en sélectionnant plusieurs fichiers.
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 11:32

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par coincoin »

oui, c'est bien ce que j'ai voulu faire, mais le browser qui s'ouvre quand j’exécute la macro ne me permet pas de choisir les deux fichiers élèves, c'est soit l'un, soit l'autre :marto:
libreOffice 4.3.6.2 sous Windows7
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 19:25

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par zeguedon »

Bonjour,
coincoin a écrit :mais le browser qui s'ouvre quand j’exécute la macro ne me permet pas de choisir les deux fichiers élèves, c'est soit l'un, soit l'autre :marto:
Même en appuyant sur la touche Ctrl ? (Désolé je n'ai pas Windows pour tester)

A+
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 17:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par Grenouille »

Bonsoir,
coincoin a écrit : mais le browser qui s'ouvre quand j’exécute la macro ne me permet pas de choisir les deux fichiers élèves
Le dialogue permet la multi sélection en maintenant la touche Ctrl ou Maj appuyée.
C'est un principe lié à ton système d'exploitation :
h**p://windows.microsoft.com/fr-fr/windows/select-multiple-files-folders#1TC=windows-7

A+
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 11:32

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par coincoin »

oui, merci je connais ce principe :wink: ... j'ai également essayer une sélection en encadrant les deux fichiers avec la souris mais je confirme que la sélection est exclusive ...

:?:
libreOffice 4.3.6.2 sous Windows7
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par Piaf »

Re
Teste en rempalcant la ligne

Code : Tout sélectionner

FP = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
Par

Code : Tout sélectionner

FP = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 11:32

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Message par coincoin »

bien vu, le browser de sélection n'est plus le même et je peux effectivement importer mes deux fichiers d'un coup. :bravo:
Merci encore pour votre implication :super:
libreOffice 4.3.6.2 sous Windows7
coincoin
Membre lOOyal
Membre lOOyal
Messages : 37
Inscription : 06 mai 2015 11:32

Re: [Résolu][Calc] Import de feuilles depuis plusieurs class

Message par coincoin »

Bonjour,

Je déterre ce fil où j'avais trouvé mon bonheur il y a quatre ans, car depuis la dernière maj de libreoffice (6.3.1.2 x64), le bouton qui permet d'activer la macro se met à clignoter dès que je double clique sur une cellule, Le fonctionnement du logiciel se trouve alors grandement ralenti, même si toute les fonctionnalités, y compris la macro en question, sont bien là.

J'ai essayé de supprimer le bouton pour en générer un autre, mais le problème semble entier.

Je vous joint l'un de mes fichiers pour illustrer mes dires

Par avance, merci.
Pièces jointes
CR-Chauff1-test.ods
(21.54 Kio) Téléchargé 115 fois
libreOffice 4.3.6.2 sous Windows7
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9222
Inscription : 28 août 2010 10:45

Re: [Résolu][Calc] Import de feuilles depuis plusieurs class

Message par micmac »

coin-coin a écrit :Je déterre ce fil
Déterrage = verrouillage.
Il appartient à l'auteur de faire un nouveau sujet en rappelant le fil du sujet déterré par un lien vers ce dernier.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Verrouillé