[Résolu] [Calc] Formatage données vers 3ème onglet

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 !
amazigh42
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 16 févr. 2017 06:37

[Résolu] [Calc] Formatage données vers 3ème onglet

Message par amazigh42 »

Bonjour,
pouvez-vous m'aider à adapter cette macro Excel pour LibreOffice ?
Dans le fichier Excel ci-joint, il y a 3 onglets.
Onglet "Entrée" où je mets les données à traiter (avec bouton de lancement de macro).
Onglet "Adresses" où je mets login, mdp
Onglet "Sortie" où j'obtiens le résultat de la macro. Login, mdp, mail

Merci par avance

Macro Excel

Code : Tout sélectionner

    Public Sub NormalizeData()
    Dim n As Long, I As Long, k As Long
    Dim tmp, arr(), r
        With Worksheets("Entrée")
            n = .Cells(.Rows.Count, 1).End(xlUp).Row
            For I = 3 To n Step 8
                tmp = Split(Trim(.Cells(I, 1)), "|")
                ReDim Preserve arr(2, k + 1)
                arr(0, k) = Trim(Split(tmp(0), ":")(1))
                arr(1, k) = Trim(Split(tmp(1), ":")(1))
                k = k + 1
            Next I
        End With
        With Worksheets("Adresses")
            ActiveWorkbook.Names.Add Name:="Liste", RefersTo:=.Cells(1).CurrentRegion
        End With
        With Worksheets("Sortie")
            .Cells(1).CurrentRegion.Offset(1).Clear
            .Cells(2, 1).Resize(UBound(arr, 2), 2).Value = Application.Transpose(arr)
            n = .Cells(.Rows.Count, 1).End(xlUp).Row
            For I = 2 To n
                r = Application.VLookup(.Cells(I, 1), [Liste], 2, False)
                If IsError(r) Then
                    .Cells(I, 3) = "NC"
                Else
                    .Cells(I, 3) = r
                    .Hyperlinks.Add anchor:=.Cells(I, 3), _
                                    Address:="mailto:" & .Cells(I, 3)
                End If
            Next
            .Activate
        End With
        Erase arr
    End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par amazigh42 le 21 avr. 2019 06:36, modifié 3 fois.
Obligation de version : 6.1.6.3.M13 (x64)
sous Windows sept Entreprise SP1
amazigh42
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 16 févr. 2017 06:37

Re: [MACROS] Excel vers Libreoffice

Message par amazigh42 »

J'ai trouvé un site qui transforme une macro Excel en macro VBA, cependant il y a des retouches à faire.

n = .Cells(.Rows.Count, 1).End(xlUp).Row

  • Erreur d'exécution BASIC.
    Une exeption s'est produite :
    Type: com.sun.star.lang.IllegalArgumentException
    Message: arguments len differ!


Code : Tout sélectionner

Public Sub NormalizeData()
Dim n As Long, I As Long, k As Long
Dim tmp, arr(), r
With ThisComponent.Sheets.getByName()("Entrée")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For I = 3 To n Step 8
tmp = Split(Trim(.Cells(I, 1)), "|")
ReDim Preserve arr(2, k + 1)
arr(0, k) = Trim(Split(tmp(0), ":")(1))
arr(1, k) = Trim(Split(tmp(1), ":")(1))
k = k + 1
Next I
End With
With ThisComponent.Sheets.getByName()("Adresses")
ThisComponent.Names.Add Name:="Liste", RefersTo:=.Cells(1).CurrentRegion
End With
With ThisComponent.Sheets.getByName()("Sortie")
.Cells(1).CurrentRegion.Offset(1).Clear
.Cells(2, 1).Resize(UBound(arr, 2), 2).Value = Application.Transpose(arr)
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For I = 2 To n
r = Application.VLookup(.Cells(I, 1), [Liste], 2, False)
If IsError(r) Then
.Cells(I, 3) = "NC"
Else
.Cells(I, 3) = r
.Hyperlinks.Add anchor:=.Cells(I, 3), _
Address:="mailto:" & .Cells(I, 3)
End If
Next
.Activate
End With
Erase arr
End Sub
Obligation de version : 6.1.6.3.M13 (x64)
sous Windows sept Entreprise SP1
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: [MACROS] Excel vers Libreoffice

Message par Dude »

Salut,
amazigh42 a écrit :cependant il y a des retouches à faire.
Ici, on conseille de refaire proprement plutôt que de tenter une conversion qui foire.

Code : Tout sélectionner

n = .Cells(.Rows.Count, 1).End(xlUp).Row
https://forum.openoffice.org/fr/forum/v ... hilit=xlup
amazigh42
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 16 févr. 2017 06:37

Re: [Calc] Formatage données vers 3ème onglet

Message par amazigh42 »

Bonjour,
Ici, on conseille de refaire proprement plutôt que de tenter une conversion qui foire.
En ce qui me concerne mes connaissances en macro CalcBasic sont plus proches de zéro que de la moyenne.
Je suis quelqu'un qui essaie seulement de passer de Excel à LibreOffice et qui demande l'aide.

J'avoue que vous m'incitez plus à rester sur Excel que de m'investir sur CalcBasic de LibreOffice.

CDT
Obligation de version : 6.1.6.3.M13 (x64)
sous Windows sept Entreprise SP1
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Formatage données vers 3ème onglet

Message par Piaf »

Bonjour
Pas spécialiste des tableurs et encore moins d'Excel :lol:
Il est donc difficile de savoir ce que sont sensées faire les instructions propres à Excel.
Tu peux tester le fichier joint pour voir s'il correspond à ce que tu voudrais obtenir.

Code : Tout sélectionner

Public Sub NormalizeData()
Dim oDoc as Object, fEntree as Object, fAdresses as Object, fSortie as Object, maZone as Object, Curseur as Object
Dim Recherche as Object, trouv as Variant, Courriel As Object, gomme as Long
Dim n As Long, I As Long, x As Long
Dim tmp, arr(x,1)
	oDoc = thisComponent
	fEntree = oDoc.Sheets.getByName("Entrée")
	Curseur = fEntree.CreateCursor
	Curseur.goToEndOfUsedArea(False)
	n = Curseur.RangeAddress.EndRow
	For I = 2 To n Step 8
		tmp = Split(Trim(fEntree.getCellByPosition(0, I).String), "|")
		arr(x, 0) = Trim(Split(tmp(0), ":")(1)
		arr(x, 1) = Trim(Split(tmp(1), ":")(1)
		x = x + 1
		reDim Preserve arr(x,1)
	Next I
	reDim Preserve arr(x -1,1)
	fAdresses = oDoc.Sheets.getByName("Adresses")
	Curseur = fAdresses.createCursorByRange(fAdresses.getCellRangeByName("A1"))
	Curseur.collapseToCurrentRegion
	If oDoc.NamedRanges.hasByName("Liste") Then
		oDoc.NamedRanges.removeByName("Liste")
	End If
	oDoc.NamedRanges.addNewByName("Liste", Curseur.AbsoluteName, fAdresses.getCellRangeByName("A1").CellAddress,0)
	fSortie = oDoc.Sheets.getByName("Sortie")
	Curseur = fSortie.CreateCursor
	Curseur.goToEndOfUsedArea(False)
	If Curseur.RangeAddress.EndRow > 0 Then
		maZone = fSortie.getCellRangeByPosition(0,1,Curseur.RangeAddress.EndColumn, Curseur.RangeAddress.EndRow)
		gomme = com.sun.star.sheet.CellFlags.STRING
		maZone.clearContents(gomme)
	End If	
	maZone = fAdresses.getCellRangeByName("Liste")
	Recherche = maZone.createSearchDescriptor
	For x = 0 To UBound(arr)
		With Recherche
			.SearchString = arr(x,0)
			.SearchWords = True
		End With
		trouv = maZone.findFirst(Recherche)
		If Not isNull(trouv) Then
			Courriel = thisComponent.createInstance("com.sun.star.text.TextField.URL")		
			Courriel.URL = "mailto:" & maZone.getCellByPosition(1,trouv.CellAddress.Row).String
			Courriel.Representation = maZone.getCellByPosition(1,trouv.CellAddress.Row).String
			fSortie.getCellByPosition(0,x + 1).String = arr(x,0)
			fSortie.getCellByPosition(1,x + 1).String = arr(x,1)
			Curseur = fSortie.getCellByPosition(2,x + 1).createTextCursor
			fSortie.getCellByPosition(2,x + 1).insertTextContent(Curseur, Courriel, False)
		Else
			fSortie.getCellByPosition(0,x + 1).String = arr(x,0)
			fSortie.getCellByPosition(1,x + 1).String = arr(x,1)		
			fSortie.getCellByPosition(2,x + 1).String = "NC"
		End If
	Next x
End Sub
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
amazigh42
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 16 févr. 2017 06:37

Re: [Calc] Formatage données vers 3ème onglet

Message par amazigh42 »

Merci Piaf :D

La macro marche très bien.

Petits détails cosmétiques
Il manque le bouton de lancement de la macro qui était présent dans l'onglet Entrée.
On peut la lancer par Ctrl+w mais c'est moins intuitif pour un utilisateur lambda.

Autre chose, après lancement de la macro, on se retrouvait automatiquement dans l'onglet Sortie.

Merci encore :super:
Obligation de version : 6.1.6.3.M13 (x64)
sous Windows sept Entreprise SP1
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 16:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: [Calc] Formatage données vers 3ème onglet

Message par Grenouille »

Bonjour,
amazigh42 a écrit :Petits détails cosmétiques
Il manque le bouton de lancement de la macro qui était présent dans l'onglet Entrée.
Pense à faire une recherche et notamment lire les post-it qui sont épinglés en haut de la section :
https://forum.openoffice.org/fr/forum/v ... =8&t=40146

A+
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
amazigh42
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 16 févr. 2017 06:37

Re: [Calc] Formatage données vers 3ème onglet

Message par amazigh42 »

mea culpa.

J'ai pu créer le bouton de lancement de la macro. :D

Cependant quelle est la modification pour basculer automatiquement dans le 3ème onglet "Sortie" suite au lancement de la macro ?

Merci par avance
Obligation de version : 6.1.6.3.M13 (x64)
sous Windows sept Entreprise SP1
Avatar de l’utilisateur
Grenouille
ManitOOu
ManitOOu
Messages : 3223
Inscription : 13 janv. 2006 16:21
Localisation : Chasseneuil-du-Poitou / Futuroscope

Re: [Calc] Formatage données vers 3ème onglet

Message par Grenouille »

Re,

Tu ne fais pas beaucoup d'effort de recherche :(
https://forum.openoffice.org/fr/forum/v ... re+feuille
OpenOffice 4.1.5 et LibreOffice 5.3.4 (par obligation) sous Windows 7
amazigh42
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 16 févr. 2017 06:37

Re: [Calc] Formatage données vers 3ème onglet

Message par amazigh42 »

Ok :fou:

J'ai rajouté à l'avant dernière ligne de la macro ce bout de code mais ça ne marche pas.
Je ne bascule pas sur l'onglet "Sortie"

Code : Tout sélectionner

ThisComponent.CurrentController.ActiveSheet = ThisComponent.Sheets.GetByName("Sortie")

Code : Tout sélectionner

REM  *****  BASIC  *****

Public Sub NormalizeData()
Dim n As Long, I As Long, k As Long
Dim tmp, arr(), r
With ThisComponent.Sheets.getByName()("Entrée")
n = .Cells(.Rows.Count, 1).End(xlUp).Row
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For I = 3 To n Step 8
tmp = Split(Trim(.Cells(I, 1)), "|")
ReDim Preserve arr(2, k + 1)
arr(0, k) = Trim(Split(tmp(0), ":")(1))
arr(1, k) = Trim(Split(tmp(1), ":")(1))
k = k + 1
Next I
End With
With ThisComponent.Sheets.getByName()("Adresses")
ThisComponent.Names.Add Name:="Liste", RefersTo:=.Cells(1).CurrentRegion
End With
With ThisComponent.Sheets.getByName()("Sortie")
.Cells(1).CurrentRegion.Offset(1).Clear
.Cells(2, 1).Resize(UBound(arr, 2), 2).Value = Application.Transpose(arr)
n = .Cells(.Rows.Count, 1).End(xlUp).Row
For I = 2 To n
r = Application.VLookup(.Cells(I, 1), [Liste], 2, False)
If IsError(r) Then
.Cells(I, 3) = "NC"
Else
.Cells(I, 3) = r
.Hyperlinks.Add anchor:=.Cells(I, 3), _
Address:="mailto:" & .Cells(I, 3)
End If
Next
.Activate
End With
Erase arr
ThisComponent.CurrentController.ActiveSheet = ThisComponent.Sheets.GetByName("Sortie")
End Sub
Obligation de version : 6.1.6.3.M13 (x64)
sous Windows sept Entreprise SP1
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 18:07
Localisation : Guyane

Re: [Calc] Formatage données vers 3ème onglet

Message par Piaf »

Bonjour
A tester.
A+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
amazigh42
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 16 févr. 2017 06:37

Re: [Calc] Formatage données vers 3ème onglet

Message par amazigh42 »

Merci ça fonctionne. :super:

J'ai comparé les 2 macros, elles sont identiques.
Pourquoi ça ne marche pas chez moi ? (ci-joint)
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Obligation de version : 6.1.6.3.M13 (x64)
sous Windows sept Entreprise SP1
amazigh42
Membre lOOyal
Membre lOOyal
Messages : 25
Inscription : 16 févr. 2017 06:37

[Résolu] [Calc] Formatage données vers 3ème onglet

Message par amazigh42 »

Merci, comment fait-on pour mettre la discussion en "Résolu" ?
J'ai cherché en vain le bouton dédié pour ça.
Obligation de version : 6.1.6.3.M13 (x64)
sous Windows sept Entreprise SP1
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 3952
Inscription : 06 oct. 2008 08:03

Re: [Calc] Formatage données vers 3ème onglet

Message par Oukcha »

Bonjour,

Merci de consulter la rubrique À lire avant tout !, notamment Comment mettre [Résolu] ou [Issue]

Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image