[Résolu][Calc] Sélection de colonnes qui ne se suivent pas

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 !
pierrot57000
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 30 mars 2018 06:43

[Résolu][Calc] Sélection de colonnes qui ne se suivent pas

Message par pierrot57000 »


La modération vous a écrit: Relisez (encore) les règles de cette section qui sont en lien dans le bandeau rouge en haut de la page :
[Basic] n'a pas à être employé comme balise si vous utilisez un module spécifique.

Bonjour, je cherches quelques choses de très simple, je voudrais sélectionner dans ma macro des colonnes, quand les colonnes se suivent pas de soucie. Mais je n'arrive pas à sélectionner quand elles ne se suivent pas. J'or sélectionner les colonnes A, B et D. Et ensuite en faire un graphique.

Est-ce que quelqu'un pourrait m'aider?

Merci
Raspberry LibreOffice 5.2.7.2
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: [Basic]selectionner des colonnes qui ne se suivent pas

Message par Jurassic Pork »

hello,
tu peux faire comme ceci par exemple :

Code : Tout sélectionner

sub selectColumns()
  Dim oDoc As Object
  Dim oSheet As Object
  Dim oView As Object
  Dim oRanges
  Dim oRange(3) As Object
  Dim i As Integer
         
  oDoc = ThisComponent
  oSheet = oDoc.Sheets(0)
  oView = ThisComponent.getCurrentController()
  oRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
  oRange(0) = oSheet.getCellRangeByName("A1:B100")
  oRange(1) = oSheet.getCellRangeByName("D1:D100")
   
  for i = 0 to 1
      oRanges.addRangeAddress(oRange(i).RangeAddress,False)
  next i
  oView.Select(oRanges)
end sub
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
pierrot57000
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 30 mars 2018 06:43

Re: [Basic]selectionner des colonnes qui ne se suivent pas

Message par pierrot57000 »

Merci de votre réponse. J'ai essayer d'intégrer ça dans ma macro mais je n'y arrive pas.

En faite mon but est dans une première macro est de sélectionner les colonnes ABC jusque leurs valeur max pour en faire un premier graphique ensuite les colonnes ABD pour en faire un second et ensuite les colonnes ABE pour en faire un troisième graphique sachant que les colonnes AB sont la date et l'heure de la mesure!

Cordialement

Code : Tout sélectionner

Sub CreationGraphique1 
Dim oDoc As Object  
Dim Rect As New com.sun.star.awt.Rectangle  
Dim Source(1) As New com.sun.star.table.CellRangeAddress  
Dim oCharts As Object , oChart As Object , oRange As Object
'Dim NomDiagramme As String, NomInterne As String
'Dim NbForme As Integer, i As Integer
'Option Explicit
'Sub Main
'Dim oDoc As Object, oFeuille As Object, oFormes As Object
'Dim NomDiagramme As String, NomInterne As String

'oDoc = ThisComponent
'oFeuille = oDoc.Sheets(0) 'Feuille1, l'index des feuilles démarre à 0
'oFormes = oFeuille.DrawPage '
'NbForme = oFormes.Count 'Le nombre d'objet trouvé
'Dim Rep As Integer
'For i = NbForme -1 To 0 step -1
'  NomDiagramme = oFormes(i).Name 'Le nom donné
'   NomInterne = oFormes(i).PersistName 'Le nom interne
'   If Rep = MsgBox("Voulez vous supprimer le diagramme  " & Chr(13) & "MonGraphique",36,"SUPPRIMER ?") = 6 Then
'      oFeuille.Charts().removeByName("MonGraphique")


'Option Compatible

'Option VBASupport 1
oDoc = ThisComponent 

'Le graphique sera positionné dans la 2eme feuille du classeur
  
oCharts = oDoc.Sheets(0).Charts

'--- Spécfie la position et les dimensions du graphique --- 
  Rect.X = 12000 'horizontal 
  Rect.Y = 14000 'vertical 
  Rect.Width = 24000 'Largeur 
  Rect.Height = 13000 'Hauteur 
'---------------------------------------------------------- 
  
