[Résolu] [Calc] Convertir des Vcards

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 !
Arthos
Fraîchement OOthentifié
Messages : 6
Inscription : 09 nov. 2013 11:58

[Résolu] [Calc] Convertir des Vcards

Message par Arthos »

Bonjour à vous,

Je développe une base de données sous Filemaker, et dans ce cadre je dois convertir des Vcards (.vcf) dans un tableur (via une macro).

Problème n°1... Je ne suis pas vraiment une bête en macros...

J'ai trouvé sur Sourceforge une macro Excel qui faisait le boulot (http://sourceforge.net/projects/vcf-to-xls, merci Matt Maltarich !)

Problème n°2... Je voudrais fait tourner cette macro sur Calc...


Le code ci-dessous fonctionne sous Excel 2007 mais plante dès le début sous OpenOffice 4 (j'ai pourtant bien coché dans les préférences les Propriétés VBA)...

Savez-vous où je pourrais trouver les quelques infos qui me permettraient de modifier ce code pour le faire tourner sous OpenOffice 4 ?... sans reprendre à la base tout l'apprentissage de Basic :?

Ou encore mieux savez-vous quelles seraient les lignes à modifier ? :D

(pour info, à terme cette macro devra appeler automatiquement un fichier .vcf bien localisé dans un dossier, sans intervention utilisateur...)


Merci pour votre aide,
Arthos

Code : Tout sélectionner


Public thisname
Public myname
Sub auto_open()
Call Macro1
End Sub
Sub Macro1()

thisname = ActiveWorkbook.Name

Message = MsgBox("The 'FILE OPEN' window will now appear. Please open the VCard that contains your contact info.", vbOKOnly)
   FileToOpen = Application.GetOpenFilename("Vcard (*.vcf), *.vcf")
 
 Application.ScreenUpdating = False
 
     Workbooks.OpenText Filename:= _
        FileToOpen, Origin:=437, _
        StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
        , Space:=False, Other:=True, OtherChar:=":", FieldInfo:=Array(Array(1, 1 _
        ), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)) _
        , TrailingMinusNumbers:=True
myname = ActiveWorkbook.Name
'
' Macro1 Macro
' Macro recorded 3/14/2005 by Matt Maltarich
'

'
'count number of "Begin" for progress bar
UserForm1.Show


End Sub
Sub macro2()

On Error GoTo 18
Cells(1, 1).Select

Do
Cells.Find(What:="#name", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
myval = ActiveCell.FormulaR1C1
myvallen = Len(myval)
newmyval = Right(myval, myvallen - 1)
ActiveCell.FormulaR1C1 = "'" & newmyval & ""
Loop


18 On Error Resume Next

Dim PctDone As Single

begin_counter = 0

With Columns("A:A")
    Set begin_var = .Find("BEGIN", LookIn:=xlValues)
    If Not begin_var Is Nothing Then
        firstAddress = begin_var.Address
        Do
            begin_counter = begin_counter + 1
            Set begin_var = .FindNext(begin_var)
        Loop While Not begin_var Is Nothing And begin_var.Address <> firstAddress
    End If
End With

Application.ScreenUpdating = False
ReDim firstname(1 To begin_counter + 1) As String
ReDim middlename(1 To begin_counter + 1) As String
ReDim lastname(1 To begin_counter + 1) As String
ReDim work_phone(1 To begin_counter + 1) As String
ReDim pager(1 To begin_counter + 1) As String
ReDim cell_phone(1 To begin_counter + 1) As String
ReDim fax(1 To begin_counter + 1) As String
ReDim modem(1 To begin_counter + 1) As String
ReDim email_bus(1 To begin_counter + 1) As String
ReDim email_home(1 To begin_counter + 1) As String
ReDim home(1 To begin_counter + 1) As String
ReDim street1_bus(1 To begin_counter + 1) As String
ReDim street1_home(1 To begin_counter + 1) As String
ReDim street2_bus(1 To begin_counter + 1) As String
ReDim street2_home(1 To begin_counter + 1) As String
ReDim city_bus(1 To begin_counter + 1) As String
ReDim city_home(1 To begin_counter + 1) As String
ReDim state_bus(1 To begin_counter + 1) As String
ReDim state_home(1 To begin_counter + 1) As String
ReDim zip_bus(1 To begin_counter + 1) As String
ReDim zip_home(1 To begin_counter + 1) As String
ReDim country_bus(1 To begin_counter + 1) As String
ReDim country_home(1 To begin_counter + 1) As String
ReDim url_bus(1 To begin_counter + 1) As String
ReDim url_home(1 To begin_counter + 1) As String
ReDim org(1 To begin_counter + 1) As String
ReDim title(1 To begin_counter + 1) As String
ReDim note(1 To begin_counter + 1) As String


'initialize all variables
j = 0
i = 1

flag = 0
Counter = 0
counter2 = 0

'Start looking for vcards.  If none found in 3 lines, consider it the end of the string of vcards.
Do While Not Counter = 3
entry = Cells(i, 1)
If entry = "BEGIN" Then
counter2 = counter2 + 1
End If

Select Case entry    ' Evaluate Entry.
Case "BEGIN"
j = j + 1
Counter = 0

'name case
Case "N"
Dim name_cell As String
a = 1
namecell = Cells(i, 2)
If namecell Like "*ENCODING*" Then '= "ENCODING=QUOTED-PRINTABLE" Then
a = a + 1
End If
firstname(j) = Cells(i, a + 2)
middlename(j) = Cells(i, a + 3)
lastname(j) = Cells(i, a + 1)

'address case
Case "ADR"
b = 1
address_type = Cells(i, b + 1)
encoding_cell = Cells(i, b + 2)
If address_type = "" And Not encoding_cell Like "*ENCODING*" Then
flag = 1
b = b - 1
End If
If encoding_cell Like "*ENCODING*" And Not flag = 1 Then
flag = 2
b = b + 1
End If
If address_type Like "*HOME*" Or flag = 1 Then '"TYPE=HOME,PREF" Or address_type = "TYPE=HOME" Or address_type = "HOME" Then
street2_home(j) = Cells(i, b + 3)
street1_home(j) = Cells(i, b + 4)
city_home(j) = Cells(i, b + 5)
state_home(j) = Cells(i, b + 6)
zip_home(j) = Cells(i, b + 7)
country_home(j) = Cells(i, b + 8)
End If
If address_type Like "*WORK*" Then '"TYPE=WORK,PREF" Or address_type = "TYPE=WORK" Or address_type = "WORK" Then
street2_bus(j) = Cells(i, b + 3)
street1_bus(j) = Cells(i, b + 4)
city_bus(j) = Cells(i, b + 5)
state_bus(j) = Cells(i, b + 6)
zip_bus(j) = Cells(i, b + 7)
country_bus(j) = Cells(i, b + 8)
End If

'organization case
Case "ORG"
org_cell = Cells(i, 2)
If org_cell Like "*ENCODING*" Then
org(j) = Cells(i, 3)
Else
org(j) = Cells(i, 2)
End If

'telephone number case
Case "TEL"
c = 1
phone = Cells(i, c + 1)
If phone Like "*ENCODING*" Then
c = c + 1
End If
If Cells(i, c + 2) Like "*VOICE*" Or Cells(i, c + 2) Like "*FAX*" Then
flag2 = 1
c = c + 1
End If

If phone Like "*WORK*" Then '"TYPE=WORK,PREF" Or phone = "TYPE=WORK" Or phone = "WORK" Then
work_phone(j) = Cells(i, c + 2)
End If
If phone Like "*PAGER*" Then '"TYPE=PAGER,PREF" Or phone = "TYPE=PAGER" Or phone = "PAGER" Then
pager(j) = Cells(i, c + 2)
End If
If phone Like "*CELL*" Then '"TYPE=CELL,PREF" Or phone = "TYPE=CELL" Or phone = "CELL" Then
cell_phone(j) = Cells(i, c + 2)
End If
If phone Like "*HOME*" Then '"TYPE=HOME,PREF" Or phone = "TYPE=HOME" Or phone = "HOME" Then
home(j) = Cells(i, c + 2)
End If
If phone Like "*FAX*" Or Cells(i, c + 1) Like "*FAX*" Then '"TYPE=FAX,PREF" Or phone = "TYPE=FAX" Or phone = "FAX" Then
fax(j) = Cells(i, c + 2)
End If
If phone Like "*MODEM*" Then '"TYPE=MODEM,PREF" Or phone = "TYPE=MODEM" Or phone = "MODEM" Then
modem(j) = Cells(i, c + 2)
End If

'email case
Case "EMAIL"
d = 1
email_addr = Cells(i, d + 1)
If email_addr Like "*ENCODING*" Then
d = d + 1
End If
If email_addr Like "*HOME*" Then '"TYPE=HOME,PREF,INTERNET" Or email_addr = "TYPE=HOME,INTERNET" Or email_addr = "HOME" Or email_addr = "TYPE=PREF,INTERNET" Then
email_home(j) = Cells(i, d + 2)
Else
If email_addr Like "*WORK*" Or email_addr Like "*INTERNET*" Then  '"TYPE=WORK,PREF,INTERNET" Or email_addr = "TYPE=WORK,INTERNET" Or email_addr = "WORK" Then
email_bus(j) = Cells(i, d + 2)
Else
If Cells(i, d + 2) Like "*INTERNET*" Then
email_bus(j) = Cells(i, d + 3)
Else
email_home(j) = Cells(i, d + 1)
End If
End If
End If

'website url case
Case "URL"
e = 1
url_type = Cells(i, e + 1)
If url_type Like "*ENCODING*" Then
e = e + 1
End If
If Cells(i, e + 2) Like "*http*" Then
e = e + 1
End If
If url_type Like "*HOME*" Then '"TYPE=HOME,PREF" Or url_type = "TYPE=HOME" Or url_type = "HOME" Then
url_home(j) = Cells(i, e + 2)
End If
If url_type Like "*WORK*" Then '"TYPE=WORK,PREF" Or url_type = "TYPE=WORK" Or url_type = "WORK" Then
url_bus(j) = Cells(i, e + 2)
End If

'title case
Case "TITLE"
title_cell = Cells(i, 2)
If title_cell Like "*ENCODING*" Then
title(j) = Cells(i, 3)
Else
title(j) = Cells(i, 2)
End If

'notes case
Case "NOTE"
note_cell = Cells(i, 2)
If note_cell Like "*ENCODING*" Then
note(j) = Cells(i, 3)
Else
note(j) = Cells(i, 2)
End If

'case that line is blank
Case ""
Counter = Counter + 1
End Select
i = i + 1

' Update the percentage completed.
        PctDone = (counter2 / 2) / begin_counter

        ' Call subroutine that updates the progress bar.
        UpdateProgressBar PctDone

Loop
' The task is finished, so unload the UserForm.
    'Unload UserForm1
ending_i = i
Application.DisplayAlerts = False

ActiveWorkbook.Close

Application.DisplayAlerts = True


Windows(thisname).Activate

Sheets("Contacts").Select
For j = 1 To begin_counter + 1
Cells(j + 1, 1) = firstname(j)
Cells(j + 1, 2) = middlename(j)
Cells(j + 1, 3) = lastname(j)
Cells(j + 1, 4) = home(j)
Cells(j + 1, 5) = work_phone(j)
Cells(j + 1, 6) = cell_phone(j)
Cells(j + 1, 7) = pager(j)
Cells(j + 1, 8) = fax(j)
Cells(j + 1, 9) = modem(j)
Cells(j + 1, 10) = email_bus(j)
Cells(j + 1, 11) = email_home(j)
Cells(j + 1, 12) = street1_home(j)
Cells(j + 1, 13) = street2_home(j)
Cells(j + 1, 14) = city_home(j)
Cells(j + 1, 15) = state_home(j)
Cells(j + 1, 16) = zip_home(j)
Cells(j + 1, 17) = country_home(j)
Cells(j + 1, 18) = street1_bus(j)
Cells(j + 1, 19) = street2_bus(j)
Cells(j + 1, 20) = city_bus(j)
Cells(j + 1, 21) = state_bus(j)
Cells(j + 1, 22) = zip_bus(j)
Cells(j + 1, 23) = country_bus(j)
Cells(j + 1, 24) = url_bus(j)
Cells(j + 1, 25) = url_home(j)
Cells(j + 1, 26) = org(j)
Cells(j + 1, 27) = title(j)
Cells(j + 1, 28) = note(j)
' Update the percentage completed.
        PctDone = ((begin_counter / 2) + (j / 2)) / begin_counter

        ' Call subroutine that updates the progress bar.
        UpdateProgressBar PctDone

Next

' The task is finished, so unload the UserForm.
    Unload UserForm1
Sheets("VCF to XLS").Visible = False
ActiveWindow.DisplayWorkbookTabs = True
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True

'save copy of contacts to new book
Cells.Select
    Selection.Copy
    Workbooks.Add
    Cells.Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Cells(1, 1).Select

Windows(thisname).Activate
ActiveWorkbook.Close False
Application.ScreenUpdating = True

End Sub
Sub UpdateProgressBar(PctDone As Single)
    With UserForm1

        ' Update the Caption property of the Frame control.
        .FrameProgress.Caption = Format(PctDone, "0%")

        ' Widen the Label control.
        .LabelProgress.Width = PctDone * _
            (.FrameProgress.Width - 10)
    End With

    ' The DoEvents allows the UserForm to update.
    DoEvents
End Sub

Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Oukcha le 14 nov. 2013 12:31, modifié 4 fois.
Raison : Titre explicite
Apache OpenOffice 4.0.1
Mac OS X 10.7.5
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17187
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Macro Excel à faire tourner sur OpenOffice

Message par jeanmimi »

Bonjour,
Juste une précision pour avoir des réponses : tu as joints des fichiers, le code de la Macro et son objectif, c'est parfait.
Il te reste maintenant à déplacer ton fil dans la section Macros du Forum avec la balise [Calc].
LibreOffice : Version : 25.2.0.3 (x64)(20 février 2025)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Arthos
Fraîchement OOthentifié
Messages : 6
Inscription : 09 nov. 2013 11:58

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par Arthos »

Bonjour,
Merci pour la réponse mais je ne trouve pas du tout comment changer de forum... :?:
Arthos
Apache OpenOffice 4.0.1
Mac OS X 10.7.5
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17187
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par jeanmimi »

Tu as raison, c'est apparemment impossible, sans l'action d'un Modérateur.
LibreOffice : Version : 25.2.0.3 (x64)(20 février 2025)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9807
Inscription : 28 août 2010 08:45

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par micmac »

Bonjour,

Sujet déplacé en section Macros et API
Touche Ctrl de Windows = touche cmd⌘ sur Mac
OpenOffice > Outils > Options sur Windows = OpenOffice > Préférences sur macOS
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12659
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par Bidouille »

Bonjour,
Arthos a écrit :Je voudrais fait tourner cette macro sur Calc
Vous venez de poser La question qui tue...

Lisez le bandeau rouge en haut de la page, vous êtes dans le cas n° 3 :
Image
Comme mentionné dans l'encart ci-dessus, découpez votre macro en tâche simple et regardez comment cela peut se traduire.
Effectuez pour cela une recherche dans ce forum, les exemples ne manquent pas.
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17187
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par jeanmimi »

Dans ce fil ,tu as l'exemple d'un fichier avec une Macro qui lance l'ouverture de la boite de dialogue qui permet la sélection d'un fichier : https://forum.openoffice.org/fr/forum/v ... er#p212685
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice : Version : 25.2.0.3 (x64)(20 février 2025)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Arthos
Fraîchement OOthentifié
Messages : 6
Inscription : 09 nov. 2013 11:58

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par Arthos »

Bonjour jeanmimi,
Merci pour ta réponse. Malheureusement c'est justement la partie de la macro qui ne me servirait pas ; je voudrais au contraire que la macro pointe vers un fichier bien défini dans l’arborescence (sans l'ouverture d'une boîte de dialogue).
J'ai fait des essais (modification de la Sub Macro 1 mais malheureusement je n'y suis pas encore arrivé.
Et en zappant cette partie (en commençant à la Sub Macro 2 sur une Vcard déjà importée dans un .ods), j'ai des messages d'erreurs... dus au passage de VBA à Basic sur Calc.

Merci en tout cas pour le plan,
Arthos
Apache OpenOffice 4.0.1
Mac OS X 10.7.5
Arthos
Fraîchement OOthentifié
Messages : 6
Inscription : 09 nov. 2013 11:58

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par Arthos »

Bonjour Bidouille,

Merci pour ton message. Je sais que je demande beaucoup avec mon post, mais comme je le disais je ne connais pas du tout OpenOffice et Basic (je fais plutôt du Filemaker), et j'espérais qu'en partant d'une Macro Excel les différences à apporter ne seraient pas énormes.

Je cherche dans la doc et sur les forums depuis hier et je n'avance pas vraiment... J'espérais naïvement trouver ici mon sauveur :roll:

Bonne journée,
Arthos
Le modérateur a écrit : :alerte: Merci de ne pas poster plusieurs messages à la suite.
Si vous devez ajouter un complément d'information, les boutons "EDITER" à la droite du message + "ajout" permettent d'y remédier.

En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
Apache OpenOffice 4.0.1
Mac OS X 10.7.5
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par Churay »

Yeap,

Entre le café et le retour au taf, je réorganise ta demande :
Arthos a écrit :je dois convertir des Vcards (.vcf) dans un tableur (via une macro).
Je comprends extraitre des données pour les présenter dans un tableur
Je voudrais fait tourner cette macro sur Calc...
Je comprends que le tableur en question sera Calc
Je développe une base de données sous Filemaker
Je ne comprends plus : et le module Base ???

D'autant plus que l'extraction Base vers Calc peut se faire sans macro.
Et si macro il doit y avoir, ce sera uniquement pour la présentation des données...

AMHA
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...
Arthos
Fraîchement OOthentifié
Messages : 6
Inscription : 09 nov. 2013 11:58

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par Arthos »

Bonjour Churay,

Tu as raison, je vais préciser l'histoire. Je fais actuellement une base de données sur Filemaker, parce que je connais ce logiciel, qui est assez simple (je suis plus bidouiller que développeur…)

Dans cette base de données, il y aura une table de contacts. Je voudrais synchroniser ces contacts avec le carnet d'adresse iCloud (quotidiennement par exemple, via un script dans Filemaker).

Mais pour ça, je dois comparer ce qui est comparable :
- De Filemaker je peux extraire un fichier de type tableur (.xlsx)
- De l'iCloud je peux extraire un fichier Vcard (.vcf)

Je souhaite intégrer ces deux sources de données dans Calc (donc transformer le .vcf en tableau -voir la macro que j'ai postée plus haut) et procéder à la comparaison, pour obtenir au final un fichier avec les lignes modifiées, que je réintègrerai dans Filemaker.

Le problème que j'ai est que je ne connais pas Calc et Basic (je connais pas mal Excel et je sais ce qu'est une boucle cependant :) … Pour l'instant je galère donc pas mal, je cherche partout comment faire tourner cette macro sur OpenOffice… pour commencer ! (sur OpenOffice parce que tout ça doit tourner sur des ordinateurs en OpenOffice)

Si tu as des idées… je suis preneur :P
Apache OpenOffice 4.0.1
Mac OS X 10.7.5
Avatar de l’utilisateur
Eric Villeneuve (11)
Fraîchement OOthentifié
Messages : 7
Inscription : 01 juil. 2013 16:14

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par Eric Villeneuve (11) »

Bonsoir,
tu trouveras en Pj un exemple de traitement de fichier qui correspond à ta demande,
j'ai juste intégré quelques champs en rapport avec ton fichier Vcard fourni
Pour lancer la macro, cliquer sur l’icône placée au milieu de la feuille import et sélectionner à l'aide de la boite de dialogue le fichier .vcf à importer

La macro n'est pas trop propre, quelques variables n'ayant rien à voir avec ce traitement restent peut-être car celà provient d'un autre traitement de fichier .csv que j'ai fait il y a quelques temps.

De nombreux commentaires sont présents pour comprendre le traitement
Cordialement eric
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Windows 10 - LibreOffice Version: 5.2.5.1 (x64)
Arthos
Fraîchement OOthentifié
Messages : 6
Inscription : 09 nov. 2013 11:58

Re: [Calc] Macro Excel à faire tourner sur OpenOffice

Message par Arthos »

Bonjour Eric,

Whaou, c'est un beau cadeau que tu me fais là. Merci beaucoup :-)

Arthos
Apache OpenOffice 4.0.1
Mac OS X 10.7.5