[Résolu][Calc] Equivalence VBA de Workbooks.Open

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 !
vuerings
Fraîchement OOthentifié
Messages : 8
Inscription : 30 janv. 2018 19:27

[Résolu][Calc] Equivalence VBA de Workbooks.Open

Message par vuerings »

Bonjour,

Je suis plus que débutant en programmation.
je me suis essayé à un code VBA sous excel qui fonctionne super, mais je dois utiliser cette fonction avec le logiciel open office calc de mon travail.

Pourriez-vous m'aider à transformer ce code?

ou pourrais-je trouver de l'aide pour connaître les astuces d'une pareille transformation

Merci de votre aide

Voici ma petite procédure sous excel:

Code : Tout sélectionner

Private Sub Worksheet_Change(ByVal Target As range)

 Dim copie As Integer
 'Spécifie une variable "copie" et oblige du caractère numérique
 
    If range("A8") = "" Then
    'Vérification si la cellule A8 est vide
    
    Exit Sub
    'Sort de la procédure si condition remplie
    
    End If
    'Fin de la condition
    
If range("C8") = "" Then
'Vérification si la cellule C8 est vide

MsgBox "La cellule nombre de copies n'est pas remplie."
'Message à l'utilisateur si condition remplie

Exit Sub
'sortie de la procédure si condition remplie
End If
'Fin de la condition

    valeur = range("A8").Value
    'Indique que "valeur" est la case A8
    
    copie = range("C8").Value
    'Indique que  "copie" est la case C8

    Workbooks.Open Filename:="\\C:\Users\proprio\Desktop\" & valeur & ".xlsx"
    'Ouvre le document suivant valeur A7 modifiant le chemin d'accès du fichier à imprimer

   ActiveSheet.PrintOut Copies:=copie
    'Imprime la feuille ouverte en Nbr exemplaires suivant case C8

    ActiveWindow.Close
    'Ferme la feuille active

    range("A8").ClearContents
    'Vide le contenu de la cellule A7
    
range("C8").ClearContents
    'Vide le contenu de la cellule C7

End Sub
'Fin de la procédure

La modération vous a écrit: code mis entre balises [code] pour faciliter la lecture

Dernière modification par micmac le 30 janv. 2018 19:42, modifié 3 fois.
OpenOffice 4.1.5 sous Windows Vista
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9251
Inscription : 28 août 2010 08:45

Re: [Calc] code VBA à transformer

Message par micmac »

Bonjour et bienvenue sur le forum,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche.
Avez-vous remarqué comment étaient postées les autres questions ?

Lisez ce fil pour savoir quelle balise utiliser : https://forum.openoffice.org/fr/forum/s ... html#27295

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même sous peine de voir votre sujet verrouillé.


Votre titre n'est pas assez explicite et nous vous recommandons de le modifier afin qu'il synthétise au mieux ce que vous cherchez à faire, ceci dans le but d'enrichir notre base de connaissances.
N'oubliez pas que les termes "Macro" ou "OpenOffice" ne doivent pas être employés car il sont implicites.

votre signature a écrit : OpenOffice 2.4 sous Windows XP
Votre signature indique une version de OpenOffice qui n'est plus maintenue.
Est-ce une une erreur, un oubli, un choix, une obligation ?
Dans ce dernier cas, mentionnez-le dans votre signature par "Obligation de version".
Si c'est une version de LibreOffice que vous n'avez pas pu entrer, essayez de nouveau.

Pour connaître la version que vous possédez : https://forum.openoffice.org/fr/forum/v ... 582#p11582

Il est fortement recommandé d'être à jour de la dernière version : Soyez à jour de la dernière version

Dans votre signature il est nécessaire d'indiquer :
1- La version exacte de AOO ou LibO (AOO 4.1.5, LibO 5.3.7 par exemple) ;
2- La version exacte du système d'exploitation (Windows XP SP3, Vista SP2, Windows 7 SP1, Win 8.1, Win 10, Ubuntu 17.04, MacOS 10.13.3, par exemple).
Accès direct à votre signature pour la corriger.

Cordialement.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc] code VBA à transformer

Message par Churay »

Yop