'--- Spécifie la source du graphique --- 
'Les données sont dans la plage A1:D30 
'La première colonne correspond à l'axe des abscisses (une série de dates par exemple) 
'Les autres colonnes contiennent les valeurs d'ordonnées 
'La première ligne contient les étiquettes des séries 
  'Source(1).Sheet = 0 '1ere feuille du graphique 
  'Source(1).StartColumn = 0 'Ligne 1 
  'Source(1).StartRow = 0  'Colonne A 
 ' Source(1).EndColumn = 1 'Colonne E
   'Source(1).EndRow = 65000 'Ligne 65000
  
rem ----------------------------------------------------------------------
rem define variables
  'Dim oDoc As Object

'Source(1).getCellRange("B4:D15")
' Source(1).StartColumn = 0 'Ligne 1 
' Source(1).StartRow = 3  'Colonne A 
' Source(1).EndColumn = 3 'Colonne E
'  Source(1).EndRow = 65000 'Ligne 65000
'  Source(1).Sheet = 0 '1ere feuille du graphique 

'' Source(1).StartColumn = 0 'Ligne 1 
 'Source(1).StartRow = 3  'Colonne A 
'  Source(1).EndColumn = 3 'Colonne E
 ' Source(1).EndRow = 65000 'Ligne 65000
  'Suppression du Graphique
  
'Option Explicit
'Sub Main
'Dim oDoc As Object, oFeuille As Object, oFormes As Object

      
    


'End Sub

'dim PysNbCharts as integer, i as integer, PysEnCours as object
'PysNbCharts=thiscomponent.currentController.ActiveSheet.DrawPage.count

'for i= PysNbCharts-1 to 0 step -1
'   PysEnCours=thiscomponent.currentController.ActiveSheet.DrawPage(i)
'   if msgbox(iif(PysEnCours.name="", PysEnCours.PersistName, PysEnCours.Name), 36, "Supprimer le diagramme") = 6 then
'      PysEnCours.dispose      
'   end if 
'next i
  'Création du graphique 
  oCharts.addNewByName("MonGraphique1",Rect ,Source(),True , True)  
  
'Place le graphique dans la feuille de calcul 
oChart = oCharts.getByName("MonGraphique1").EmbeddedObject  
  
'With oChart 

  Dim oSheet As Object
  Dim oView As Object
  Dim oRanges
  'Dim oRange(i) As Object
  Dim i As Integer
 
      
  oDoc = ThisComponent
  oSheet = oDoc.Sheets(0)
  oView = ThisComponent.getCurrentController()
  'oRanges = oDoc.createInstance("com.sun.star.table.SheetCellRanges")
  oRange(0) = oSheet.getCellRangeByName("A2:B200")
  oRange(1) = oSheet.getCellRangeByName("D2:D200")
    
  for i = 0 to 1
     oRanges.addRangeAddress(oRange(i).RangeAddress,False)
 
   'Type de graphique (Scatters) 
  .Diagram = oChart.createInstance("com.sun.star.chart.XYDiagram") 
  
  'Type de graphique (Scatters) 
 ' .Diagram = oChart.createInstance("com.sun.star.chart.XYDiagram") 
  
  'Lissage des lignes (0: pas de lissage, 1: spline cubique, 2: spline B) 
  oChart.Diagram.SplineType = 0 
  'Change le symbole des points 
  oChart.Diagram.SymbolType = com.sun.star.chart.ChartSymbolType.SYMBOL1  
  
  'Modifie la couleur de fond du graphique 
  .Diagram.wall.FillColor =RGB(150,150,150) 
  
  'Spécifie la valeur maxi de l'étiquette des ordonnées 
  .Diagram.YAxis.Max = MaxValue
  
  'Attribue un titre à l'axe des abscisses 
  .Diagram.HasXAxisTitle = True  
  .Diagram.YAxisTitle.string = "Vitesses"  
  
 'Attribue un titre à l'axe des ordonnées   
  .Diagram.HasYAxisTitle = True  
 .Diagram.XAxisTitle.string = "Temps"  
  
  'La première ligne contient les étiquettes des séries  
  .DataSourceLabelsInFirstColumn = False 
  .DataSourceLabelsInFirstRow = True 
  
  Roration des étiquettes pour l'axe des abscisses 
  .Diagram.XAxis.TextRotation = 9000 '90 degrés 
  
  'redéfinit la taille des étiquettes pour les abscisses et les ordonnées 
  .Diagram.YAxis.CharHeight = 4 
 .Diagram.XAxis.CharHeight = 4 
  
  'Attribue un titre au graphique puis un couleur à la chaîne de caractères 
  .Title.String = "Test" 
  .Title.CharColor = RGB(200,0,0) 
   next i
  oView.Select(oRanges)
  
End With
  
'oDoc.Sheets(0).getCellByPosition(0,0).String = "MonGraphique"  

'End if 

'Next i
End Sub
Raspberry LibreOffice 5.2.7.2
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: [Basic]selectionner des colonnes qui ne se suivent pas

Message par Jurassic Pork »

hello,
houla il y a pas mal d'erreurs dans le code, ça sent le bricolage avec des bouts de code pris à droite à gauche.
D'autre part tu aurais du nous dire tout de suite ce que tu voulais faire (avec un exemple des données d'entrée dans un fichier calc). Je ne vois pas trop non plus comment tu veux intégrer deux colonnes ( date et temps ) pour définir l'abscisse du graphique. Il faut certainement concaténer ses deux colonnes pour avoir une colonne date -time.
Plutôt que de corriger les erreurs, voilà ce que je te propose :
une procédure qui trace un graphique avec 3 arguments :
Le titre du graphique qui sera aussi le nom de l'objet graphique créé.
Le rectangle où sera tracé le graphique
Les plages de sources de données :
La première celle des abscisses
La ou les suivantes celle(s) des ordonnées :

Code : Tout sélectionner

Sub TraceGraphique(Titre,Rect,Source)
' J.P Juillet 2018
Dim Charts,myChart As Object
Dim i as Integer
Charts = ThisComponent.Sheets(1).Charts
If NOT Charts.hasByName(Titre) Then
Charts.addNewByName(Titre, Rect, Source(), True, True)
End If
myChart = Charts.getByName(Titre).EmbeddedObject
With myChart
.Diagram = .createInstance("com.sun.star.chart.XYDiagram")
'Lissage des lignes (0: pas de lissage, 1: spline cubique, 2: spline B) 
.Diagram.SplineType = 0 
'Change le symbole des points 
.Diagram.SymbolType = com.sun.star.chart.ChartSymbolType.SYMBOL1    
'Modifie la couleur de fond du graphique 
.Diagram.wall.FillColor =RGB(150,150,150) 
'Attribue un titre à l'axe des abscisses 
.Diagram.HasXAxisTitle = True  
.Diagram.XAxisTitle.string = "Temps"  
'Attribue un titre à l'axe des ordonnées   
.Diagram.HasYAxisTitle = True  
.Diagram.YAxisTitle.string = "Vitesses"  
'La première ligne contient les étiquettes des séries  
.DataSourceLabelsInFirstColumn = False 
.DataSourceLabelsInFirstRow = True 
'Rotation des étiquettes pour l'axe des abscisses 
.Diagram.XAxis.TextRotation = 9000 '90 degrés 
'redéfinit la taille des étiquettes pour les abscisses et les ordonnées 
.Diagram.YAxis.CharHeight = 8 
myChart.Diagram.XAxis.CharHeight = 8 
'Attribue un titre au graphique puis un couleur à la chaîne de caractères 
myChart.Title.String = Titre
myChart.Title.CharColor = RGB(200,0,0) 
myChart.HasLegend = True 
.Legend.Alignment = com.sun.star.chart.ChartLegendPosition.BOTTOM
.Legend.FillStyle = com.sun.star.drawing.FillStyle.SOLID
.Legend.FillColor = RGB(210, 210, 210)
.Legend.CharHeight = 8
End With
End Sub
et voici un exemple d'utilisation où je trace deux graphiques :
le premier avec comme abscisse la colonne A et deux courbes (colonne C et D )
le deuxième avec comme abscisse la colonne A et deux courbes (colonne C et E )
Je n'utilise pas la colonne B (voir début de mon message).

