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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

Copier des donnees entre 2 balises vers Excel

n°1793914
malaka
Posté le 30-09-2008 à 15:28:31  profilanswer
 

Reprise du message précédent :
Oui mais ca m'arrange pas! Je m'explique : je prends un fichier que je veux exploiter. Bah la premiere ligne qui m'interesse est a la ligne 827409 et le fichier en compte 830222 au total! Donc m'arreter avant la fin n'est pas tres utile (malheureusement!)...
 
Desole, mais merci quand meme!
 
Je pense a un truc la! (miracle!!! :lol: ) : adpater ta solution a la condition suivante:
        tant que je n'ai pas trouve la balise 1, je copie rien
 
Ca doit etre faisable ca non? Du coup, c'est juste de la lecture, ce qui prend moins de temps et je recupere ainsi directement les donnees que je veux... (Enfin, je dis peut etre des conneries la!)
 
Bon, comme ca devient un peu trop different de mon sujet d'origine, j'ouvre un nouveau post!


Message édité par malaka le 15-10-2008 à 08:54:00
mood
Publicité
Posté le 30-09-2008 à 15:28:31  profilanswer
 

n°1793922
Moonschild
Posté le 30-09-2008 à 15:43:06  profilanswer
 

Et avec un code de ce genre, cela n'est-il pas rapide (du fait de la copie de moins de caracteres dans res, et donc d'avoir moins a faire pour traiter res ) ?