La mode est au passage à AOO | LO.... Les traductions s'imposent...
ou pourrais-je trouver de l'aide pour connaître les astuces d'une pareille transformation
Ce code est simple et commenté, il suffit donc de chercher l'équivalence en basic AOO|LO :
  • If range("A8") = "" Then ' Vérification si la cellule A8 est vide (nom du fichier)
    If range("C8") = "" Then ' Vérification si la cellule C8 est vide (nb copies)
    MsgBox "La cellule nombre de copies n'est pas remplie." ' Message si C8 est vide
    valeur = range("A8").Value ' Récupération de la Valeur
    copie = range("C8").Value ' et du nombre de copie(s)
    Workbooks.Open Filename:="\\C:\Users\proprio\Desktop\" & valeur & ".xlsx" ' Ouverture du fichier concerné
    ActiveSheet.PrintOut Copies:=copie ' Appel de l'impression avec le nombre de copies en paramètres
    ActiveWindow.Close ' Fermeture du document
    range("A8").ClearContents ' RAZ de A8
    range("C8").ClearContents ' RAZ de C8
Un truc comme ça devrait le faire :

Code : Tout sélectionner

Sub Imprime
Dim oSheet AS Object, oDoc AS Object, sURL As String, aURL AS String
Dim nCopie AS Integer, sValeur AS String
Dim param_Print(0) As New com.sun.star.beans.PropertyValue

	' La feuille active
	oSheet = thisComponent.CurrentController.ActiveSheet
	' Récupération du nom de fichier
	sValeur = oSheet.getCellRangeByName("A8").String
	' Récupération du nombre de copies
	nCopie = oSheet.getCellRangeByName("C8").Value 
	
	' Si le nom de fichier n'est pas renseigné, on sort
	IF sValeur = "" Then Exit Sub
	' Si le nombre de copies n'est pas renseigné, on affiche un message et on sort
	If nCopie = 0 Then
		MsgBox "La cellule nombre de copies n'est pas remplie."
		Exit Sub
	End If
	
	' Contruction du nom de fichier
	sUrl = "\\C:\Users\proprio\Desktop\" & sValeur & ".xlsx"

	' Paramètre nombre de copie	
	param_Print(0).Name = "CopyCount" : param_Print(0).Value = 1

	' Appel de l'impression avec paramètres
	oDoc.Print(param_Print())

	' Fermeture du fichier
	oDoc.Close(True)

	' DAZ des infos en A8 et C8
	oSheet.getCellRangeByName("A8").clearContents(15)
	oSheet.getCellRangeByName("C8").clearContents(15)
End Sub
Aucun document n'ayant été fourni, cette macro reste à associer à un évènement de la feuille ou à un bouton.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
vuerings
Fraîchement OOthentifié
Messages : 8
Inscription : 30 janv. 2018 19:27

Re: [Calc] code VBA à transformer

Message par vuerings »

Bonjour,

Un super grand merci. je vais essayer cela au plus vite.

Pour l'événement lançant la macro, c'est simplement à l'introduction de la valeur suivi d'un enter...., dois-je ajouter une ligne de commande pour cela..??

Je dois vraiment me mettre au basic Aoo LO.

Ces codes pour un débutant parlent un peu moins je trouve que le basic de MS office et et surtout apparemment moins convivial.

Mais qui veut peux, j'y arriverai.

Encore merci

Eric
OpenOffice 4.1.5 sous Windows Vista
vuerings
Fraîchement OOthentifié
Messages : 8
Inscription : 30 janv. 2018 19:27

Re: [Calc] code VBA à transformer

Message par vuerings »

Bonjour,

Un super grand merci. je vais essayer cela au plus vite.

Pour l'événement lançant la macro, c'est simplement à l'introduction de la valeur suivi d'un enter...., dois-je ajouter une ligne de commande pour cela..??

Je dois vraiment me mettre au basic Aoo LO.

Ces codes pour un débutant parlent un peu moins je trouve que le basic de MS office et et surtout apparemment moins convivial.

Mais qui veut peux, j'y arriverai.

Encore merci

Eric
OpenOffice 4.1.5 sous Windows Vista
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9251
Inscription : 28 août 2010 08:45

Re: [Calc] code VBA à transformer

Message par micmac »

Et on attend toujours que votre signature soit renseignée correctement.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc] code VBA à transformer

Message par Churay »

Bonjour
Pour l'événement lançant la macro, c'est simplement à l'introduction de la valeur suivi d'un enter...., dois-je ajouter une ligne de commande pour cela..??
  • - click bouton droit sur l'onglet de la feuille
    - Evènements de la Feuille...
    - Contenu modifié + Bouton [Macros]
    - Dans Bibliothèques (à gauche) choisir le fichier, puis Standard, puis Module1 →à droite (Nom de la macro), il apparaît les macros disponibles dans le fichier
    - sélectionner la macro qui va bien + Bouton [OK] → Retour à la boite de dialogue précédente (Assignations)
    - Bouton [OK]
Dans ce cas, pour la bonne forme il conviendrait de tester si la cellule modifiée est bien A8 ou C8, afin de n'exécuter la macro uniquement si c'est le cas.
La macro précédent devient donc :

Code : Tout sélectionner

Sub Imprime(oEvt)
Dim oSheet AS Object, oDoc AS Object, sURL As String, aURL AS String
Dim nCopie AS Integer, sValeur AS String
Dim param_Print(0) As New com.sun.star.beans.PropertyValue

	WITH oEvt.CellAddress
		IF .Row <> 7 THEN
			EXIT Sub
		ELSE
			IF .Column <> 0 AND .Column <> 2 THEN EXIT Sub
		END IF
	END WITH

   ' La feuille active
   oSheet = thisComponent.CurrentController.ActiveSheet
   ' Récupération du nom de fichier
   sValeur = oSheet.getCellRangeByName("A8").String
   ' Récupération du nombre de copies
   nCopie = oSheet.getCellRangeByName("C8").Value

   ' Si le nom de fichier n'est pas renseigné, on sort
   IF sValeur = "" Then Exit Sub
   ' Si le nombre de copies n'est pas renseigné, on affiche un message et on sort
   If nCopie = 0 Then
      MsgBox "La cellule nombre de copies n'est pas remplie."
      Exit Sub
   End If
   
   ' Contruction du nom de fichier
   sUrl = "\\C:\Users\proprio\Desktop\" & sValeur & ".xlsx"
   oDoc = StarDesktop.loadComponentFromURL(sURL,"_blank",0,Array())

   ' Paramètre nombre de copie   
   param_Print(0).Name = "CopyCount" : param_Print(0).Value = 1

   ' Appel de l'impression avec paramètres
   oDoc.Print(param_Print())

   ' Fermeture du fichier
   oDoc.Close(True)

   ' DAZ des infos en A8 et C8
   oSheet.getCellRangeByName("A8").clearContents(15)
   oSheet.getCellRangeByName("C8").clearContents(15)
End Sub
Cela m'a permis de voir que j'avais oublié de récupérer l'objet du fichier à imprimer... :shock:
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
vuerings
Fraîchement OOthentifié
Messages : 8
Inscription : 30 janv. 2018 19:27

Re: [Calc] code VBA à transformer

Message par vuerings »

Super pour la rapidité des réponses.

Après test, le code s'arrête sur une erreur.

oDoc = StarDesktop.loadComponentFromURL(sURL,"_blank",0,Array())

Afin de peaufiner la procédure si je peux me permettre, idéalement, cela devrai contrôler que les deux encodages A8 et C8 sont bien encodés avant de lancer la procédure.

J'ai placé le code comme conseillé et crée un autre document(juste pour test) qui devrait être imprimé suivant l'encodage A8 (j'ai bien respecté le chemin du code).

Je trouve pas pourquoi la procédure s'arrête à la ligne copiée ci-dessus....

Pfff, pas facile le basic

Eric
OpenOffice 4.1.5 sous Windows Vista
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] code VBA à transformer

Message par Piaf »

Bonjour
Peux tu tester

Code : Tout sélectionner

sUrl = ConvertToURL("C:\Users\proprio\Desktop\" & sValeur & ".xlsx")
à la place de

Code : Tout sélectionner

sUrl = "\\C:\Users\proprio\Desktop\" & sValeur & ".xlsx"
A+
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
vuerings
Fraîchement OOthentifié
Messages : 8
Inscription : 30 janv. 2018 19:27

Re: [Calc] code VBA à transformer

Message par vuerings »

oula, erreur fatale. je clic sur ok et Open se ferme....
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.5 sous Windows Vista
vuerings
Fraîchement OOthentifié
Messages : 8
Inscription : 30 janv. 2018 19:27

Re: [Calc] code VBA à transformer

Message par vuerings »

Par facilité et peur de compatibilité j'ai remplacé extension .xls par .ods (et créer un document test bien entendu)

Mais avec changement de code, j'ai une erreur fatale.

si je clic sur ok, je dois passer par une récupération...

Snif
OpenOffice 4.1.5 sous Windows Vista
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc] code VBA à transformer