Code : Tout sélectionner

Sub TracerGraphiques()
Dim Odoc,OSheet As Object
Dim Rect As New com.sun.star.awt.Rectangle
Dim Source(2) As New com.sun.star.table.CellRangeAddress   
Rect.X = 100
Rect.Y = 1000
Rect.Width = 25000
Rect.Height = 10000
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
'selection of X data
Source(0) = oSheet.getCellRangeByName("A1:A13").getRangeAddress()
'selection of Y data
Source(1) = oSheet.getCellRangeByName("C1:C13").getRangeAddress()
Source(2) = oSheet.getCellRangeByName("D1:D13").getRangeAddress()
TraceGraphique("Graphique1",Rect,Source)
Rect.Y = 12000
Source(2) = oSheet.getCellRangeByName("E1:E13").getRangeAddress()
TraceGraphique("Graphique2",Rect,Source)
End Sub
avec ceci en entrée :
TracerGraphiques-1.png
j'obtiens ceci en sortie :
TracerGraphiques-2.png
Ami calmant, J.P
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
pierrot57000
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 30 mars 2018 06:43

Re: [Calc] Sélection de colonnes qui ne se suivent pas

Message par pierrot57000 »

Merci beaucoup, oui effectivement c'est du bricolage.

J'ai essayé de les faire fonctionner mais cela m'indique pour la commande "Charts = ThisComponent.Sheets(1).Charts "

Valeur ou type de données incorrect(e).
Index hors de la plage définie.

J'ai essayé de l'intégrer avec un Dim mais aucun résultat.
Raspberry LibreOffice 5.2.7.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Sélection de colonnes qui ne se suivent pas

Message par Dude »

Et si dès le départ tu fournissais ton document, tu nous éviterais de gaspiller du temps.
L'erreur indiquée signifie que ton classeur n'a qu'une seule feuille puisque l'index 1 est inatteignable.
On évite aussi de donner des noms de variable qui sont utilisés par des propriété ou méthode d'objet.

Autre piste : se servir de l'extension zBasic.
Tu as les fonctions zGraph.* qui permettent de construire un graphique sans peine :
http://beaussier.com/wiki/index.php?tit ... igu%C3%ABs
pierrot57000
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 30 mars 2018 06:43

Re: [Calc] Sélection de colonnes qui ne se suivent pas

Message par pierrot57000 »

Zbasic, je ne connaissais pas ça à l'air sympa! Merci beaucoup.

Voici mon fichier calc:


cordialement
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Raspberry LibreOffice 5.2.7.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Sélection de colonnes qui ne se suivent pas

Message par Dude »

pierrot57000 a écrit :SpeedTest_22-07-2018.xlsx
Tu devrais relire les questions que tu postes : https://forum.openoffice.org/fr/forum/v ... hp?t=57484
pierrot57000
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 30 mars 2018 06:43

Re: [Calc] Sélection de colonnes qui ne se suivent pas

Message par pierrot57000 »

effectivement c'est un xlsx et non pas un odt!

:? :? :?
Raspberry LibreOffice 5.2.7.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Sélection de colonnes qui ne se suivent pas

Message par Dude »

Et donc ?
Soit tu fournis un ODS
Soit tu pars sur un forum Microsoft
pierrot57000
NOOuvel adepte
NOOuvel adepte
Messages : 15
Inscription : 30 mars 2018 06:43

Re: [Calc] Sélection de colonnes qui ne se suivent pas

Message par pierrot57000 »

voilà!! encore désolé!
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Raspberry LibreOffice 5.2.7.2
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Sélection de colonnes qui ne se suivent pas

Message par Dude »

Bis repetitae :
Plus haut, on ouvre ses petits yeux pour voir ce qu'il y a écrit :Autre piste : se servir de l'extension zBasic.
Tu as les fonctions zGraph.* qui permettent de construire un graphique sans peine
Ce qui nous donne en 8 lignes de code :
no_problemo.gif
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.