Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1462 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA word supprimer lignes en doubles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA word supprimer lignes en doubles

n°2304736
daniel-12
Posté le 18-08-2017 à 15:37:28  profilanswer
 

Bonjour
j'ai une macro VBA qui fait une opération un peut compliquée
elle vérifie si un fichier PDF est ouvert, puis si c'est le cas sauve ce fichier PDF en txt, et le reinjecte ensuite dans une zone de texte dans word
 
je fais cela car j'ai une autre macro qui effectue un contrôle, mais qui ne sais le faire que dans des zone de texte et donc dans l'environement MSOffice
 
ca marche , mais  j'ai quelque soucis !
 
lorsque je save le fichier pdf en txt, j'ai parfois des lignes en double
et donc je les reinjecte en double
ce qui allonge le traitement et parasite le contrôle
 
 
voici la partie de code qui récupère le contenu du txt pour le mettre dans word
 

Code :
  1. i = 0 'Initialisation du compteur de lignes
  2.         While Not EOF(IndexFichier) '
  3.             Line Input #IndexFichier, ContenuLigne
  4.             Selection.TypeText Text:=ContenuLigne
  5.             Selection.TypeParagraph
  6.             i = i + 1
  7.             If i = 100 Then 'Toutes les 100 lignes on ajoute une nouvelle textbox
  8.                 Set txtBx = ThisDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, 20, 100, 500, 200)
  9.                 txtBx.Select
  10.                 i = 0
  11.             End If
  12.         Wend


 
comment faire pour au passage, supprimer les lignes en doubles ?
 
 
 
 
 
 

mood
Publicité
Posté le 18-08-2017 à 15:37:28  profilanswer
 

n°2304812
Marc L
Posté le 22-08-2017 à 11:58:19  profilanswer
 

 
            Bonjour,
 
            utiliser une Collection ou l'objet Dictionary, les deux étant consultables dans l'aide VBA interne …
 

n°2304822
daniel-12
Posté le 22-08-2017 à 18:08:34  profilanswer
 

Code :
  1. Sub Sup_doublons()
  2. Dim objDictionary As Scripting.Dictionary
  3. Dim objFSO As Scripting.FileSystemObject
  4. Dim objFile As Scripting.TextStream
  5. Dim oTxt As Scripting.TextStream
  6. Set objDictionary = CreateObject("Scripting.Dictionary" )
  7. Set objFSO = CreateObject("Scripting.FileSystemObject" )
  8. Set objFile = objFSO.OpenTextFile("C:\Temp\tempo_pour_controle.txt", ForReading)
  9. Dim strName As String
  10. Do Until objFile.AtEndOfStream
  11. strName = objFile.ReadLine
  12. If Not objDictionary.Exists(strName) Then
  13. objDictionary.Add strName, strName  'creation du dico en ingorant les ligne en doubles
  14. End If
  15. Loop
  16. objFile.Close
  17. Dim strKey As Variant
  18. Set objFile = objFSO.OpenTextFile("C:\Temp\tempo_pour_controle.txt", ForWriting)   'reecriture du fichier a partir du dico
  19. For Each strKey In objDictionary.Keys
  20. objFile.WriteLine strKey
  21. Next
  22. objFile.Close
  23. End Sub


 
ca marche  :D  
j'ai creé une routine juste pour faire la manip
elle lit le fichier, met les données dans le dico, mais sans les doublons
puis elle reecrit le fichier a partir du dico
 
on peut faire plus propre ?


Message édité par daniel-12 le 22-08-2017 à 18:08:57
n°2304825
Marc L
Posté le 22-08-2017 à 19:15:49  profilanswer
 

 
            • En ligne 16 la chaîne peut être vide car seule la clef compte …
 
            • Ne pas oublier de libérer chaque variable objet en fin de procédure …
 
            • J'ai bien l'impression que les références à des ActiveX ont été activées (déclaration anticipée / early binding) et
               utilisées lors de la déclaration de variables objet mais l'affectation de ces variables ne les utilise pas (late binding)
               vu l'utilisation de la fonction CreateObject !
 
            VBA ayant déjà tout le nécessaire pour un fichier texte, je n'utiliserais pas l'ActiveX FileSystemObject …              
 

n°2304826
daniel-12
Posté le 22-08-2017 à 19:25:50  profilanswer
 

en effet c'est coché Microsoft Scripting Runtime
car j'avais des soucis en adaptant ce code venant d'un VBS
 
comment tu verrais le code ?
 
 
j'ai un autre soucis
mais on verra après


Message édité par daniel-12 le 22-08-2017 à 19:26:27
n°2304848
Marc L
Posté le 23-08-2017 à 16:24:30  profilanswer
 

 
            Peu importe en déclaration anticipée pour profiter de l'Intelisense ou en déclaration tardive mais en évitant de les mélanger !
 
            L'autre souci pouvant remettre en cause une procédure déjà développée,
            mieux vaut donc avoir une vision globale avant d'écrire ne serait-ce la première ligne de code …
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA word supprimer lignes en doubles

 

Sujets relatifs
VBA BO afficher le gestionnaire de rapportExecuter du code VBA sur un outil web
[RESOLU] VBA - Tag d'1 var bidimensionnelle sur 1 librairie SharePointVBA Excel Requète WEB
Problème MFC en VBA (erreur -2147417848 (80010108) )[VBA/HTML] insérer une image dans un mail
code VBA autoriser collage en valeurMacro de suppression pour word
Problème syntaxe VBA 
Plus de sujets relatifs à : VBA word supprimer lignes en doubles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR