Extraire une liste à partir d'un copier-coller de site

Résolu/Fermé
Guy_L Messages postés 170 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 26 mars 2024 - 15 janv. 2019 à 13:50
Guy_L Messages postés 170 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 26 mars 2024 - 20 janv. 2019 à 17:27
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


Configuration: Windows / Firefox 64.0
A voir également:

28 réponses

Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
20 janv. 2019 à 13:02
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
0
Guy_L Messages postés 170 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 26 mars 2024 1
20 janv. 2019 à 13:23
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)
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
20 janv. 2019 à 13:40
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
0
Guy_L Messages postés 170 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 26 mars 2024 1
20 janv. 2019 à 14:46
Je pense que le problème était dans le Else:

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


????
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
20 janv. 2019 à 15:19
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
0
Guy_L Messages postés 170 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 26 mars 2024 1
20 janv. 2019 à 16:16
En effet, j'avais changé la partie avant le Else, pas celle d'après. Maintenant, tout semble fonctionner à merveille. Comment vous remercier ?
0
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
20 janv. 2019 à 16:29
Si tout fonctionne correctement, mettre en résolu.

Cdlt
0
Guy_L Messages postés 170 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 26 mars 2024 1
20 janv. 2019 à 17:27
OK, non sans un grand merci
0