Message par Churay »

vuerings a écrit :j'ai une erreur fatale.

si je clic sur ok, je dois passer par une récupération...

Snif
Dans le fichier, il n'y a rien pour cliquer "OK"...
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Avatar de l’utilisateur
tintin
GourOOu
GourOOu
Messages : 9361
Inscription : 18 juil. 2008 15:29
Localisation : F-Oise + F-Savoie

Re: [Calc] code VBA à transformer

Message par tintin »

Bonjour,
[b][color=#404080]vuerings[/color][/b] a écrit :Par facilité et peur de compatibilité j'ai remplacé extension .xls par .ods (et créer un document test bien entendu)
Pas très clair et il devient difficile de comprendre.
Doit-on comprendre que vous avez ouvert le .xls avec OpenOffice, enregistré au format .ods et travaillé sous ce format ou bien travaillé sur le document .xls et enregistré les modifications au format .ods ?

Rappel :
Le document .xls), une fois ouvert par AOO ou LibO, il faut impérativement
  • l'Enregistrer sous immédiatement au format natif, soit .ods) ;
  • le fermer (par sa croix de fermeture) ;
  • Puis ouvrir le document .odt (ou .ods) correspondant qui a été créé ;
  • s'il doit être modifié et travaillé.
AOO 4.1.15 et LibO stable 7.6.6 / macOS Intel 13.6.6 Ventura
Adoptium-temurinJDK-jre_1.8.0_402 / Firefox/Safari/Thunderbird /Time Machine+cloneCCC
Tutoriels du forum pour macOS
Pour sauvegarder vos documents c'est ceinture ET bretelles
vuerings
Fraîchement OOthentifié
Messages : 8
Inscription : 30 janv. 2018 19:27

Re: [Calc] code VBA à transformer

Message par vuerings »

Bonjour,

je vais essayer d'être plus clair... lol

Afin de ne pas avoir de soucis, en lieu et place que la macro en basic ouvre un document excel et l'imprime, j'ai modifié l'extension de l'URL dans le code par .ods, et bien sûr créé une feuille sous open office (sauvé sur mon bureau et nommé TEST) que la macro permettra d'ouvrir et imprimer, pour ensuite la fermer.

Dans le fichier joint, pour les essais, j'encode en A8 le mot TEST en majuscule et le chiffre 1 en nombre d'impression. Cela devrait donc ouvrir le document se situant à l'adresse url du code (sur mon bureau) et ouvrir le document créé auparavant avec open office nommé TEST.ods

voir le fichiers fatal error ci-joint s'affichant après modification de procédure au lancement de la macro. si je clic sur ok tout se fermer et lance la récupération de document open office

j’espère avoir été concis. Encore merci de l'aide
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 4.1.5 sous Windows Vista
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 16:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: [Calc] code VBA à transformer

Message par Grenouille »

Bonjour,

Pourquoi joindre une capture écran du classeur intégrée dans un ODT ?
Mets en ligne directement le classeur ODS que l'on puisse le tester.

A+
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
Avatar de l’utilisateur
DLE
SuppOOrter
SuppOOrter
Messages : 1477
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Calc] code VBA à transformer

Message par DLE »

Bonjour,

Deux modifications :
1 - utilisation de "convertToURL" comme l'a écrit Piaf
2 - ajout d'un wait avant de fermer le document texte.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
MacOS Sonoma 14.4.1 (iMac-Intel) : AOO 4.1.15 , LibreOffice 7.6.5.2, Adoptium-temurinJDK_1.8.0_402 -
Windows 10 64 bits :
AOO 4.1.15, Libreoffice 7.1.8.1 - FireFox, Thunderbird, ORB 1.2.1
vuerings
Fraîchement OOthentifié
Messages : 8
Inscription : 30 janv. 2018 19:27

Re: [Calc] code VBA à transformer

Message par vuerings »

C'est fonctionnel. Nickel.

Merci à tous pour cette aide
OpenOffice 4.1.5 sous Windows Vista