[VBA Excel] Importer ldif dans excel

Importer ldif dans excel [VBA Excel] - VB/VBA/VBS - Programmation

Marsh Posté le 24-07-2009 à 16:45:58    

Bonjour,
 
Comme je trouvais pas sur le net, j'ai fait un petit script d'importation d'un ldif vers excel.
Je suis pas un pro du format ldif donc il se peut que j'ai pris quelques libertés dans la retranscription.
 
Commentaires constructifs bienvenus, mais pour l'instant ça à l'air de tourner correctement.
 

Code :
  1. Option Explicit
  2. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  3. ' ImportTextFile
  4. ' This imports a text file into Excel.
  5. ' From http://www.cpearson.com/excel/ImpText.aspx
  6. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  7. Public Sub ImportTextFile(FName As String)
  8. Dim RowNdx As Long
  9. Dim WholeLine As String
  10. Dim Pos As Integer
  11. Dim entete(255) As String
  12. Dim taille As Integer
  13. taille = 0
  14. Dim i As Integer
  15. Dim trouve As Integer
  16. Dim a, b As String
  17. RowNdx = 2
  18. Application.ScreenUpdating = False
  19. On Error GoTo EndMacro:
  20. Open FName For Input Access Read As #1
  21. While Not EOF(1)
  22.     Line Input #1, WholeLine
  23.     While Not WholeLine = ""
  24.         Line Input #1, WholeLine
  25.         If Left(WholeLine, 1) = " " Then
  26.             Cells(RowNdx, trouve).Value = Cells(RowNdx, trouve).Value & Right(WholeLine, Len(WholeLine) - 1)
  27.         Else
  28.             Pos = InStr(WholeLine, ":: " )
  29.             If Pos = 0 Then Pos = InStr(WholeLine, ": " )
  30.             If Not Pos = 0 Then
  31.                 a = Left(WholeLine, Pos - 1)
  32.                 b = Right(WholeLine, Len(WholeLine) - (Pos + 1))
  33.                 trouve = 0
  34.                 For i = 1 To taille
  35.                     If entete(i) = a Then trouve = i
  36.                 Next
  37.                 If trouve = 0 Then
  38.                     entete(taille + 1) = a
  39.                     trouve = taille + 1
  40.                     taille = taille + 1
  41.                     Cells(RowNdx, trouve).Value = b
  42.                     Cells(1, trouve).Value = a
  43.                 Else
  44.                     If Cells(RowNdx, trouve).Value = "" Then
  45.                         Cells(RowNdx, trouve).Value = b
  46.                     Else
  47.                         Cells(RowNdx, trouve).Value = Cells(RowNdx, trouve).Value & "|" & b
  48.                     End If
  49.                 End If
  50.             End If
  51.         End If
  52.     Wend
  53.     RowNdx = RowNdx + 1
  54. Wend
  55. EndMacro:
  56. On Error GoTo 0
  57. Application.ScreenUpdating = True
  58. Close #1
  59. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  60. ' END ImportTextFile
  61. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  62. End Sub
  63. Sub DoTheImport()
  64. ImportTextFile FName:="c:\ldif.txt"
  65. End Sub

Message cité 1 fois
Message édité par The_chosen_one le 24-07-2009 à 16:46:50
Reply

Marsh Posté le 24-07-2009 à 16:45:58   

Reply

Marsh Posté le 06-01-2011 à 11:45:54    

