[Résolu][Calc] Garder seulement les colonnes intéressantes

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 !
Hiddendawn
Fraîchement OOthentifié
Messages : 2
Inscription : 09 oct. 2016 07:21

[Résolu][Calc] Garder seulement les colonnes intéressantes

Message par Hiddendawn »

Bonjour,

De façon réguiière je dois traiter des fichiers sources contenants un grand nombre de colonnes, je souhaiterais faire une petite macro pour ne garder que les colonnes qui m'intéressent. Le but étant de standardiser ce fichier afin de pouvoir traiter les données par après.

En faisant quelques recherches, j'ai trouvé un petit morceau de code qui me parait répondre à ma demande :

Code : Tout sélectionner

Sub deleteIrrelevantColumns()
    Dim currentColumn As Integer
    Dim columnHeading As String

    ActiveSheet.Columns("L").Delete

    For currentColumn = ActiveSheet.UsedRange.Columns.Count To 1 Step -1

        columnHeading = ActiveSheet.UsedRange.Cells(1, currentColumn).Value

        'CHECK WHETHER TO KEEP THE COLUMN
        Select Case columnHeading
            Case "NomClient", "Devise", "Name", "Client", "Product"
                'Do nothing
            Case Else
                'Delete if the cell doesn't contain "Homer"
                If Instr(1, _
                   ActiveSheet.UsedRange.Cells(1, currentColumn).Value, _
                   "Homer",vbBinaryCompare) = 0 Then

                    ActiveSheet.Columns(currentColumn).Delete

                End If
        End Select
    Next

End Sub
Le soucis est que lorsque j'essaye de faire tourner le script, j'ai le message d'erreur suivant qui apparait :
BASIC runtime error.
Object variable not set.
Je suis débutant et à mon avis la réponse est assez simple, quand je fais tourner la macro, j'ai la partie :
ActiveSheet.Columns("L").Delete qui s'affiche en surbrillance.

Quelqu'un pourrait-il me donner un coup de main sur se problème?

Merci!
Dernière modification par Hiddendawn le 09 oct. 2016 10:11, modifié 2 fois.
LibreOffice 5.1.5.2 sous fedora
Avatar de l’utilisateur
ThierryT
Membre enthOOusiaste
Membre enthOOusiaste
Messages : 467
Inscription : 10 nov. 2012 17:05

Re: [Calc] Garder seulement les colonnes intéressantes

Message par ThierryT »

Bonjour,

Pour info, OpenOffice 5.1.5.2 n'existe pas mais LibreOffice existe sous cette version.
Merci de changer la signature en conséquence avant que les modos frappent un coup. :super:

Le code que tu joins ressemble fortement à du VBA du confrère. :marto:

Pour répondre à la question, voici une fonction sous AOO et LO qui permet de masquer (mais pas de supprimer) des colonnes dans une feuille donnée.

Code : Tout sélectionner

' Permet de masquer les NbColonnes colonnes à partir de la colonne Rang (comprise)
'---------------------------------------------------------------------------------
Function ColonneMasquee (Feuille As String, NbColonnes As Integer, Rang As Integer)
	Dim oFeuille As Object, MaZone As Object
	Dim ColFin As Integer
	
	If Len(Feuille) > 0 Then
		oFeuille = Retournefeuille(Feuille)
		If Not IsNull(oFeuille) Then
			' Validation du nombre de colonnes maxi
			ColFin = Rang + NbColonnes - 1
			If ColFin > oFeuille.Columns.Count Then ColFin = oFeuille.Columns.Count
			MaZone = oFeuille.getCellRangeByName ("A" & Rang & ":A" & LigneFin)
			MaZone.Columns.isVisible = False
			ColonneMasquee = True
		Else
			ColonneMasquee = False
		End If
	End If
End Function

'-------------------------------------------------------------------------------------
' Fonction qui retourne un objet Feuille si elle existe
'-------------------------------------------------------------------------------------
Function RetourneFeuille(feuille As String, Optional doc As Object) As Object
	Dim oDoc As Object
	
	If IsMissing(doc) Then
		oDoc = ThisComponent
	Else 
		oDoc = doc
	End If
	
	If IsFeuille(feuille, oDoc) = True Then
		RetourneFeuille = oDoc.Sheets.getByName(feuille)
	End If
End Function

'-----------------------------------------------------------------------------------------------
'Fonction qui vérifie l'existence d'une feuille
'return True si Ok
'return False si pas Ok
'-----------------------------------------------------------------------------------------------
Function IsFeuille(feuille As String, Optional Doc As Object) As Boolean
	Dim oSheets As Object, oDoc As Object
	
	If IsMissing(Doc) Then 
		oDoc = ThisComponent
	Else 
		oDoc = Doc
	End If
	
	oSheets = oDoc.Sheets
	
	If oSheets.hasByName(feuille) Then
		IsFeuille = True
	Else
		IsFeuille = False
	End If
End Function

Sinon voir le lien suivant qui explique tout sur les lignes et colonnes : https://wiki.openoffice.org/wiki/FR/Doc ... nd_Columns
LibreOffice 6.1.3.2 x64 / AOO 4.1.5 (x86) sous Windows 8.1 (x64)
Java 8.x (x64 et x86), Firefox, Thunderbird,....

“Celui qui aime à apprendre est bien près du savoir.” (Confusius)
Comment baliser Résolu
phip
HédOOniste
HédOOniste
Messages : 2016
Inscription : 09 juin 2010 18:13

Re: [Calc] Garder seulement les colonnes intéressantes

Message par phip »

Bonjour.
ThierryT a écrit :voici une fonction sous AOO et LO qui permet de masquer (mais pas de supprimer) des colonnes dans une feuille donnée.
des informations ici sur le traitement des lignes et colonnes, également pour supprimer des colonnes ou lignes.
BASIC Guide.
Lignes et colonnes
Insertion et suppression de lignes et de colonnes

Les objets Rows et Columns d'une feuille peuvent accéder à des lignes et colonnes existantes, mais également en insérer et en supprimer.

Dim Doc As Object
Dim Sheet As Object
Dim NewColumn As Object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)

Sheet.Columns.insertByIndex(3, 1)
Sheet.Columns.removeByIndex(5, 1)

Cet exemple insère une nouvelle colonne à l'emplacement de la quatrième colonne dans la feuille (index 3, la numérotation commençant à 0) à l'aide de la méthode insertByIndex. Le second paramètre spécifie le nombre de colonnes à insérer (dans cet exemple, une).

La méthode removeByIndex supprime la sixième colonne (index 5). Là aussi, le second paramètre spécifie le nombre de colonnes à supprimer.

Les méthodes d'insertion et de suppression de lignes utilisent la fonction de l'objet Rows de la même manière que les méthodes d'édition des colonnes utilisent l'objet Columns.
Cordialement.
Comment baliser correctement ?
AOO 4.1.4 Win10 Famille 1709
Hiddendawn
Fraîchement OOthentifié
Messages : 2
Inscription : 09 oct. 2016 07:21

Re: [Calc] Garder seulement les colonnes intéressantes

Message par Hiddendawn »

Merci pour ta réponse,

J'vais aller digérer la doc mais c'est exactement ce qu'li me fallait :)
LibreOffice 5.1.5.2 sous fedora