VBA de champ dans xls copié dans le notepad windows

Sebasto

XLDnaute Nouveau
Bonjour,
C'est mon premier message et je suis assez débutant (je sais faire les macros en automatique).
Dans un fichier compos.xlsm, je dois :
* créer et enregistrer un champ de cellules (ou une zone, je ne sais pas comment cela s'appelle) par exemple de L8C5 à L26C12 que je veux nommer field1, comment faire de telle sorte que si j'ajoute des lignes ou des colonnes à l'intérieur de cette zone définie, le nom ne soit pas détruit et la zone augmente automatiquement d'autant.
* créer une macro qui intègre le point précédent, qui appelle ce champ, le sélectionne, puis le copie non pas dans un autre fichier Excel, mais dans un fichier txt existant en remplaçant le contenu précédent par le nouveau puis qui enregistre le fichier txt (bon je peux aussi m'arranger avec un nouveau fichier txt que j'appellerai field1.txt)
C'est un gros besoin et avec les macros automatiques, rien ne se passe. Donc la question est sans doute pas facile.
Merci de vos idées, Seb
 

Sebasto

XLDnaute Nouveau
Re : VBA de champ dans xls copié dans le notepad windows [résolu]

Bonjour tototiti2008,

Merci beaucoup pour ta proposition de code. Cela marche aboslument nickel.
Ce week-end j'ai voulu vérifier grandeur nature sur les 19 fichiers txt et je me suis rendu compte d'une difficulté
que je n'avais pas anticipé : je ne peux pas modifier certains noms de fichiers txt car ils sont déjà intégrés à des programmes PHP complexes.
Donc j'ai avancè en utisant la portion de code, qui n'utilise pas la boucle et je l'ai copié 19 fois.
C'est un peu lent mais çà marche... mais j'ai perdu ton élégance.
Donc voilà si cela te tente et que c'est rapide, pourrais-tu modifier ton code pour que je puisse mettre mes 19
noms de fichiers (ou 5 dans le cas de l'exemple).
Aucun problème pour que les noms des plages définies soient identiques aux noms des fichiers txt (mais pas field1,
field2, etc.)
On aurait qqch (je dis n'importe quoi!) comme i="toto", "titi", blabla", bloblo", "truc", "machin", "snoopy"
pour les 5 plages et les noms des 5 txt.
Qu'en penses-tu? Suis-je assez clair ?
Merci, Seb
PS: si c'est plus simple, on peut garder les numéros aux plages (field1, field2, etc.), c'est le nom des txt qui me pose souci.
PPS: merci aussi pour les explications du code... ce que je ne comprend pas bien, c'est pourquoi tu as besoin de faire toutes ces précisions avec j et k à la fin puisque les plages sont définies.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : VBA de champ dans xls copié dans le notepad windows

Bonjour Sebasto,

On va rester sur le principe de plages portant le même nom que les fichiers txt qu'elles doivent générer, si ça ne te pose pas de problème
donc des plages nommées "toto", "titi", "blabla", etc...

Code:
Sub Fields()
  Dim fs As Object, a As Object, i As Long, j As Long, k As Long, Ligne As String, Liste
      'Crée le nom "snoopy" pour les données de la Feuil3
      ThisWorkbook.Names.Add "snoopy", Sheets("Feuil3").Range("A1").CurrentRegion
      'Liste des noms à parcourir et à enregistrer
      Liste = Array("toto", "titi", "blabla", "bloblo", "truc", "machin", "snoopy")
      Set fs = CreateObject("Scripting.FileSystemObject")
      'i passe de 1 à 7 pour les 7 plages
      For i = 1 To 7
      'on sélectionne les plages une à une
      Application.Goto Reference:=Liste(i - 1)
      'on crée le fichier
      Set a = fs.CreateTextFile(ThisWorkbook.Path & "\" & Liste(i - 1) & ".txt", True)
         'Pour chaque ligne  de la plage
         For j = 1 To Range(Liste(i - 1)).Rows.Count
             Ligne = ""
             'Pour chaque colonne de la ligne on colle les informations avec un séparateur tabulation (chr(9))
             For k = 1 To Range(Liste(i - 1)).Columns.Count
                 Ligne = Ligne & Range(Liste(i - 1)).Cells(j, k).Value & Chr(9)
             Next k
             If Len(Ligne) > 0 Then Ligne = Left(Ligne, Len(Ligne) - 1)
             'On écrit la ligne dans le fichier texte
             a.writeline Ligne
         Next j
         'on ferme le fichier
         a.Close
      Next i
     Set a = Nothing
     Set fs = Nothing
  End Sub

ce que je ne comprend pas bien, c'est pourquoi tu as besoin de faire toutes ces précisions avec j et k à la fin puisque les plages sont définies

j et k servent à parcourir chaque cellule de chaque plage (j pour les lignes, k pour les colonnes)
 

Sebasto

XLDnaute Nouveau
Re : VBA de champ dans xls copié dans le notepad windows

Bonjour tototiti2008,

J'ai attendu le jour férié hier pour tout mettre en place et tester.
C'est absolument parfait et tout et tout.
Je me suis rendu compte d'un souci en faisant les macros automatiques pour feuille 2, etc. mais je vais ouvrir un fil nouveau car cela n'a que peu à voir.
Un pote à qui j'ai parlé de ce forum (en bien) m'a demandé à quoi servait cette macro avec des textes dans plusieurs colonnes pour internet.
Pour les profanes du php, je fais simplement un include dans ma page, et, bien sûr, dans mes colonnes, il y a des balises html pour mettre sous forme de tableaux (soit avec <table><tr><td>, soit avec du css).
Avec ta macro mes tableaux sont mis en ligne sans souci et vite.
Merci à toi en te serrant la paluche,

Seb
 

colas2

XLDnaute Nouveau
Re : VBA de champ dans xls copié dans le notepad windows

Salut le forum (bonjour aussi Seb et tototiti2008),

Je me promène souvent ici et je récolte des bonnes idées.
Sur ce fil marqué résolu, j'ai trouvé l'idée très bonne et je l'ai mise en pratique et j'ai plusieurs questions à tous les 2, et surtout à l'expert tototiti2008 qui a écrit le code.
- d'abord pourquoi txt... j'ai vu ailleurs qu'on pouvait enregistrer une VBA sous PDF donc hors environnement Microsoft, quel serait le code pour cela avec un suffixe direct php?
- ensuite pourrait-on ajouter du code avant et après pour simplement ajouter les balises Internet (toutes pareilles, type avant <html> et après </html>)?
- et, petit détail quand même, une des balises devrait être personnalisée, celle sur Internet de <title>... serait-il possible de créer un array avec la liste, parallèle, un à un, de tous les titres des pages php (ou txt si php pas possible)

Enfin, j'ai 2 petites remarques-questions pour tototiti2008 aussi (ou un autre expert du forum):
- j'ai adapté la macro avec 127 plages (pas moins!) et c'est OK, mais même si c'est rapide, on voit pendant l'exécution défiler les plages et cela fait bizarre et cela ralentit peut-être le processus, c'est possible de l'éviter?
- est-il possible de modifier le code ThisWorkbook.Path & "\" pour la sauvegarde de telle sorte que le fichier soit dans un autre dossier.
(j'ai essayé une macro automatique, mais le code est différent, ActiveWorkbook.SaveAs Filename:= _ et "C:\Users\Moi\_Plus\TransfertsTemp\references" etc.?

J'espère que tototiti2008 lit encore ce fil même si il est résolu, sinon je peux ouvrir une nouvelle discussion.
Merci
Cdlt, CC
 

tototiti2008

XLDnaute Barbatruc
Re : VBA de champ dans xls copié dans le notepad windows

Bonjour colas,

- d'abord pourquoi txt... j'ai vu ailleurs qu'on pouvait enregistrer une VBA sous PDF donc hors environnement Microsoft, quel serait le code pour cela avec un suffixe direct php?

Euh, je n'ai pas bien compris mais si tu cherches le code php équivalent, le mieux serait de poser la question sur un forum php...

- ensuite pourrait-on ajouter du code avant et après pour simplement ajouter les balises Internet (toutes pareilles, type avant <html> et après </html>)?
- et, petit détail quand même, une des balises devrait être personnalisée, celle sur Internet de <title>... serait-il possible de créer un array avec la liste, parallèle, un à un, de tous les titres des pages php (ou txt si php pas possible)

Là c'est sûr, je n'ai rien compris
Pas de balise html dans le code demandé par Sebasto, et comment deviner entre quelles balises html le texte de chaque cellule devrait se trouver ?

- j'ai adapté la macro avec 127 plages (pas moins!) et c'est OK, mais même si c'est rapide, on voit pendant l'exécution défiler les plages et cela fait bizarre et cela ralentit peut-être le processus, c'est possible de l'éviter?

Oui, il suffit de mettre

Code:
Application.screenupdating = false

au début et

Code:
Application.screenupdating = true

à la fin

- est-il possible de modifier le code ThisWorkbook.Path & "\" pour la sauvegarde de telle sorte que le fichier soit dans un autre dossier.
(j'ai essayé une macro automatique, mais le code est différent, ActiveWorkbook.SaveAs Filename:= _ et "C:\Users\Moi\_Plus\TransfertsTemp\references" etc.?

Oui, pas de soucis

Code:
Set a = fs.CreateTextFile("C:\Users\Moi\_Plus\TransfertsTemp\references\" & Liste(i - 1) & ".txt", True)
 

colas2

XLDnaute Nouveau
Re : VBA de champ dans xls copié dans le notepad windows

Bonjour tototiti2008,
Merci pour cette réaction super rapide.
Je vais t'expliquer mieux
- pour php, dans ton code set fs qui se termine par ".txt, True)", j'aurais voulu qu'il sauvegarde avec le suffixe .php et pas .txt comme il peut déjà le faire avec .pdf ou .doc (j'ai essayé mais cela n'a pas marché)?
- pour les balises, l'idée serait de lui faire "écrire" avec VBA (j'y connais rien) systématiquement du texte simple avant et après le texte simple des plages (par exemple au début <html><body>... sebasto en parle indirectement car, lui, il fait un include dans sa page php avec ses tableaux sous forme de plages)?

Merci pour la réponse extra aux 2 questions suivantes

CC
 

tototiti2008

XLDnaute Barbatruc
Re : VBA de champ dans xls copié dans le notepad windows

Bonjour colas,

- pour php, dans ton code set fs qui se termine par ".txt, True)", j'aurais voulu qu'il sauvegarde avec le suffixe .php et pas .txt comme il peut déjà le faire avec .pdf ou .doc (j'ai essayé mais cela n'a pas marché)?

ben chez moi ça a marché

essaye ce code là :

Code:
Sub zzz()
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("C:\temp\zut.php", True)
a.writeline "zut"
a.Close
Set a = Nothing
Set fs = Nothing
End Sub

- pour les balises, l'idée serait de lui faire "écrire" avec VBA (j'y connais rien) systématiquement du texte simple avant et après le texte simple des plages (par exemple au début <html><body>... sebasto en parle indirectement car, lui, il fait un include dans sa page php avec ses tableaux sous forme de plages)?

Ben oui, on peut, mais je ne suis pas un spécialiste html, alors si tu ne me donnes pas exactement les balises à ajouter, je vais avoir du mal à deviner
quelles balises ajouter exactement ??
 

colas2

XLDnaute Nouveau
Re : VBA de champ dans xls copié dans le notepad windows

Bonjour tototiti2008,

Je vais tester et je reviens vers toi.
Juste un détail: où mets-tu précisément dans ton VBA les 2 codes :
Application.screenupdating = false

Application.screenupdating = true

Pour les ajouts, c'est par exemple en html 5, il y a d'autres balises mais cela ne changera rien (je connais la subtilité pour les apostrophes qu'il faut doubler)

au début

<!DOCTYPE html><HTML><HEAD><LINK REL="stylesheet" TYPE="text/css" HREF="riton.css">
<TITLE>Titre du site - titre de la page</TITLE>
</HEAD><BODY>

ici viennent les plages en txt

à la fin
</BODY></HTML>

le petit hic concerne le titre, variable, de la page qui pourrait être mis dans une liste2, strictement parallèle.

Merci d'avance (moi je travaille en html 5 donc mes plages ont des balises qui relient les tableaux à mon css comme feuille de style, mais je pense que Sebasto travaillait en html4 avec des tableaux avec <tr><td>... pas de souci c'est seulement certaines cellules des plages qui changent, le principe est le même qui utilise Excel comme tableur (pour faire des tableaux).
C'est là qu'est l'astuce et l'intérêt de ton VBA.
A+, CC
 

colas2

XLDnaute Nouveau
Re : VBA de champ dans xls copié dans le notepad windows

Bonjour tototiti2008,

Je viens de tester l'extension php et cela marche, bravos!
J'ai dû m'emmêler les pinceaux sur la macro VBA initiale.
Alors j'attends tes conseils pour le code qui ajoute les balises avant et après.
Car sans elles, l'extension php n'a pas d'intérêt et il vaut mieux mettre un include comme Sebasto (mais alors on se retrouve avec le double de pages!)

Pour ce qui est du code
Application.screenupdating = false
et
Application.screenupdating = true
j'ai essayé plusiers emplacements (pas les bons!) mais je ne vois pas d'améliorations.

Bon week-end!
Merci, CC (Christian)
 

colas2

XLDnaute Nouveau
Re : VBA de champ dans xls copié dans le notepad windows

UP

Bonjour le forum,
Comme il n'y a plus de réponse de tototiti2008, je relance pour tout le forum.
Voici la macro (à la fin) que tototiti2008 a fait pour sebasto.
Moi avec plus de 100 plages, c'est long et les plages défilent.
Alors tototiti2008 propose de mettre
Application.ScreenUpdating = False
et
Application.ScreenUpdating = True
au début et à la fin
MAIS où dans ce code? j'ai essayé plusieurs endroits mais les plages défilent toujours.
Ensuite, je voudrais mettre du texte toujours le même, sauf un titre différent correspondant à chaque plage, avant et après le texte de chaque plage (détail dans le message précédent)... comment faire siou plait?
Merci à tous
CC

Voici le code (je l'ai étendu à 127 plages, mais c'est la seule modif)
Code:
Sub Fields()
   Dim fs As Object, a As Object, i As Long, j As Long, k As Long, Ligne As String, Liste
       'Crée le nom "snoopy" pour les données de la Feuil3
       ThisWorkbook.Names.Add "snoopy", Sheets("Feuil3").Range("A1").CurrentRegion
       'Liste des noms à parcourir et à enregistrer
       Liste = Array("toto", "titi", "blabla", "bloblo", "truc", "machin", "snoopy")
       Set fs = CreateObject("Scripting.FileSystemObject")
       'i passe de 1 à 7 pour les 7 plages
       For i = 1 To 7
       'on sélectionne les plages une à une
       Application.Goto Reference:=Liste(i - 1)
       'on crée le fichier
       Set a = fs.CreateTextFile(ThisWorkbook.Path & "\" & Liste(i - 1) & ".txt", True)
          'Pour chaque ligne  de la plage
          For j = 1 To Range(Liste(i - 1)).Rows.Count
              Ligne = ""
              'Pour chaque colonne de la ligne on colle les informations avec un séparateur tabulation (chr(9))
              For k = 1 To Range(Liste(i - 1)).Columns.Count
                  Ligne = Ligne & Range(Liste(i - 1)).Cells(j, k).Value & Chr(9)
              Next k
              If Len(Ligne) > 0 Then Ligne = Left(Ligne, Len(Ligne) - 1)
              'On écrit la ligne dans le fichier texte
              a.writeline Ligne
          Next j
          'on ferme le fichier
          a.Close
       Next i
      Set a = Nothing
      Set fs = Nothing
   End Sub
 

stephsteph

XLDnaute Occasionnel
Re : VBA de champ dans xls copié dans le notepad windows

Bonjour Coals 2 et tototiti2008,

Je suis tombée par hasard sur ce fil et sans le savoir tu (tototiti2008) m'as donnée une très bonne soluce pour mes vba avec txt, j'ai esayé (osé) avec php et cela marche super.
Je voulais le dire car PierreJean m'a beaucoup aidée sur ce forum.
Donc ne t'inquiètes pas colas2, il y aura quelqu'un.
Pour tes balises, je ne suis pas compétente mais Pierre Jean avait commencé par un dim, type dim balises.
Ensuite, c'est assez répétitif mais je ne suis pas sûre donc je ne veux pas t'induire en erreur
Bonne chance
Steph
 

Discussions similaires

Réponses
13
Affichages
574

Statistiques des forums

Discussions
312 502
Messages
2 089 022
Membres
104 006
dernier inscrit
CABROL