[Résolu] [Calc] Exporter contenu d'une colonne dans fichier
Modérateur : Vilains modOOs
Règles du forum
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 !
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 !
-
- Fraîchement OOthentifié
- Messages : 7
- Inscription : 30 juin 2021 20:42
[Résolu] [Calc] Exporter contenu d'une colonne dans fichier
Bonjour,
Dans le tableau ci-joint, j'aimerais que lorsque l'utilisateur clique sur le bouton "Export", une macro exporte les cellules non vides de la colonne A dans un fichier intitulé "Fruits.txt".
La colonne A comporte ici 22 lignes, mais le but est que la macro fonctionne avec une colonne A ayant un nombre de lignes variable (qu'on ne connaît pas à l'avance).
Je sais à peu près le faire avec Excel, mais je ne sais pas du tout le faire avec Calc.
(le fichier sera destiné à des utilisateurs ne disposant que de LibreOffice Calc)
J'en appelle donc à vos compétences.
Merci d'avance pour votre aide.
Dans le tableau ci-joint, j'aimerais que lorsque l'utilisateur clique sur le bouton "Export", une macro exporte les cellules non vides de la colonne A dans un fichier intitulé "Fruits.txt".
La colonne A comporte ici 22 lignes, mais le but est que la macro fonctionne avec une colonne A ayant un nombre de lignes variable (qu'on ne connaît pas à l'avance).
Je sais à peu près le faire avec Excel, mais je ne sais pas du tout le faire avec Calc.
(le fichier sera destiné à des utilisateurs ne disposant que de LibreOffice Calc)
J'en appelle donc à vos compétences.
Merci d'avance pour votre aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par LA_440 le 03 juil. 2021 21:01, modifié 1 fois.
LibreOffice 7.1 sous Windows 10
-
- PassiOOnné
- Messages : 669
- Inscription : 20 déc. 2017 14:45
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Bonjour LA_440
J'imagine que tu ne parcours pas l'intégrralité avec plus d'un million de lignes
Fais une recherche dans ce forum, il y a sûrement des exemples.
Justement comment sait-on qu'on a atteint la fin de la colonne ?LA_440 a écrit :La colonne A comporte ici 22 lignes, mais le but est que la macro fonctionne avec une colonne A ayant un nombre de lignes variable (qu'on ne connaît pas à l'avance).
J'imagine que tu ne parcours pas l'intégrralité avec plus d'un million de lignes
As-tu déjà regardé les équivalences pour chaque ligne de ta macro Excel ?Je sais à peu près le faire avec Excel, mais je ne sais pas du tout le faire avec Calc.
Fais une recherche dans ce forum, il y a sûrement des exemples.
OpenOffice 4.1.15 - Windows 10
-
- PassiOOnné
- Messages : 501
- Inscription : 11 mai 2013 00:11
- Localisation : Aix en Provence
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Bonjour,
Une proposition dans le fichier-joint, faite à la "va-vite": A tester
Cordialement,
Une proposition dans le fichier-joint, faite à la "va-vite": A tester
Ajout : Je mets ci-dessous le code utilisé sur ce fichier, il a probablement plus élégant ou efficace |
Code : Tout sélectionner
Sub BtnExport
'Déclaration du tableau des résultats
Dim aResult() As Variant
'Feuille 1, colonne A (index = 0)
oDoc = ThisComponent
oFeuil = oDoc.Sheets(0)
oColA = oFeuil.Columns(0)
'on récupère sous forme de tableau les cellules ayant un contenu (ici chaine ou valeur num ou date ou commentaire ou formule)
With com.sun.star.sheet.CellFlags
oCellsNonVides = oColA.queryContentCells(.STRING + .VALUE + .DATETIME + .ANNOTATION + .FORMULA)
End With
'on redimensionne le tableau des résultats à la dimension voulue
ReDim Preserve aResult(UBound(oCellsNonVides.Data))
'on crée une énumération des éléments du tableau
LesFruits = oCellsNonVides.createEnumeration
'on récupère tous les éléments pour les mémoriser dans le tableau des résultats
While LesFruits.hasMoreElements()
LeFruit = LesFruits.nextElement()
for i = 0 to UBound(LeFruit.DataArray)
aResult(t) = LeFruit.DataArray(i)
t=t+1
next i
Wend
'on crée un doc Writer vierge et un curseur d'écriture
NewDocWriter = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array())
NewDocWriter.Title = "Fruits"
Cursor = NewDocWriter.Text.createTextCursor()
'on crée un tableau pour y inclure les résultats
Table = NewDocWriter.createInstance("com.sun.star.text.TextTable")
Table.initialize(UBound(aResult)+1, 1)
NewDocWriter.Text.insertTextContent(Cursor, Table, False)
Rows = Table.Rows
For y = 1 To Rows.Count()
CellName = "A" & y
Cell = Table.getCellByName(CellName)
Cell.String = aResult(y-1)(0)
Next
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"
Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER
LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER
LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
-
- Fraîchement OOthentifié
- Messages : 7
- Inscription : 30 juin 2021 20:42
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Bonjour/Bonsoir,
Merci à vous, rollmops et Noonours, pour vos réponses !
Je respecte la chronologie et je réponds d'abord à rollmops.
Ma colonne n'atteindra jamais le million de lignes. Le million, le million ! Au maximum, 1000 lignes. Et elles contiendront en réalité tout autre chose que des noms de fruits. On sera sur des notes beaucoup moins sucrées !
Comment sait-on qu'on a atteint la fin de la colonne ? Eh bien en disant à Excel : "Cherche la dernière cellule non vide !" Enfin, je le lui dis plutôt en ces termes : "Cells(Rows.Count, 1).End(xlUp).Row". Et quand il trouve, je le félicite : "Ouuuh mais c’est un bon chien-chien ça !"
Je vais suivre ton conseil pour les équivalences Excel / LibreOffice. Je ne sais pas encore trop où chercher car je n'ai qu'un jour d'ancienneté sur le forum.
Noonours, un très grand merci à toi ! Ta proposition, tu dis l'avoir faite à la "va-vite", mais tu y as quand même consacré un certain temps ou un temps certain, et c'est vraiment sympa !
Je viens de tester, ça fonctionne nickel ! On appuie sur le bouton, et hop, tout apparaît comme par magie !
Le tableau qui se crée tout seul dans le fichier doc, c'est joli ! Mais pour mon usage, il me faut du moche ! Un fichier en texte brut m'est nécessaire, parce qu'il sera ensuite importé depuis un autre logiciel qui n'accepte que le format txt. De quelle façon faudrait-il modifier le code pour que ce fichier txt se crée et se remplisse de manière automatisée et transparente, sans même s'ouvrir ? Avec Excel, ça se fait en enchaînant les commandes Open, Print et Close. Mais avec Calc, euh... j'ai tout à apprendre. Rappelons que je suis né il y a seulement 1 jour.
J'ai beaucoup apprécié aussi ton approche pédagogique. Le code bien "aéré" et commenté, c'est top !
Merci à vous, rollmops et Noonours, pour vos réponses !
Je respecte la chronologie et je réponds d'abord à rollmops.
Ma colonne n'atteindra jamais le million de lignes. Le million, le million ! Au maximum, 1000 lignes. Et elles contiendront en réalité tout autre chose que des noms de fruits. On sera sur des notes beaucoup moins sucrées !
Comment sait-on qu'on a atteint la fin de la colonne ? Eh bien en disant à Excel : "Cherche la dernière cellule non vide !" Enfin, je le lui dis plutôt en ces termes : "Cells(Rows.Count, 1).End(xlUp).Row". Et quand il trouve, je le félicite : "Ouuuh mais c’est un bon chien-chien ça !"
Je vais suivre ton conseil pour les équivalences Excel / LibreOffice. Je ne sais pas encore trop où chercher car je n'ai qu'un jour d'ancienneté sur le forum.
Noonours, un très grand merci à toi ! Ta proposition, tu dis l'avoir faite à la "va-vite", mais tu y as quand même consacré un certain temps ou un temps certain, et c'est vraiment sympa !
Je viens de tester, ça fonctionne nickel ! On appuie sur le bouton, et hop, tout apparaît comme par magie !
Le tableau qui se crée tout seul dans le fichier doc, c'est joli ! Mais pour mon usage, il me faut du moche ! Un fichier en texte brut m'est nécessaire, parce qu'il sera ensuite importé depuis un autre logiciel qui n'accepte que le format txt. De quelle façon faudrait-il modifier le code pour que ce fichier txt se crée et se remplisse de manière automatisée et transparente, sans même s'ouvrir ? Avec Excel, ça se fait en enchaînant les commandes Open, Print et Close. Mais avec Calc, euh... j'ai tout à apprendre. Rappelons que je suis né il y a seulement 1 jour.
J'ai beaucoup apprécié aussi ton approche pédagogique. Le code bien "aéré" et commenté, c'est top !
-
- Membre hOOnoraire
- Messages : 139
- Inscription : 24 avr. 2021 19:09
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Bonsoir,
je pense que c'est cela que vous cherchiez, la base du code est la même que Nounours vous a envoyé, j'ai juste ajouté une partie pour la zone ".txt"
Dites moi si ce n'est pas clair
Bonne soirée
je pense que c'est cela que vous cherchiez, la base du code est la même que Nounours vous a envoyé, j'ai juste ajouté une partie pour la zone ".txt"
Code : Tout sélectionner
Sub BtnExport
'Déclaration du tableau des résultats
Dim aResult() As Variant
'Feuille 1 (index = 0)
oDoc = ThisComponent
oFeuil = oDoc.Sheets(0)
'on récupère sous forme de tableau les cellules ayant un contenu (ici chaine ou valeur num ou date ou commentaire ou formule)
With com.sun.star.sheet.CellFlags
oCellsNonVides = oFeuil.queryContentCells(.STRING + .VALUE + .DATETIME + .ANNOTATION + .FORMULA)
End With
'on redimensionne le tableau des résultats à la dimension voulue
ReDim Preserve aResult(UBound(oCellsNonVides.Data))
'on crée une énumération des éléments du tableau
LesFruits = oCellsNonVides.createEnumeration
'on récupère tous les éléments pour les mémoriser dans le tableau des résultats
While LesFruits.hasMoreElements()
LeFruit = LesFruits.nextElement()
for i = 0 to UBound(LeFruit.DataArray)
aResult(t) = LeFruit.DataArray(i)
t=t+1
next i
Wend
'récupère le dossier où le fichier Fruits est enregistré
sURLFolder= replace(ThisComponent.url,ThisComponent.title,"")
'enregistre le fichier texte dans le même dossier où le fichier Fruits est enregistré (modifier "nom" dans la ligne de
'code du bas) par ce que vous voulez
sFileName = sURLFolder & "nom" & ".txt"
'Ouvre ce fichier texte pour ensuite coller les informations
n = FreeFile()
Open sFileName For Output As #n
'Ecris les données dans une seule colonne
For i = 0 To UBound(aResult)
Print #n, aResult(i)(0)
Next
'Ferme le fichier texte
Close #n
End Sub
Bonne soirée
LibreOffice 7.0.5.2 sous Windows 10
-
- Fraîchement OOthentifié
- Messages : 7
- Inscription : 30 juin 2021 20:42
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Bonsoir Kev74,
Merci beaucoup ! C'est tout à fait ce que je cherchais !
Encore merci à tous, vous êtes épatants !
Merci beaucoup ! C'est tout à fait ce que je cherchais !
Encore merci à tous, vous êtes épatants !
-
- RespOOnsable forum
- Messages : 9252
- Inscription : 28 août 2010 08:45
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Bonjour,
Problème résolu ?
Il est d'usage
Adaptez la longueur du titre à 60 caractères maximum, balises comprises.
Cordialement
Problème résolu ?
Il est d'usage
- d'ajouter manuellement au début du titre de votre premier message la balise [Résolu] (avec un R majuscule et sans oublier le e accentué, le tout entre crochets [ ])
- et de cocher l'icône
Adaptez la longueur du titre à 60 caractères maximum, balises comprises.
Cordialement
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
-
- PassiOOnné
- Messages : 669
- Inscription : 20 déc. 2017 14:45
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Re,
Sauf que ça récupère toutes les cellules non vides sur toute une feuille et non d'une colonne.Kev74 a écrit :With com.sun.star.sheet.CellFlags
oCellsNonVides = oFeuil.queryContentCells(.STRING + .VALUE + .DATETIME + .ANNOTATION + .FORMULA)
End With
Avec ça, tu récupères la dernière ligne d'une plage contigue. S'il y a plusieurs lignes vides, tu n'auras pas tout.LA_440 a écrit :Cells(Rows.Count, 1).End(xlUp).Row
OpenOffice 4.1.15 - Windows 10
-
- PassiOOnné
- Messages : 501
- Inscription : 11 mai 2013 00:11
- Localisation : Aix en Provence
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Bonjour
@Rollmops: j’ai remplacé a posteriori l’objet oFeuil par l’objet oColA qui ne concerne que la colonne A .
J’ai dû oublier de modifier ça sur le fichier joint.
Pas d’ordi sous la main actuellement, je réponds de mon téléphone, mais je modifierai ce soir.
Cordialement
@Rollmops: j’ai remplacé a posteriori l’objet oFeuil par l’objet oColA qui ne concerne que la colonne A .
J’ai dû oublier de modifier ça sur le fichier joint.
Pas d’ordi sous la main actuellement, je réponds de mon téléphone, mais je modifierai ce soir.
Cordialement
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"
Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER
LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER
LibO 7.6.5.2 Stable et OpenOffice 4.1.15 sous Windows 10
-
- Fraîchement OOthentifié
- Messages : 7
- Inscription : 30 juin 2021 20:42
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Bonsoir,
Finement observé ! Ça se voyait difficilement dans un tableau ne comportant qu'une seule colonne.rollmops a écrit : Sauf que ça récupère toutes les cellules non vides sur toute une feuille et non d'une colonne.
Ben en fait, ça me récupère tout, y compris le vide entre les lignes non vides ! Ce vide, je m'en débarrasse par : If tabl(i, 1) <> "" Then...rollmops a écrit : Avec ça, tu récupères la dernière ligne d'une plage contigue. S'il y a plusieurs lignes vides, tu n'auras pas tout.
-
- PassiOOnné
- Messages : 669
- Inscription : 20 déc. 2017 14:45
Re: [Calc] Exporter le contenu d'une colonne dans un fichier
Ce qui fait que tu parcours alorsLA_440 a écrit :Ben en fait, ça me récupère tout
Pas très optimisé dans ce casrollmops a écrit : l'intégrralité avec plus d'un million de lignes
OpenOffice 4.1.15 - Windows 10