Ajouter une colonne supplémentaire lors d'un import web
Résolu
Goth!er
Messages postés
15
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour le forum,
Après de nombreuses heures de recherche sur le web je suis finalement parvenu à un code VBA fonctionnel pour l'import de données suivant plusieurs url contenues dans une feuille... J'aimerais maintenant que pour chaque ligne ajoutée, le nom de la source soit indiqué dans une nouvelle colonne supplémentaire..
Ex : en A les urls, en B le nom de la source
L'import de l'URL A2 crée 250 lignes , il faudrait qu'en Z le code ajoute le contenu de B2 pour les 250 lignes créées.
L'import de l'Url A3 crée 173 lignes , en Z pour ces 173 lignes le contenu de B3
Le nombre de lignes importées est aléatoire pour chaque url.
Je suis impatient de voir vos idées.
Merci déjà d'avance de vos réponses
Après de nombreuses heures de recherche sur le web je suis finalement parvenu à un code VBA fonctionnel pour l'import de données suivant plusieurs url contenues dans une feuille... J'aimerais maintenant que pour chaque ligne ajoutée, le nom de la source soit indiqué dans une nouvelle colonne supplémentaire..
Ex : en A les urls, en B le nom de la source
L'import de l'URL A2 crée 250 lignes , il faudrait qu'en Z le code ajoute le contenu de B2 pour les 250 lignes créées.
L'import de l'Url A3 crée 173 lignes , en Z pour ces 173 lignes le contenu de B3
Le nombre de lignes importées est aléatoire pour chaque url.
Je suis impatient de voir vos idées.
Merci déjà d'avance de vos réponses
A voir également:
- Activesheet.querytables.add
- Déplacer une colonne excel - Guide
- Web office - Guide
- Trier une colonne excel - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Je suis impatient de voir ton code, et de le compléter.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Proposition :
Je n'ai pas changé où il importait les données, je ne sais pas où tu souhaites que cela aille. Si tu veux le changer, c'est déterminé par :
Si tu changes cela, attention à changer aussi la logique de stockage de la source en colonne Z :
Option Explicit Sub test1() Sheets("Urls").Select ActiveCell.Select Dim I As Long, A As String Dim B As String Dim lrc As Long Dim newlrc As Long Dim nligne As Long ' declaring variables With ActiveSheet I = 2 Do A = .Cells(I, 1).Value B = .Cells(I, 2).Value 'source If A <> "" Then lrc = .Cells(Rows.Count, "A").End(xlUp).Row 'last row in C column With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & A, Destination:=Cells(lrc + 1, "A")) .Name = I .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertEntireRows .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlAllTables .WebFormatting = xlWebFormattingNone '.WebTables = "1,2" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With newlrc = .Cells(Rows.Count, "A").End(xlUp).Row ' new last row For nligne = lrc + 1 To newlrc .Cells(nligne, 26) = B Next End If I = I + 1 Loop Until A = "" End With Beep Sheets("Checking").Select End Sub
Je n'ai pas changé où il importait les données, je ne sais pas où tu souhaites que cela aille. Si tu veux le changer, c'est déterminé par :
Destination:=Cells(lrc + 1, "A")
Si tu changes cela, attention à changer aussi la logique de stockage de la source en colonne Z :
For nligne = lrc + 1 To newlrc .Cells(nligne, 26) = B Next
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Tout vers "Sheet2" :
Option Explicit Sub test1() Sheets("Urls").Select ActiveCell.Select Dim I As Long, A As String Dim B As String Dim lrc As Long Dim newlrc As Long Dim nligne As Long ' declaring variables With ActiveSheet I = 2 Do A = .Cells(I, 1).Value B = .Cells(I, 2).Value 'source If A <> "" Then lrc = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row 'last row in C column With Sheets("Sheet2").QueryTables.Add(Connection:= _ "URL;" & A, Destination:=Sheets("Sheet2").Cells(lrc + 1, "A")) .Name = I .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertEntireRows .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlAllTables .WebFormatting = xlWebFormattingNone '.WebTables = "1,2" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With newlrc = Sheets("Sheet2").Cells(Rows.Count, "A").End(xlUp).Row ' new last row For nligne = lrc + 1 To newlrc Sheets("Sheet2").Cells(nligne, 26) = B Next End If I = I + 1 Loop Until A = "" End With Beep Sheets("Checking").Select End Sub
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Mon dernier mot :
Option Explicit Sub test1() Dim I As Long, A As String Dim B As String Dim lrc As Long Dim newlrc As Long Dim nligne As Long Dim fsource As Worksheet, fdest As Worksheet Dim qt As QueryTable Set fsource = Sheets("Urls") Set fdest = Sheets("Sheet2") For Each qt In fdest.QueryTables 'nettoyage des anciens "QueryTables.Add" qt.Delete Next I = 2 Do A = fsource.Cells(I, 1).Value B = fsource.Cells(I, 2).Value 'source If A <> "" Then lrc = fdest.Cells(Rows.Count, "A").End(xlUp).Row 'last row in C column With fdest.QueryTables.Add(Connection:= _ "URL;" & A, Destination:=fdest.Cells(lrc + 1, "A")) .Name = I .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertEntireRows .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlAllTables .WebFormatting = xlWebFormattingNone '.WebTables = "1,2" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With newlrc = fdest.Cells(Rows.Count, "A").End(xlUp).Row ' new last row For nligne = lrc + 1 To newlrc fdest.Cells(nligne, 26) = B Next End If I = I + 1 Loop Until A = "" Beep 'Sheets("Checking").Select End Sub
Re,
Idem , le premier import est décalé ...
Je teste tout simplement avec :
A2 :https://forums.commentcamarche.net/forum/bureautique-25 B2:bureautique
A3: https://forums.commentcamarche.net/forum/excel-145 B3 :Excel
En sheet2 , le 1er import débute en colonne D , le suivant en colonne A ...
Idem , le premier import est décalé ...
Je teste tout simplement avec :
A2 :https://forums.commentcamarche.net/forum/bureautique-25 B2:bureautique
A3: https://forums.commentcamarche.net/forum/excel-145 B3 :Excel
En sheet2 , le 1er import débute en colonne D , le suivant en colonne A ...
En fait, c'est plus compliqué et plus embêtant que cela : les premiers urls se mettent bien, et, parfois, un url suivant insère trois colonnes, donc décale les premiers (inclus la colonne Z des premiers).
Je suspecte que c'est lié à la logique qui met le texte en colonnes.
Ce comportement disparaît en changeant :
Tu avais besoin de mettre le texte en colonnes? Maintenant tout le texte est en A.
Je suspecte que c'est lié à la logique qui met le texte en colonnes.
Ce comportement disparaît en changeant :
.WebPreFormattedTextToColumns = False
Tu avais besoin de mettre le texte en colonnes? Maintenant tout le texte est en A.
mmh ... j'ai effectivement besoin des colonnes.
En réalité, j'importe des données clients via ce procédé , ce qui constitue la base de données.
Ca fonctionnais nickel, excepté 1 chose , je ne parvenais pas identifier de quel magasin était le client... la donnée de magasin n’étant pas dans l'import.
Ton complément fonctionne parfaitement et rempli ce manquement !
Reste juste ce petit décalage énervant , la recherche client étant basée sur un VLOOKUP par numéro de client dans la colonne A ... les clients de l'import décalés ne seront pas détecté et les infos non remontées..
En réalité, j'importe des données clients via ce procédé , ce qui constitue la base de données.
Ca fonctionnais nickel, excepté 1 chose , je ne parvenais pas identifier de quel magasin était le client... la donnée de magasin n’étant pas dans l'import.
Ton complément fonctionne parfaitement et rempli ce manquement !
Reste juste ce petit décalage énervant , la recherche client étant basée sur un VLOOKUP par numéro de client dans la colonne A ... les clients de l'import décalés ne seront pas détecté et les infos non remontées..
Ca fonctionne !!!
l'erreur était dans le code ...
WebTables est en commentaire !!!
et ca a l'air de fonctionner !!!!
Mille Mercis !!!
Pour un premier post sur un forum, l’expérience fut extra et cela grâce à toi !!
l'erreur était dans le code ...
.WebFormatting = xlWebFormattingNone
'.WebTables = "1,2"
.WebPreFormattedTextToColumns = Tru
WebTables est en commentaire !!!
.WebFormatting = xlWebFormattingNone
.WebTables = "1,2"
.WebPreFormattedTextToColumns = True
et ca a l'air de fonctionner !!!!
Mille Mercis !!!
Pour un premier post sur un forum, l’expérience fut extra et cela grâce à toi !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour ton intérêt
Fonctionne tres bien si ce n'est qu'il importe les données sous la liste d' URLS... si tu sais comment modifier cela aussi ce serait nickel :-)