Extraire une liste à partir d'un copier-coller de site
Résolu
Guy_L
Messages postés
176
Date d'inscription
Statut
Membre
Dernière intervention
-
Guy_L Messages postés 176 Date d'inscription Statut Membre Dernière intervention -
Guy_L Messages postés 176 Date d'inscription Statut Membre Dernière intervention -
Bonjour, Bonjour,
Le site du Bon Coin ne permet pas d'extraire la liste de ses annonces vers Excel, il faut procéder avec un copier-coller et après faire du "nettoyage".
Après avoir enlevé les photos, il reste une liste mais elle n'est pas homogène, elle se présente sous la forme suivante:
[Objet mis en vente]
€5
Téléphonie
Date
13/01/2019 16:05
59 jours restants
6
∅
0
Correspondant respectivement à
Objet
Prix (s'il y en a un)
Catégorie
Titre "Date"
La date et l'heure de dépôt sur le site
Le nbre de jours restant avant expiration de l'annonce
Le nombre de visiteurs
Le nombre de clics pour appel téléphonique
Le nombre de mails
Mais parfois, comme il n'y a pas de prix, la ligne est manquante
Or j'aimerai extraire ces infos sous la forme d'un tableau avec les colonnes suivantes
Intitulé / Prix / Catégorie / Date / vues / tel / mails reçus
Le fait que la longueur de la liste varie avec le nombre d'annonces et qu'il y a parfois un "trou" à l'emplacement prix me pose des problèmes pour réaliser une macro permettant de réaliser cette opération automatiquement. Pouvez-vous m'y aider ?
Merci
Le site du Bon Coin ne permet pas d'extraire la liste de ses annonces vers Excel, il faut procéder avec un copier-coller et après faire du "nettoyage".
Après avoir enlevé les photos, il reste une liste mais elle n'est pas homogène, elle se présente sous la forme suivante:
[Objet mis en vente]
€5
Téléphonie
Date
13/01/2019 16:05
59 jours restants
6
∅
0
Correspondant respectivement à
Objet
Prix (s'il y en a un)
Catégorie
Titre "Date"
La date et l'heure de dépôt sur le site
Le nbre de jours restant avant expiration de l'annonce
Le nombre de visiteurs
Le nombre de clics pour appel téléphonique
Le nombre de mails
Mais parfois, comme il n'y a pas de prix, la ligne est manquante
Or j'aimerai extraire ces infos sous la forme d'un tableau avec les colonnes suivantes
Intitulé / Prix / Catégorie / Date / vues / tel / mails reçus
Le fait que la longueur de la liste varie avec le nombre d'annonces et qu'il y a parfois un "trou" à l'emplacement prix me pose des problèmes pour réaliser une macro permettant de réaliser cette opération automatiquement. Pouvez-vous m'y aider ?
Merci
Configuration: Windows / Firefox 64.0
A voir également:
- Extraire une liste à partir d'un copier-coller de site
- Liste déroulante excel - Guide
- Site de telechargement - Accueil - Outils
- Extraire une video youtube - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Site comme coco - Accueil - Réseaux sociaux
28 réponses
2 erreurs détectées
La première: erreur de saisie de ma part(un + 1 à la place de * 1)
If CDate(Left(ShVert.Cells(LigV + 4, "A"), 10)) * 1 > Date + 1 Then 'Si la date est supérieure à celle d'aujourd'hui
la correction:
If CDate(Left(ShVert.Cells(LigV + 4, "A"), 10)) * 1 > Date * 1 Then 'Si la date est supérieure à celle d'aujourd'hui
La deuxième: dans la liste "Pro", une date était mal écrite: 11/021/2019 au lieu de 11/12/2019
https://mon-partage.fr/f/PmyE3nry/
Essayez à nouveau
La première: erreur de saisie de ma part(un + 1 à la place de * 1)
If CDate(Left(ShVert.Cells(LigV + 4, "A"), 10)) * 1 > Date + 1 Then 'Si la date est supérieure à celle d'aujourd'hui
la correction:
If CDate(Left(ShVert.Cells(LigV + 4, "A"), 10)) * 1 > Date * 1 Then 'Si la date est supérieure à celle d'aujourd'hui
La deuxième: dans la liste "Pro", une date était mal écrite: 11/021/2019 au lieu de 11/12/2019
https://mon-partage.fr/f/PmyE3nry/
Essayez à nouveau
Hélas, ça butte toujours sur cette deuxième ligne:
If CDate(Left(ShVert.Cells(LigV + 3, "A") * 1, 10)) * 1 > Date * 1 Then 'Si la date est supérieure à celle d'aujourd'hui
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 4, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
et dans le fichier "réel", il y a encore des dates du type 29/11/2019
Dans le fichier Classeur 3 ci-dessous j'ai mis deux annonces symptomatiques (toutes deux dans "Pro")
https://mon-partage.fr/f/pwZ4XesD/
La première "passe" (date OK 29/11/2018), la seconde non (29/11/2019)
If CDate(Left(ShVert.Cells(LigV + 3, "A") * 1, 10)) * 1 > Date * 1 Then 'Si la date est supérieure à celle d'aujourd'hui
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 4, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
et dans le fichier "réel", il y a encore des dates du type 29/11/2019
Dans le fichier Classeur 3 ci-dessous j'ai mis deux annonces symptomatiques (toutes deux dans "Pro")
https://mon-partage.fr/f/pwZ4XesD/
La première "passe" (date OK 29/11/2018), la seconde non (29/11/2019)
Encore une bourde (copier-coller non corrigé)
dans la ligne ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 4, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
remplacez le 4( en gras) par 3, ce qui donne
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 3, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
Essayez
dans la ligne ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 4, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
remplacez le 4( en gras) par 3, ce qui donne
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 3, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
Essayez
Je pense que le problème était dans le Else:
Script initial
> avec donc un test sur la ligne + 3 alors qu'avec le prix, elle est décalée en + 4
Script corrigé
J'ai aussi corrigé ces lignes
en
Pour autant, la macro bute à nouveau sur
????
Script initial
ShHoriz.Cells(LigH, "A") = Format(ShVert.Cells(LigV + 3, "A"), "mm/dd") 'Date
> avec donc un test sur la ligne + 3 alors qu'avec le prix, elle est décalée en + 4
Script corrigé
ShHoriz.Cells(LigH, "A") = Format(ShVert.Cells(LigV + 4, "A"), "mm/dd/yyyy") 'Date
J'ai aussi corrigé ces lignes
'Contrôle de la date
If CDate(Left(ShVert.Cells(LigV + 4, "A"), 10)) * 1 > Date * 1 Then 'Si la date est supérieure à celle d'aujourd'hui
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 3, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
Else
ShHoriz.Cells(LigH, "A") = Format(ShVert.Cells(LigV + 4, "A"), "mm/dd/YYYY") 'sinon on conserve la date
en
'Contrôle de la date
If CDate(Left(ShVert.Cells(LigV + 3, "A"), 10)) * 1 > Date * 1 Then 'Si la date est supérieure à celle d'aujourd'hui
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 3, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
Else
ShHoriz.Cells(LigH, "A") = Format(ShVert.Cells(LigV + 3, "A"), "mm/dd/YYYY") 'sinon on conserve la date
Pour autant, la macro bute à nouveau sur
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 3, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
????
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je me suis mal fait comprendre, c'était justement la ligne du "Else" (celle en gras)
For i = 1 To DerLigV
ShHoriz.Cells(LigH, "B") = ShVert.Cells(LigV, "A") 'Intitulé
If ShVert.Cells(LigV + 3, "A") = "Date" Then
ShHoriz.Cells(LigH, "C") = ShVert.Cells(LigV + 1, "A") 'Prix
ShHoriz.Cells(LigH, "D") = ShVert.Cells(LigV + 2, "A") 'Catégorie
'Contrôle de la date
If CDate(Left(ShVert.Cells(LigV + 4, "A"), 10)) * 1 > Date + 1 Then 'Si la date est supérieure à celle d'aujourd'hui
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 4, "A")) & "/" & Month(ShVert.Cells(LigV + 4, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
Else
ShHoriz.Cells(LigH, "A") = Format(ShVert.Cells(LigV + 4, "A"), "mm/dd/YYYY") 'sinon on conserve la date
End If
ShHoriz.Cells(LigH, "E") = ShVert.Cells(LigV + 6, "A") 'Vues
ShHoriz.Cells(LigH, "F") = ShVert.Cells(LigV + 7, "A") 'Tel
ShHoriz.Cells(LigH, "G") = ShVert.Cells(LigV + 8, "A") 'Mails reçus
LigV = LigV + 9
Else
ShHoriz.Cells(LigH, "D") = ShVert.Cells(LigV + 1, "A") 'Catégorie
'Contrôle de la date
If CDate(Left(ShVert.Cells(LigV + 3, "A") * 1, 10)) * 1 > Date * 1 Then 'Si la date est supérieure à celle d'aujourd'hui
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 3, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
Else
ShHoriz.Cells(LigH, "A") = Format(ShVert.Cells(LigV + 3, "A"), "mm/dd/YYYY") 'sinon on conserve la date
End If
ShHoriz.Cells(LigH, "E") = ShVert.Cells(LigV + 5, "A") 'Vues
ShHoriz.Cells(LigH, "F") = ShVert.Cells(LigV + 6, "A") 'Tel
ShHoriz.Cells(LigH, "G") = ShVert.Cells(LigV + 7, "A") 'Mails reçus
LigV = LigV + 8
End If
https://mon-partage.fr/f/NDPeON2W/
Cdlt
For i = 1 To DerLigV
ShHoriz.Cells(LigH, "B") = ShVert.Cells(LigV, "A") 'Intitulé
If ShVert.Cells(LigV + 3, "A") = "Date" Then
ShHoriz.Cells(LigH, "C") = ShVert.Cells(LigV + 1, "A") 'Prix
ShHoriz.Cells(LigH, "D") = ShVert.Cells(LigV + 2, "A") 'Catégorie
'Contrôle de la date
If CDate(Left(ShVert.Cells(LigV + 4, "A"), 10)) * 1 > Date + 1 Then 'Si la date est supérieure à celle d'aujourd'hui
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 4, "A")) & "/" & Month(ShVert.Cells(LigV + 4, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
Else
ShHoriz.Cells(LigH, "A") = Format(ShVert.Cells(LigV + 4, "A"), "mm/dd/YYYY") 'sinon on conserve la date
End If
ShHoriz.Cells(LigH, "E") = ShVert.Cells(LigV + 6, "A") 'Vues
ShHoriz.Cells(LigH, "F") = ShVert.Cells(LigV + 7, "A") 'Tel
ShHoriz.Cells(LigH, "G") = ShVert.Cells(LigV + 8, "A") 'Mails reçus
LigV = LigV + 9
Else
ShHoriz.Cells(LigH, "D") = ShVert.Cells(LigV + 1, "A") 'Catégorie
'Contrôle de la date
If CDate(Left(ShVert.Cells(LigV + 3, "A") * 1, 10)) * 1 > Date * 1 Then 'Si la date est supérieure à celle d'aujourd'hui
ShHoriz.Cells(LigH, "A") = Format(Day(ShVert.Cells(LigV + 3, "A")) & "/" & Month(ShVert.Cells(LigV + 3, "A")) & "/" & Year(Date) - 1, "mm/dd/yyyy") 'on prend l'année précédente
Else
ShHoriz.Cells(LigH, "A") = Format(ShVert.Cells(LigV + 3, "A"), "mm/dd/YYYY") 'sinon on conserve la date
End If
ShHoriz.Cells(LigH, "E") = ShVert.Cells(LigV + 5, "A") 'Vues
ShHoriz.Cells(LigH, "F") = ShVert.Cells(LigV + 6, "A") 'Tel
ShHoriz.Cells(LigH, "G") = ShVert.Cells(LigV + 7, "A") 'Mails reçus
LigV = LigV + 8
End If
https://mon-partage.fr/f/NDPeON2W/
Cdlt
En effet, j'avais changé la partie avant le Else, pas celle d'après. Maintenant, tout semble fonctionner à merveille. Comment vous remercier ?