Code :
  1. Function liretxt()
  2. Dim TextLine
  3. dim copie as boolean
  4. Dim res As String
  5. Dim Apres_machin2 As Integer
  6. copie = false
  7. Open "c:\emplacement\de\ton\texte.txt" For Input As #1
  8. Do While ((Not EOF(1)) and (instr(Line Input #1, "Machin_qui_delimite_la_fin_du_truc_a_copier" ) = 0))
  9.     Line Input #1, TextLine 
  10.     if copie= true then:res = res & Chr(13) & TextLine
  11.     If instr(Textline, "Machin_avant_texte_a_recuperer" ) <>0 then : copie = true
  12. Loop
  13. Close #1
  14. res = Mid(res, 2, Len(res) - 1)
  15. Apres_machin2 = InStr(res, "MACHIN2" )
  16. End Function


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1793932
malaka
Posté le 30-09-2008 à 16:22:16  profilanswer
 

Je pensais effectivement a un truc comme ca (mais bon, vu que je suis pas un specialiste, le code me vient pas aussi vite qu'a vous! Quand il vient!!! Quand il vient pas, il y a hardware.fr....) :D  
 
Heu, il bug sur le Input de la ligne 8.... Je suis perdu (desole!) :(

Message cité 1 fois
Message édité par malaka le 30-09-2008 à 16:32:10
n°1793936
Moonschild
Posté le 30-09-2008 à 16:28:03  profilanswer
 

malaka a écrit :

le code me vient pas aussi vite qu'a vous!


Faut dire aussi que mon travail consiste a faire du vba et accessoirement du vba quoi :whistle:
Et pour le coup, j'me distrais sur la section VBA de hfr quoi [:al zheimer]


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1793946
malaka
Posté le 30-09-2008 à 16:44:55  profilanswer
 

Ah oui, j'oubliais! Le message d'erreur c'est Erreur de compilation : Attendu : separateur de liste
 
Ca doit etre plus facile la!

n°1793948
Moonschild
Posté le 30-09-2008 à 16:50:20  profilanswer
 

Code :
  1. Do While ((Not EOF(1)) and (instr(TextLine, "Machin_qui_delimite_la_fin_du_truc_a_copier" ) = 0))
  2.     Line Input #1, TextLine
  3.     If instr(Textline, "Machin_avant_texte_a_recuperer" ) <>0 then : copie = true
  4.     If instr(Textline, "Machin_qui_delimite_la_fin_du_truc_a_copier" ) <>0 then : copie = false
  5.     if copie= true then:res = res & Chr(13) & TextLine
  6. Loop


Et si tu remplaces la boucle par ca?


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1793951
malaka
Posté le 30-09-2008 à 16:58:00  profilanswer
 

En supprimant les lignes 14 et 15 de ton programme et en modifiant comme ci-dessus, ca fonctionne!
 
Le probleme c'est qu'apres, j'essaye d'ouvrir ca sous un fichier Excel et que ma commande fonctionne pas (j'ai du ecrire ca a la sauvage, desole!). Mais vu que j'y comprends rien (enfin, je commence a comprendre, mais j'ai du mal! Heureusement, le fait de tatonner me permet d'assimiler! Comme quoi, on apprend de ses erreurs!)
 
Voici mon code qui bug :

Code :
  1. Workbooks.OpenText res, Origin:=xlWindows, _
  2. StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
  3. ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, Comma:=True, _
  4. Space:=False, Other:=False, FieldInfo:=Array(1, 1)


Message édité par malaka le 30-09-2008 à 17:00:37
n°1793955
Moonschild
Posté le 30-09-2008 à 17:00:33  profilanswer
 

ca....?
 
EDIT : Bon courage pour ce soir si tu cherches encore, j'reviendrai demain si le probleme persiste  :hello:


Message édité par Moonschild le 30-09-2008 à 17:01:40

---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1793958
Moonschild
Posté le 30-09-2008 à 17:02:46  profilanswer
 

Explique ce que tu veux faire avec ton machin? en fait tu veux ouvrir un classeur excel, et ecrire les lignes dans une cellule, j'me trompe?


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1793959
malaka
Posté le 30-09-2008 à 17:02:51  profilanswer
 

Bah je crois que je vais plus chercher tres longtemps! Je crois que je vais me barrer aussi, moi!
 
A demin donc!  :hello:


Message édité par malaka le 30-09-2008 à 17:03:09
mood
Publicité
Posté le 30-09-2008 à 17:02:51  profilanswer
 

n°1793966
Moonschild
Posté le 30-09-2008 à 17:06:58  profilanswer
 

un truc a la  

Code :
  1. workbooks.add
  2. sheets("nom_de_ta_feuille" ).cells(1, 1).Value = res
  3. activeworkbook.saveas("chemin_où_tu_veux_l'enregistrer" )


?


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1793967
Moonschild
Posté le 30-09-2008 à 17:07:15  profilanswer
 

Oui à demain :hello:


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1794776
malaka
Posté le 02-10-2008 à 13:24:14  profilanswer
 

Desole, j'ai eu un max de taf hier, j'ai pas eu le temps de tester! J'essaye ca cet aprem!

n°1794825
malaka
Posté le 02-10-2008 à 16:07:34  profilanswer
 

Effectivement, ta solution me permet de copier toute ma chaine dans la cellule 1,1.....
 
C'est pas super pratique pour exploiter tout ca derriere!
 
Je souhaitais ouvrir cette chaine de caracteres en remplissant directement les cellules (ie comme lorsque l'on ouvre un fichier texte avec Excel) en changeant de ligne a chaque saut de ligne, en changeant de cellule a chaque groupe d'espace, ....
 
Malheureusement, la solution que je testais ne marche (en tout cas tel quel) pas avec les chaine de caractere. Uniquement avec les fichiers...
 
Je pourrais passer par une sauvegarde de ma chaine dans un fichier temporaire que je detruis apres l'avoir ouvert, mais c'est pas super classe...


Message édité par malaka le 02-10-2008 à 16:11:22
n°1794852
Moonschild
Posté le 02-10-2008 à 16:35:14  profilanswer
 

Désolé du delai, et des possibles fautes, j'dois faire ça en looser en m'planquant du boss... essaye ca :

Code :
  1. Function recup_données()
  2. Dim TextLine
  3. Dim res As String
  4. Dim Apres_machin2 As Integer
  5. Open "c:\emplacement\de\ton\texte.txt" For Input As #1    ' Ouvre le fichier.
  6. Do While ((Not EOF(1)) And (InStr(TextLine, "Machin_qui_delimite_la_fin_du_truc_a_copier" ) = 0))
  7.     Line Input #1, TextLine
  8.     If InStr(TextLine, "Machin_avant_texte_a_recuperer" ) <> 0 Then: copie = True
  9.     If InStr(TextLine, "Machin_qui_delimite_la_fin_du_truc_a_copier" ) <> 0 Then: copie = False
  10.     If copie = True Then: res = res & Chr(13) & TextLine
  11. Loop
  12. Close #1    ' Ferme le fichier.
  13. If res <> "" Then
  14.   res = Mid(res, 2, Len(res) - 1) 'enleve le premier saut de ligne
  15.   Ajout_dans_autre_classeur (res)
  16. Else
  17.   MsgBox ("aucune info trouvée" )
  18. End If
  19. End Function
  20. Function Ajout_dans_autre_classeur(ByVal res As String)
  21. Dim Emplacement_Saut_Ligne, i As Integer
  22. Dim tmp As String
  23. Workbooks.Add 'nouveau classeur
  24. tmp = res
  25. i = 1
  26. While tmp <> "" 'tant qu'il reste des infos
  27.   Emplacement_Saut_Ligne = InStr(tmp, Chr(13)) 'emplacement du chr(13)
  28.   If Emplacement_Saut_Ligne = 0 Then 'cas derniere ligne /ligne unique
  29.     Sheets("nom_de_ta_feuille" ).Cells(i, 1).Value = tmp
  30.     End With
  31.   Else
  32.     Sheets("nom_de_ta_feuille" ).Cells(i, 1).Value = Left(tmp, Emplacement_Saut_Ligne - 1)
  33.     tmp = Mid(tmp, Emplacement_Saut_Ligne + 1, Len(tmp))
  34.   End If
  35.   i = i + 1
  36. Wend
  37. ActiveWorkbook.SaveAs ("chemin_où_tu_veux_l'enregistrer" )
  38. ActiveWorkbook.Close
  39. End Function


 
 
edit : plus joli et lisible avec des sauts de ligne  :whistle:


Message édité par Moonschild le 02-10-2008 à 16:38:15

---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1794862
malaka
Posté le 02-10-2008 à 16:52:15  profilanswer
 

Petit soucis ligne 42 End With sans With. Je l'ai commente et ca marche.
 
Par contre il separe pas les colonnes (et oui je critique tout le temps sans apporter de solution!). Peut etre est-ce du a mon commentaire du End With??
 
Desole, faut que j'y aille.
 
A+ :hello:

n°1794897
Moonschild
Posté le 02-10-2008 à 17:22:45  profilanswer
 

remplace le end with par wend, ca devrait tourner, dsl comme j'te disais, j'ai fais ca a la sauvette
(tu verrais la gueule du machin que j'code en ce moment, c'est a s'arracher les cheveux, donc dsl si j'me paume un peu entre les deux  [:cosmoschtroumpf] )


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1795272
malaka
Posté le 03-10-2008 à 14:54:06  profilanswer
 

Euh, dans ce cas la, il manque un while je crois, non?
 
Pour ton autre programme, bon courage! Moi je suis en train de me prendre la tete sur mon boulot aussi! Ma detente c'est de faire mon petit programme (mais bon, en ce moment, j'ai pas trop le temps, vu le nombre d'emmerdes que j'ai!)

n°1795274
Moonschild
Posté le 03-10-2008 à 14:59:05  profilanswer
 

Oups, oui tiens, ca marche pas :/
tiens, la nouvelle boucle de la deuxieme fonction :

Code :
  1. do While tmp <> "" 'tant qu'il reste des infos
  2.   Emplacement_Saut_Ligne = InStr(tmp, Chr(13)) 'emplacement du chr(13)
  3.   If Emplacement_Saut_Ligne = 0 Then 'cas derniere ligne /ligne unique
  4.     Sheets("nom_de_ta_feuille" ).Cells(i, 1).Value = tmp
  5.     exit do
  6.   Else
  7.     Sheets("nom_de_ta_feuille" ).Cells(i, 1).Value = Left(tmp, Emplacement_Saut_Ligne - 1)
  8.     tmp = Mid(tmp, Emplacement_Saut_Ligne + 1, Len(tmp))
  9.   End If
  10.   i = i + 1
  11. loop


Encore désolé pour la méprise...


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1795355
malaka
Posté le 03-10-2008 à 16:23:16  profilanswer
 

Pas grave, de toute facon, je testerai pas ca avant quelques jours, le temps de me debarrasser de mes etudes actuelles!

n°1795356
Moonschild
Posté le 03-10-2008 à 16:24:56  profilanswer
 

Alors bon courage pour ton boulot actuel :jap:
Ah, et puis euh, Bonne soirée  :hello:
 
Edit: Raté le raccourcis de ": hello :"


Message édité par Moonschild le 03-10-2008 à 16:25:58

---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1797203
malaka
Posté le 08-10-2008 à 14:24:27  profilanswer
 

Apres qq jours d'absence, I'm back  :hello:  
 
J'ai peut-etre loupe un truc la, mais j'ai l'impression qu'il ne separe pas les colonnes (en meme temps, vu que j'ai rien indique comme separateur, c'est normal!).
 
Il doit suffire de mettre un boucle suplementaire pour separer selon le separateur voulu, mais ca va etre un peu lourd la! Le plus simple (pas le plus propre mais bon, c'est pas grave!) c'est sans doute d'enregistrer la chaine dans un fichier et d'ouvrir ensuite ce fichier. Une fois ouvert, il n'y a plus qu'a le supprimer quand on quitte la macro....
 
Du coup, on fait comment pour sauvegarder un fichier (et oui, je suis toujours aussi nul!) et pour le detruire aussi svp???
 
(Du coup, je devrais en avoir finis avec mes questions pourries la... En tout cas ca m'arrangerait! :D  C'est que je commence à en avoir marre de ce code moi! En tout cas j'aurais appris enormement (forcement, en partant de 0...)
 
EDIT : Apres qqs recherches, je vais tester de creer mon fichier avec print (ou write si ca marche pas!, j'ai pas trop compris la difference entre les 2, si ce n'est que write colle des guillemets a chaque ajout  :??: )
 
Par contre, pour ce qui est de la suppression, j'ai pas encore trouve! (mais bon, j'ai pas trop le temps de chercher et en plus, je suis de plus en plus faineant! :D )


Message édité par malaka le 09-10-2008 à 16:28:39
n°1798284
malaka
Posté le 10-10-2008 à 13:52:22  profilanswer
 

Bon bah finalement j'ai trouve tout seul! Merci quand meme!
 
Je souhaite maintenant traiter mes donnes en utilisant des formules sur des colonnes completes.
 
J'ai bien pense faire ma formule sur une seule cellule puis remplir la colonne avec un AutoFill, mais ca va pas etre pôssible vu que j'ai trop de tests a faire. Du coup je pense utiliser une boucle.
 
Je remplis donc ma cellule Cell(i,"colonne de la cellule" ) puis j'incremente i de 1 et je recommence (boucle while simple!).
 
Mais j'ai un bete trou de memoire et je vois pas (a priori comment tester la cellule de reference de ma formule pour savoir si il y a une valeur ou non... :cry: ).
 
Quelqu'un peut-il me renseigner???
 
Merci d'avance! :jap:
 
EDIT : C'est bon je teste si c'est 0 ou pas! (Je suis vraiment bete des fois moi! :pfff: )
 
Bon bah normalement j'ai fini mon programme! Merci de votre aide, surtout a toi Moonschild  :jap:  :jap:  :jap:


Message édité par malaka le 10-10-2008 à 14:47:38
n°1798346
malaka
Posté le 10-10-2008 à 15:24:36  profilanswer
 

Zut, je croyais avoir fini mais non!
 
Apres avoir importe mon fichier dans Excel avec un Workbooks.OpenText et qu'il a correctement tout lu, je souhaite modifier donc les celleuels (Cf post precedent!), mais ma boucle  
 
While Cell(Nligne, 2).Value > 0
 
fonctionne pas! Il ne semble pas connaitre la "fonction" Cell...
 
Donc soit je l'ai pas ecrit correctement, soit il faut que je lui dise avant de travailler dans ce fichier Excel la!
 
Quelqu'un a une idee svp?

n°1798347
Moonschild
Posté le 10-10-2008 à 15:26:19  profilanswer
 

Cells ?


Message édité par Moonschild le 10-10-2008 à 15:26:29

---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1798362
malaka
Posté le 10-10-2008 à 15:49:20  profilanswer
 

Bien vu merci! Mais bon, la il bug avec un message d'erreur 1004 "Erreur definie par l'application ou par l'objet" sur le code suivant:
 

Code :
  1. While ValCell <> 0
  2.     If Cells(Nligne, 3).Value > 199 Then
  3.         If (Cells(Nligne, 6).Value <> 0 Or Cells(Nligne, 7).Value <> 0) Then
  4.             Cells(Nligne, 12).ColorIndex = 3 'rouge
  5.             Cells(Nligne, 12).Pattern = xlSolid
  6.         End If
  7.     Else
  8.         If Cells(Nligne, 5).Value = 0 Then
  9.             Cells(Nligne, 12).Value = ""
  10.             Cells(Nligne, 13).Value = ""
  11.         Else
  12.             Cells(Nligne, 12).Value = (Cells(Nligne, 6).Value / ((Cells(Nligne, 5).Value - Cells(Nligne, 6).Value)))
  13.             Cells(Nligne, 13).Value = (Cells(Nligne, 7).Value / ((Cells(Nligne, 5).Value - Cells(Nligne, 6).Value)))
  14.         End If
  15.     End If
  16.     Nligne = Nligne + 1
  17. Wend


 
Il bug quand il arrive a la fin du fichier et qu'il n'y a plus de cellule a traiter (ie quand la case est vide).
 
Ou bien est-ce parce que lorsqu'il importe un fichier il considere qu'il n'y a pas de lignes supplémentaires apres? (A ce compte, il me suffit de rajouter un saut de ligne a la fin de mon fichier...)

n°1798367
Moonschild
Posté le 10-10-2008 à 15:54:13  profilanswer
 

Au risque de passer pour un con (J'ai l'habitude, donc j'le fais quand meme) ta boucle, elle tourne indefiniement, non? vu que tu ne redefinis jamais la valeur de varcell... donc forcement, il va boucler jusqu'a se taper un Nligne au dela des limite de son type (c'est bien sur le NLigne quest l'erreur? )
Ou alors tu as enlevé une partie du code avant de le post?


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1798370
malaka
Posté le 10-10-2008 à 16:01:47  profilanswer
 

Pardon voici le bout de code manquant (mais je crois que tu as raison!)
 

Code :
  1. Nligne = 4
  2. ValCell = Cells(Nligne, 2).Value
  3. While ValCell <> 0
  4.     If Cells(Nligne, 3).Value > 199 Then
  5.         If (Cells(Nligne, 6).Value <> 0 Or Cells(Nligne, 7).Value <> 0) Then
  6.             Cells(Nligne, 12).ColorIndex = 3 'rouge
  7.             Cells(Nligne, 12).Pattern = xlSolid
  8.         End If
  9.     Else
  10.         If Cells(Nligne, 5).Value = 0 Then
  11.             Cells(Nligne, 12).Value = ""
  12.             Cells(Nligne, 13).Value = ""
  13.         Else
  14.             Cells(Nligne, 12).Value = (Cells(Nligne, 6).Value / ((Cells(Nligne, 5).Value - Cells(Nligne, 6).Value)))
  15.             Cells(Nligne, 13).Value = (Cells(Nligne, 7).Value / ((Cells(Nligne, 5).Value - Cells(Nligne, 6).Value)))
  16.         End If
  17.     End If
  18.     Nligne = Nligne + 1
  19. Wend


 
Et effectivement, d coup, il recalcule jamais la valeur de valCell... Bien vu! Je teste ca de suite...
 
 
EDIT : Teste et effectivement c'etait bien ca! J'avais mis ce valCell afin de tester quand j'avais le probleme de cells et j'ai pas pense a l'enlever apres...
 
 
Voila! Merci beaucoup Moonschild j'ai enfin fini !!!  :jap:  :jap:  :jap:  


Message édité par malaka le 10-10-2008 à 16:04:27
n°1798372
Moonschild
Posté le 10-10-2008 à 16:12:53  profilanswer
 

Et bah voila :D
N'hesite pas a reposter en cas de besoin, nous manquons de gens qui courtois civilisés et qui cherchent en meme temps de leur coté (exemple de ce qu'il faut eviter de faire pour avoir des réponses : http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0  {sisi faut lire, ca vaut le detour} )


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
n°1799393
malaka
Posté le 13-10-2008 à 14:06:27  profilanswer
 

Effectivement, ca vaut le coup d'oeil! C'est un sujet anime! Mais bon, ca sent un peu le fake.... (ou alors il est vraiment tres con, ce qui est possible aussi!)
 
 
J'ai teste mon programme sur un vrai fichier et il s'avere que c'est un poil long! Un collegue m'avait passe un script perl qui faisait la partie lecture et ecriture de fichier. Vu que c'est nettement plus rapide que ma magnifique macro vb, je me demmandais s'il etait possible de faire facilement (vu que je suis un bon gros debutant comme vous l'aurez compris depuis le temps!) appel a ce script perl dans mon code vb. En regardant rapidement sur le net, c'est possible mais j'y comprends pas grand chose. Alors si quelqu'un peut m'aider....
 
Afin de pas surcharger ce topic, j'ai pas mis le code perl mais je peux vous le donner....
 
Merci d'avance... :jap:
 
EDIT : A priori je devrais utiliser la fonction Shell mais je n'ai pas l'impression de pouvoir lui donner directement les paramètres... Me trompe-je?


Message édité par malaka le 14-10-2008 à 09:03:46
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
préocupations sur excelTransformation des attributs xml sous vba excel
Extraire des données d'une page Web en fonction d'un champ formulaireConversion fichier .sql 3.23 vers 5.0 (mysql)
[Access] Composant pour ouvrir Word ,Excel, imagerecuperer donnees xml en javascript
probleme vb excel inter fichiersouvrir un fichier excel
Passage de parametre d'une popup vers page principalegestion des droits d'acces [VBA excel] [RESOLU]
Plus de sujets relatifs à : Copier des donnees entre 2 balises vers Excel


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