Ce script semble répondre exactement a mon besoin;
Coomment faire pour le mettre en oeuvre? (jer n'y connais rien en "script" )
Je suppose que je commence par copier ton text dans un document word?
dois-je changer l'extention en .exe?
dois je remplacer la ligne http://www.cpearson.....
par l'adresse de mon fichier .ldif que je souhaite importe dans Excell?
 
Merci d'avance pour ton aide!
 
Laederich@laposte.net
 

The_chosen_one a écrit :

Bonjour,
 
Comme je trouvais pas sur le net, j'ai fait un petit script d'importation d'un ldif vers excel.
Je suis pas un pro du format ldif donc il se peut que j'ai pris quelques libertés dans la retranscription.
 
Commentaires constructifs bienvenus, mais pour l'instant ça à l'air de tourner correctement.
 

Code :
  1. Option Explicit
  2. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  3. ' ImportTextFile
  4. ' This imports a text file into Excel.
  5. ' From    1. Option Explicit
  6.    2. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  7.    3. ' ImportTextFile
  8.    4. ' This imports a text file into Excel.
  9.    5. ' From http://www.cpearson.com/excel/ImpText.aspx
  10.    6. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  11.    7. Public Sub ImportTextFile(FName As String)
  12.    8.
  13.    9. Dim RowNdx As Long
  14.   10. Dim WholeLine As String
  15.   11. Dim Pos As Integer
  16.   12.
  17.   13. Dim entete(255) As String
  18.   14. Dim taille As Integer
  19.   15. taille = 0
  20.   16.
  21.   17. Dim i As Integer
  22.   18. Dim trouve As Integer
  23.   19. Dim a, b As String
  24.   20.
  25.   21. RowNdx = 2
  26.   22.
  27.   23. Application.ScreenUpdating = False
  28.   24. On Error GoTo EndMacro:
  29.   25.
  30.   26. Open FName For Input Access Read As #1
  31.   27.
  32.   28. While Not EOF(1)
  33.   29.     Line Input #1, WholeLine
  34.   30.     While Not WholeLine = ""
  35.   31.         Line Input #1, WholeLine
  36.   32.         If Left(WholeLine, 1) = " " Then
  37.   33.             Cells(RowNdx, trouve).Value = Cells(RowNdx, trouve).Value & Right(WholeLine, Len(WholeLine) - 1)
  38.   34.         Else
  39.   35.             Pos = InStr(WholeLine, ":: " )
  40.   36.             If Pos = 0 Then Pos = InStr(WholeLine, ": " )
  41.   37.             If Not Pos = 0 Then
  42.   38.                 a = Left(WholeLine, Pos - 1)
  43.   39.                 b = Right(WholeLine, Len(WholeLine) - (Pos + 1))
  44.   40.                 trouve = 0
  45.   41.                 For i = 1 To taille
  46.   42.                     If entete(i) = a Then trouve = i
  47.   43.                 Next
  48.   44.                 If trouve = 0 Then
  49.   45.                     entete(taille + 1) = a
  50.   46.                     trouve = taille + 1
  51.   47.                     taille = taille + 1
  52.   48.                     Cells(RowNdx, trouve).Value = b
  53.   49.                     Cells(1, trouve).Value = a
  54.   50.                 Else
  55.   51.                     If Cells(RowNdx, trouve).Value = "" Then
  56.   52.                         Cells(RowNdx, trouve).Value = b
  57.   53.                     Else
  58.   54.                         Cells(RowNdx, trouve).Value = Cells(RowNdx, trouve).Value & "|" & b
  59.   55.                     End If
  60.   56.                 End If
  61.   57.             End If
  62.   58.         End If
  63.   59.     Wend
  64.   60.     RowNdx = RowNdx + 1
  65.   61. Wend
  66.   62.
  67.   63. EndMacro:
  68.   64. On Error GoTo 0
  69.   65. Application.ScreenUpdating = True
  70.   66. Close #1
  71.   67. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  72.   68. ' END ImportTextFile
  73.   69. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  74.   70. End Sub
  75.   71.
  76.   72. Sub DoTheImport()
  77.   73. ImportTextFile FName:="c:\ldif.txt"
  78.   74. End Sub
  79. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  80. Public Sub ImportTextFile(FName As String)
  81. Dim RowNdx As Long
  82. Dim WholeLine As String
  83. Dim Pos As Integer
  84. Dim entete(255) As String
  85. Dim taille As Integer
  86. taille = 0
  87. Dim i As Integer
  88. Dim trouve As Integer
  89. Dim a, b As String
  90. RowNdx = 2
  91. Application.ScreenUpdating = False
  92. On Error GoTo EndMacro:
  93. Open FName For Input Access Read As #1
  94. While Not EOF(1)
  95.     Line Input #1, WholeLine
  96.     While Not WholeLine = ""
  97.         Line Input #1, WholeLine
  98.         If Left(WholeLine, 1) = " " Then
  99.             Cells(RowNdx, trouve).Value = Cells(RowNdx, trouve).Value & Right(WholeLine, Len(WholeLine) - 1)
  100.         Else
  101.             Pos = InStr(WholeLine, ":: " )
  102.             If Pos = 0 Then Pos = InStr(WholeLine, ": " )
  103.             If Not Pos = 0 Then
  104.                 a = Left(WholeLine, Pos - 1)
  105.                 b = Right(WholeLine, Len(WholeLine) - (Pos + 1))
  106.                 trouve = 0
  107.                 For i = 1 To taille
  108.                     If entete(i) = a Then trouve = i
  109.                 Next
  110.                 If trouve = 0 Then
  111.                     entete(taille + 1) = a
  112.                     trouve = taille + 1
  113.                     taille = taille + 1
  114.                     Cells(RowNdx, trouve).Value = b
  115.                     Cells(1, trouve).Value = a
  116.                 Else
  117.                     If Cells(RowNdx, trouve).Value = "" Then
  118.                         Cells(RowNdx, trouve).Value = b
  119.                     Else
  120.                         Cells(RowNdx, trouve).Value = Cells(RowNdx, trouve).Value & "|" & b
  121.                     End If
  122.                 End If
  123.             End If
  124.         End If
  125.     Wend
  126.     RowNdx = RowNdx + 1
  127. Wend
  128. EndMacro:
  129. On Error GoTo 0
  130. Application.ScreenUpdating = True
  131. Close #1
  132. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  133. ' END ImportTextFile
  134. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  135. End Sub
  136. Sub DoTheImport()
  137. ImportTextFile FName:="c:\ldif.txt"
  138. End Sub




---------------
laederich@laposte.net
Reply

Marsh Posté le 06-01-2011 à 12:37:20    

Non, il ne faut pas copier ce programme dans Word. Il faut copier ce programme dans un module VBA de Excel.
 
L'accès à un module VBA se fait de plusieurs manières.
Personnellement, je vais du côté du VBA par Alt F11, et je clique dans la fenêtre du projet sur "Modules", pour voir s'afficher l'éditeur de texte des macros pour un module. Ensuite faire un copier/coller.
 
Bref, c'est facile quand on a l'habitude, mais pas évident quand on débute.
Je vous conseillerais donc de vous initier au VBA d'Excel en premier lieu.
 
Bon courage !
 
N.B. Ce n'était pas la peine de citer le message précédent, et de réécrire les 147 lignes du programme dans votre question, puisque le programme est visible juste avant.

Message cité 2 fois
Message édité par olivthill le 06-01-2011 à 12:40:49
Reply

Marsh Posté le 06-01-2011 à 13:17:57    

olivthill a écrit :

Non, il ne faut pas copier ce programme dans Word. Il faut copier ce programme dans un module VBA de Excel.
 
L'accès à un module VBA se fait de plusieurs manières.
Personnellement, je vais du côté du VBA par Alt F11, et je clique dans la fenêtre du projet sur "Modules", pour voir s'afficher l'éditeur de texte des macros pour un module. Ensuite faire un copier/coller.
 
Bref, c'est facile quand on a l'habitude, mais pas évident quand on débute.
Je vous conseillerais donc de vous initier au VBA d'Excel en premier lieu.
 
Bon courage !
 
N.B. Ce n'était pas la peine de citer le message précédent, et de réécrire les 147 lignes du programme dans votre question, puisque le programme est visible juste avant.


Reply

Marsh Posté le 06-01-2011 à 13:21:43    

J'ai bien copie les 74 lignes de codes dans VBAProject/Modules/modul1
J'ai sauvegarde sous le nom book1.xlsm
Mais je n'arrive pas a faire tourner la macro?
J'ai essaye alt F5, mais il n'y a pas de macro presente..
 
 
 

olivthill a écrit :

Non, il ne faut pas copier ce programme dans Word. Il faut copier ce programme dans un module VBA de Excel.
 
L'accès à un module VBA se fait de plusieurs manières.
Personnellement, je vais du côté du VBA par Alt F11, et je clique dans la fenêtre du projet sur "Modules", pour voir s'afficher l'éditeur de texte des macros pour un module. Ensuite faire un copier/coller.
 
Bref, c'est facile quand on a l'habitude, mais pas évident quand on débute.
Je vous conseillerais donc de vous initier au VBA d'Excel en premier lieu.
 
Bon courage !
 
N.B. Ce n'était pas la peine de citer le message précédent, et de réécrire les 147 lignes du programme dans votre question, puisque le programme est visible juste avant.


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed