Page 1 sur 1

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

Publié : 07 mai 2015 09:32
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:

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 07 mai 2015 11:22
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:

@+

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 07 mai 2015 12:00
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 :?

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 07 mai 2015 12:41
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.

@+

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 07 mai 2015 12:47
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+

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 07 mai 2015 17:19
par coincoin
Les conditions ne me posent pas de soucis, j'essaie ça sans tarder merci

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 11:01
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?

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 12:22
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.

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 13:30
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+

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 15:37
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:

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 15:51
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+

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 15:53
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+

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 17:28
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 ...

:?:

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 17:42
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+

Re: [Calc] Import de feuilles depuis plusieurs classeurs

Publié : 12 mai 2015 20:16
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:

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

Publié : 07 nov. 2019 13:57
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.

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

Publié : 07 nov. 2019 14:03
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.