Vba Excel: question technique [Résolu]

Signaler
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014
-
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014
-
Bonjour,


Nouvelle en programation et sur ce forum je me permet de vous demander de l'aide.

Je suis actuelement en train d'en baver s'évère (il parait que c'est comme ça qu'on apprend...).

Donc je vous résume la chose:

En gros j'ai 3 fichiers *.txt (et yen aura indefiniment)placer sur internet:

- fichier *.txt : organisme (liste des entreprises avec leur lien *.txt)
- fichier *.txt : données entreprise alfa
- fichier *.txt : données entreprise beta
- etc
..

Je dois faire un fichier excel qui va chercher les données pour ces trois fichiers
en mettant sur la premiere feuille la liste des entreprises donc le contenu du fichier

texte entreprise. (Jusque là c'est bon.J'ai fait un bouton qui met a jour la Feuil1 d'excel).

et sur les autres feuilles  le contenu des autre fichier txt.....

En gros à la fin ca fait feuille1 sommaire avec liste et liens des fichiers txt,
 feuille 2 contenu du fichier txt organisme 1,
 feuille 3 contenu du fichier txt organisme 2 etc...


Donc je suis déjà arrivée péniblement à faire une boucle qui liste les entreprises et créer une feuille pour chacun

mais je n'arrive pas à faire afficher en plus le contenu avec la
commande QueryTables le contenu des fichiers entreprises dans leur
propre feuille.

Ayant
passer une bonne partie de ma journée d'hier ainsi que d'aujourd'hui,
je suis un peu désespérée..quelqu'un a t-il une idée ??


Merci d'avance

25 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
...

Sub feuilles()
        Dim NewSheet As Worksheet
        Dim SName As String
        Dim sURl As String
        Dim Boucle As Integer  
    'elle est passée ou la declaration de la variable DerniereValeur ?
    ' le .Find("").row vas renvoyer la ligne de la premiere cellule vide mauvaise idée !
    ' remet ce que je t'ai donné cet a dire au minimum .Find("*").Row ce qui te retournera la derniere cellule non vide
    ' meme si des cellules existe dans l'intervale.
    ' Tel que tu me la simplifié le find meme si il marche comme ca(sais pas et j'veux meme pas essayer)
    ' tu devrait avoir des ennuis un jour ou l'autre
    DerniereValeur = Worksheets("Feuil1").Range("A1:A50").Find("").Row
   
    ' le -1 a la ligne suivante n'est utile que si tu utilses .Find("").row si tu utilises.Find("*").Row
    'tu n'en auras pas besoin
    For Boucle = 1 To DerniereValeur - 1
       SName = Worksheets("Feuil1").Range("A" & Boucle).Text
       sURl = Worksheets("Feuil1").Range("B" & Boucle).Text
       Set NewSheet = Worksheets(SName)
       ' pour la ligne suivante la Palisse n'aurai pas fait mieux c'est exactement comme ecrire if 1=1 then
       If Worksheets(SName).Name = SName Then
      
       Else
          'un call pour appeler une function VBA quelle drole d'idee ?
          ' pour le -1 aux 2 lignes suivantes  pareil que plus haut
           Call Worksheets.Add(After:=Worksheets(Worksheets.Count - 1))
          ' sa vas planter ici car la feuille Worksheets.Count - 1 n'existe pas encore
           Set NewSheet = Worksheets.Item(Worksheets.Count - 1)
          ' ici tu nous confirme que 1=1 bonne nouvelle
           NewSheet.Name = SName
       End If
       ' remplir c'est quoi un Sub une Function ?
       Call remplir(NewSheet, SName, sURl, NewSheet.Range("A1"))
    Next
    Set NewSheet = Nothing
End Sub

ouai le rouge en gras est bien l'expression de ma colere !

Dans ces conditions j'ose plus dire A+ moi...

aller A+ quand meme
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Moi pour récuperer ce genre de chose par internet via un programme VB j'utilise des BAT (avec Telnet dans ton cas).
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Si je regarde l'aide concernant QueryTables, il faut ajouter le préfixe url; à l'adresse URL... Est-ce que c'est ce que tu fais ? sinon essaie

sURl = "url;" & Worksheets("Feuil1").Range("B" & Boucle).Text

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
3
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
16 avril 2008

Le sujet sempble courant

Il doit y avoir des choses toute faite sur internet
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Regarde du côté du DataObject pour Excel pour voir si ça ne pourrait pas t'aider.
Recherche aussi les fonctions de base de fichiers...

ex:
        Open MonFichier For Binary As #1
        strTemp = Space$(LOF(1))
        Get #1, , strTemp  'strTemp contient tout le fichier
       
        Set MyDataObject = New DataObject
        MyDataObject.SetText strTemp 'le fichier va dans le DataObject
        MyDataObject.PutInClipboard   'on le met dans le presse-papier
        Range("A1").PasteSpecial           'on le copie dans la feuille en A1
       
        Close #1   'fermeture du fichier

       'destruction de l'objet DataObject
        MyDataObject.Clear
        Set MyDataObject = Nothing
       
Ça peut peut-être aider (?)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Désolé je n'ai pas compris ton problème (je m'en vais relire une 5eme fois ^^)

A part ca tu t'est trompé de sous forum, la tu est dans VB6 débutant, il fallait le mettre dans VBA ( t'inquiete c'est normal quand on est nouveau^^)
Messages postés
3
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
16 avril 2008

Merci


Je vais regarder, pff durdur de faire ça dès le début, j'ai déjà une boucle donné par bigfish_le vrai et jrivet.
Mais je sais pas si on peut tout mettre dedans...c'est à dire faire
uneboucle sur la colonne 1 pour lister les noms et créer le feuilles
pour chacun d'entre eux et dans cette boucle lister les liens et leur
dire d'afficher le contenu dans leur feuille...


Est-ce possible de faire tout en une boucle ???
Messages postés
3
Date d'inscription
mercredi 16 avril 2008
Statut
Membre
Dernière intervention
16 avril 2008

Faucheuse--> dslé je me suis en plsu déjà tromper hier..arf à force je serais dans la bonne section.


Est bin pour completer mon explication , j'ai des fichiers texte sur internet qui comporte des données.

Avec eux j'ai un fichier primaire (toujours texte) qui liste les diffirents fichiers texte de données.


exemple:

A                     B

entreprise1    http:\\..............

entreprise2   htpp:\\.........


Sur la feuil1 dans excel je génère le fichier primaire qui liste les autres fichiers

je voudrais au final que le contenu de chaque fichier listé apparraisse dans sa feuille à lui.


J'ai déja une boucle qui fait une feuille pour chaque entreprise
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

ya un pi souc avec les pseudos un coup c madjb un coup c dantes 88 (mon collegue)

c'est pas cool d'avoir un ordi pour deux...bizare


bon dslé pour ça.....



Faucheuse--> as-tu mieux compris ma question ?


faut-il faire une boucle en prenant les adresse dan sla deuxme colonne et faire des QueryTables dans les bonnes pages ??
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,

Merci de ne plus m'envoyer de MP

"
voila hier tu m'a bien aider pour ma boucle de vba

j'essaye de faire autre chose mais c durdur.

j'ai poster encore à un mauvais endroit je t'envoi le lien

si tu a une idée elle sera la bienvenue:

http://www.vbfrance.com/infomsg_VBA-EXCEL-QUESTION-TECHNIQUE_1113633.aspx

ya juste un souci de pseudo madjb=dantes88

on a un ordi pour deux au taf

je te remercie
"

D'autre part, LA PATIENCE DOIT ETRE LA REINE SUR UN FORUM.

Et pour finir: Si je ne prends pas part à la discution il doit y avoir une raison merci donc de respecter ma décision.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Desolé dandjb88...euh madte88... bref!
Je ne connais pas la fonction QueryTable, pour les fichiers, tu les à sur ton disque dur, ou tu veux les charger depuis internet?
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Ca serait depuis internet


Mais je pense que ça change rien


En fait le but est de prendr ele lien dans la premiere feuille et de le
copier dans la boucle qui permettra d'afficher le contenu du fichier
dans une feuille
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Si je comprend bien (je résume a ma maniere tu me dit si c'est bon)

Dans une feuille tu a des liens internet, d'autres feuilles s'ouvrent, dans chacune d'elle le contenu de la page web de chacun des liens de la premiere feuille. C'est ca?

Si c'est ca, ton probleme est il : (expression du besoin comme dirait mon patron ^^)
_ copier le contenu de la page web?
_ afficher le contenue de la page web ?
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

:) c'est cela !


Donc mon besoin, comme dirait ton patron, est de copier le contenu de la page web( qui est une fichier txt)


J'ai pas mal avancé depuis tout taleur d'ailleur je te montre (t va être super content je pari ) :


'Ce qui permet la connexion sur le web par exemple pour aller chercher les fichiers:

Sub remplir(feuille As Worksheet, nom As String, con As String, dest As Range)  

    With feuille.QueryTables.Add(con, dest)

        .Name = nom

        .FieldNames = True

        .RowNumbers = False

        .FillAdjacentFormulas = False

        .PreserveFormatting = True

        .RefreshOnFileOpen = False

        .BackgroundQuery = True

        .RefreshStyle = xlInsertDeleteCells

        .SavePassword = False

        .SaveData = True

        .AdjustColumnWidth = True

        .RefreshPeriod = 0

        .WebSelectionType = xlEntirePage

        .WebFormatting = xlWebFormattingNone

        .WebPreFormattedTextToColumns = True

        .WebConsecutiveDelimitersAsOne = True

        .WebSingleBlockTextImport = False

        .WebDisableDateRecognition = False

        .WebDisableRedirections = False

        .Refresh BackgroundQuery:=False

    End With

End Sub


'et ma boucle qui va parcourir la colonne Asur la feuil1(pour prendre
les noms d'entreprise et créer une feuille par 'entreprise qui
portera..le nom de l'entreprise)

'Et qui va parcourir la colonne B (lien web des fichiers que l'on veut)
et qui  affichera le contenu du fichier dans la feuille de
l'entreprise.)


Sub feuilles()

        Dim NewSheet As Worksheet

        Dim SName As String

        Dim sURl As String

        Dim Boucle As Integer  

   

    DerniereValeur = Worksheets("Feuil1").Range("A1:A50").Find("").Row

   

    For Boucle = 1 To DerniereValeur - 1

       SName = Worksheets("Feuil1").Range("A" & Boucle).Text

       sURl = Worksheets("Feuil1").Range("B" & Boucle).Text

       Set NewSheet = Worksheets(SName)

       If Worksheets(SName).Name = SName Then

      

       Else

           Call Worksheets.Add(After:=Worksheets(Worksheets.Count - 1))

           Set NewSheet = Worksheets.Item(Worksheets.Count - 1)

           NewSheet.Name = SName

       End If

       Call remplir(NewSheet, SName, sURl, NewSheet.Range("A1"))

    Next

    Set NewSheet = Nothing

End Sub



donc pour l'instant j'ai fait cela mais la boucle a du mal à fonctionner.


Si vous voyez de grosses erreurs n'hésitez pas , merci ...(même des petites )
Messages postés
308
Date d'inscription
jeudi 10 janvier 2008
Statut
Membre
Dernière intervention
27 octobre 2011

Oulala vu les codes que je voit j'ai vraiment l'impression que mon cerveau bloque quelque part, pourquoi ne pas utilisé un simple "Open" ?
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Salut Faucheuse,
C'est ce dont je parlais dans ma réponse. En fait, ça pourrait fonctionner en autant que le fichier soit disponible sur son PC, je pense... Et sous Excel, le DataObject peut rendre de grands services.

Avant d'entreprendre la boucle, il serait préférable de tenter d'en ouvrir un. Lorsque ça fonctionnera, la boucle sera du gâteau...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

AU moins on pourra pas dire que j'essaye pas tout seul..... mon code est moche alor ?


-->Désolé de te faire sauter sur ta chaise bigfish le vrai ! j'ai
tout modifier comme tu me la conseillé en me basant sur la première
chaine mais je bloque sur l'utilisation de "remplir". Je pensais
l'appeller avec un "call"....

pour la méthode remplir c'est celle qui est au tout début dans l'ancien post...


--> fauchseuse, MPi : les fichiers texte sont sur internet,
c'est pourcela que j'utilise un querytables....enfin je pense que c'est
la meilleure solution. peut on ouvrir un lien http avec DataObject ?


Bon je remet le code


Sub feuilles()

        Dim NewSheet As Worksheet

        Dim SName As String

        Dim sURl As String

        Dim Boucle As Integer

        Dim DerniereValeur As Long

   

    DerniereValeur = Worksheets("Feuil1").Range("A1:A50").Find("*").Row

   

    For Boucle = 1 To DerniereValeur

       SName = Worksheets("Feuil1").Range("A" & Boucle).Text

       sURl = Worksheets("Feuil1").Range("B" & Boucle).Text

      

       If SName <> vbNullString Then

      

       Else

           Set NewSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))

           Set NewSheet = Worksheets.Item(Worksheets.Count)

           NewSheet.Name = SName

       End If

       'je sais pas comment utiliser la methode remplir qui est une sub voir ancien post

       Call remplir(NewSheet, SName, sURl, NewSheet.Range("A1"))

    Next

    Set NewSheet = Nothing
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Je suis un peu perdu... (?!)
Quel est le problème exactement ?
Créer les feuilles ? Importer un fichier ? ou faire les 2 dans une boucle ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
38
Date d'inscription
mercredi 31 octobre 2007
Statut
Membre
Dernière intervention
7 février 2014

Et bien c'est faire les deux dans la boucle...


Quand je lance il me dit que j'ai un soucis sur

Call remplir(NewSheet, SName, sURl, NewSheet.Range("A1"))


sinon le reste fonctionne apparement, il n'arrive pas a remplir les feuille au fur et à mesure qu'il les crée
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Y a-t-il un message d'erreur ? si oui, donne le numéro et la description. Ce sera peut-être plus simple de trouver l'erreur. As-tu essayé d'activer la feuille sur laquelle tu veux copier avant d'appeler ta fonction remplir ou en début de celle-ci ?

Est-ce que tu peux fournir l'URL ou c'est confidentiel ?

PS: Comme je n'utilise jamais QueryTables, ce n'est pas simple de trouver l'erreur et je n'ai pas de site pour faire des tests...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI