Comment faire pour "épurer" un copier-coller depuis une liste importée ?

Bonjour,

Certains sites de petites annonces proposent la liste des annonces qu'on y a déposé. Mais ma question pourrait s'étendre à d'autres types d'importations.

Si je fais un copier-coller "brut de fonderie" de la liste sélectionnée dans Excel, on y trouve:

  • les images (ou photos) des articles en vente
  • des lignes séparées par des lignes vides dans lesquelles vont se retrouver à intervalle réguliers:

> la date et l'heure de dépôt de l'annonce

...

Tout ça en utilisant une ligne à chaque info, et souvent séparée par des lignes vides.

J'ai trouvé une macro permettant déjà d'éliminer toutes les images:

[size=85]Sub suppr_images()

Dim img As Object

For Each img In Worksheets(1).Shapes

img.Delete

Next

End Sub[/size]

Mais je voudrais maintenant prendre chaque information et au lieu qu'elle soit listée comme ci-dessous, la placer dans une colonne de façon à obtenir un tableau de type:

N° d'annonce - Titre - déposée le - à (heure) - nbre de jours - catégorie - prix - nbre visites ...

Voici un copier-coller extrait de cette liste (et ça se répète avec les mêmes saut d'une annonce à l'autre:

[size=70]

10-févr

07:33

30

jours

restants

3

Paire de baskets

catégorie : Habillement

14 €

82

vues

0

mails

reçus

0

clics

n° tel

Mettre en avant

Modifier

Supprimer[/size]

Comme vous pouvez le voir, il y a beaucoup de lignes qui peuvent être supprimées (comme les "commandes" Mettre en avant, Modifier, Supprimer, mail reçus, ...)

J'ai galéré depuis des heures pour mettre au point une macro qui ferait le boulot toute seule, mais je ne suis pas assez calé en VBA pour y parvenir efficacement et surtout en comprenant chaque ligne de script.

Pouvez-vous m'y aider SVP ?

Merci

Bonjour,

Tu récupères ces valeurs dans une seule cellule ou elles se trouvent réparties dans différentes cellules ? Si elles sont dans une seule cellule, tu as la fonction EPURAGE() d'Excel (Clean() en VBA) qui vire les retours à la ligne :

Texte = Application.Clean(Texte)

Bon, en attendant plus d'explications !

Bonjour guy_l,

Voyez si le fichier joint vous convient

Collez vos valeurs en colonnes en Feuille2, le résultat en lignes en Feuille3

10guy-l.xlsx (11.08 Ko)

Bonjour,

Bon, en attendant plus d'explications !

et un éventuel fichier

Bonjour

Rebonjour,

Merci à njhub même si le fichier fourni ne fonctionne absolument pas. En fait, je m'y attendais un peu, car pour que ça fonctionne, il faut connaître le nombre de lignes entre chaque "répétition" et le nombre de lignes "vides".

Je joints donc un fichier exemple (déjà épuré des images)

12classeur1.xlsx (13.16 Ko)

Be-ronjour guy_l,

Voyez si le fichier joint vous convient

7guy-l.xlsx (11.31 Ko)

bonjour

un essai

12guy3.xlsx (14.95 Ko)

cordialement

Bonjour,

le fichier qui donne des boutons..

  • des lignes vides
  • des colonnes vides
  • pas de titre aux colonnes utilisées
  • les dates dans une ligne et pas une colonne

Enfin.. c'est toi qui vois et qui l'utilise

P.

Bonjour,

le fichier qui donne des boutons..

  • des lignes vides
  • des colonnes vides
  • pas de titre aux colonnes utilisées
  • les dates dans une ligne et pas une colonne

Enfin.. c'est toi qui vois et qui l'utilise

P.

A qui répondez-vous ? Si c'est à moi, je rappelle que, justement, ce n'est pas "encore" un fichier arrangé, il est brut de décoffrage d'après un copier-coller, il ne peut donc pas avoir un aspect fini. Or c'est précisément là que je veux en arriver: répartir les données de façon à avoir un fichier lisible.

Be-ronjour guy_l,

Voyez si le fichier joint vous convient

guy_l.xlsx

bonjour

un essai

guy3.xlsx

cordialement

Oui, déjà, dans ces deux cas, on a une situation en feuille 3 qui "ressemble" à quelque chose.

Mais comment avez-vous obtenu la feuille 2 de ces fichiers ? Elle est déjà mise en forme comparée à mon fichier initial.

Mais c'est bien, on s'approche très nettement du résultat souhaité.

Merci

remontée

Bonjour,

une solution via une macro à lancer via lat-F8

18guy-i.xlsm (22.74 Ko)

Merci h2so4, ça marche parfaitement

mais pour que je sois moins bête, peux-tu m'expliquer les phases de ce script STP ?

Merci

bonsoir,

voici le code commenté

Sub aargh()
    Set ws1 = Sheets("sheet1") 'ws1 feuille source
    Set ws2 = Sheets("feuille3") 'ws2 feuille résultat
    premièreligne = 3 ' première ligne à laquelle commencent les données utiles
    ws2.Cells.Clear 'on nettoie ws2
    dl1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row 'nombre de lignes ws1
    t1 = Split("1,2,3,7,8,9,10,11,16,21", ",") 'position des lignes contenant des données à reprendre et à mettre en WS2
    j = premièreligne
    Do While IsDate(ws1.Cells(j, 1)) Or j <= dl1 'on répète l'extraction de données tant qu'on a un groupe de lignes qui commence par une date
        k = k + 1 ' on incrémente le nombre de lignes de ws2
        For i = LBound(t1) To UBound(t1) ' on extrait les données ligne par ligne
            ws2.Cells(k + 1, i + 1) = ws1.Cells(j, 1).Cells(t1(i), 1).Text
        Next i
        j = j + t1(UBound(t1)) 'on se positionne sur ws1 à la ligne contenant le dernier info extraite
        Do 'on recherche un ligne date dans les lignes suivantes
            j = j + 1 '
        Loop Until IsDate(ws1.Cells(j, 1)) Or j > dl1 'on boucle tant qu'on a pas trouvé de date et que l'on a pas dépassé le nombre de lignes
    Loop
    ws2.Columns.AutoFit
End Sub

Merci,

Les commandes que je ne connaissais pas:

ws1.Cells(Rows.Count, 1).End(xlUp).Row

Split

IsDate

LBound(t1) To UBound(t1)

.Text (ça, je suppose que c'est pour avoir le résultat en format texte ?)

Merci pour tout, c'est sympa et ça marche comme je le voulais. Merci aussi aux autres contributeurs.

Bonjour,

Tout allait bien, mais il a fallu que le site d'annonces change sa façon de présenter les données. Désormais, elles sont comme dans le fichier joint.

J'ai essayé de "bidouiller" le script fourni pour l'adapter (en changeant notamment

  • les lignes de t1 par les nouveaux n° de lignes
  • en supprimant la condition IsDate(ws1.Cells(j, 1)) puisque ça n'est plus une date
  • en changeant le n° de la première ligne puisque ce n'est plus la 3è mais la 1ère.

J'ai même essayé de remplacer la condition IsDate(ws1.Cells(j, 1)) par Do While ws1.Cells(j, 1).Font.Underline car, en effet, l'article vendu est en format hypertext (souligné).

Pour la première annonce, ça passe, puis, après, il y a un décalage.

Je pense que c'est une question d'incrémentation, mais je n'ai pas trouvé la solution.

La colonne C avec les libellés a été rajoutée manuellement, elle n'existe pas dans le copier-coller depuis le site.

merci d'avance pour votre aide.

2classeur2.xlsx (10.20 Ko)

bonsoir,

une version du code adaptée à cette nouvelle mise en page.

Sub aargh()
    Set ws1 = Sheets("feuil1") 'ws1 feuille source
    Set ws2 = Sheets("feuil3") 'ws2 feuille résultat
    premièreligne = 1 ' première ligne à laquelle commencent les données utiles
    ws2.Cells.Clear 'on nettoie ws2
    dl1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row 'nombre de lignes ws1
    t1 = Split("1,2,4,8,10,12,14", ",") 'position des lignes contenant des données à reprendre et à mettre en WS2
    j = premièreligne
    Do While j <= dl1  'on répète l'extraction de données tant qu'il y a des lignes de données
        k = k + 1 ' on incrémente le nombre de lignes de ws2
        For i = LBound(t1) To UBound(t1) ' on extrait les données ligne par ligne
            ws2.Cells(k + 1, i + 1) = ws1.Cells(j, 1).Cells(t1(i), 1).Text
        Next i
        j = j + 17  'on se positionne sur le groupe données suivant
    Loop
    ws2.Columns.AutoFit
End Sub

Bonjour,

Décidément, le site en question permettait autrefois d'exporter la liste des annonces déposées, ce qui permettait de les "travailler" sous Excel sans problème.

Hélas, ils ont opté pour une publication de la liste des annonces en ligne, et, de ce fait, il faut exporter cela en faisant un copier-coller de la saisie directe sur la page du site.

résultat: dans Excel, on se retrouve avec des images, des cases à cocher (que je vire avec la macro ci-dessous)

Sub Eff_images()
Dim img As Object
For Each img In Sheets("Copie LBC").Shapes
img.Delete
Next
End Sub

Mais après, ça se corse, car le copier-coller sort une liste avec dans cet ordre:

- l'intitulé de l'objet

  • la catégorie
· Date (cette ligne apparaît écrite comme cela)

- la date au format (JJ/MM/AAAA HR:MN:SC) ou, si la date est la date courante : Aujourd'hui, HR:MN

  • le nombre de mails reçus
· (un point qui correspond à une puce)

deux lignes d'espace

Si c'était toujours rangé comme ça, ce serait assez simple, mais parfois, les deux lignes d'espace en dessous n'existent pas, et s'il n'y a pas de prix indiqué, cette ligne n'apparaît pas, on peut donc avoir aussi:

- l'intitulé de l'objet

- la catégorie

· Date (cette ligne apparaît écrite comme cela)

- la date au format (JJ/MM/AAAA HR:MN:SC) ou, si la date est la date courante : Aujourd'hui, HR:MN

  • le nombre de mails reçus
· (un point qui correspond à une puce)

De toutes ces données, je voudrais sortir un tableau (par macro, je pense) avec les colonnes suivantes:

- la date au format JJ/MM/AAAA y compris si la date est la date courante (donc pas de "Aujourd'hui")

  • l'intitulé de l'objet
  • la catégorie
  • le prix
  • le nombre de vues
  • le n° de téléphone
  • le nombre de mails reçus

En clair: épurer et ranger cette liste

manuellement, la fonction =DECALER($A$1;(LIGNES($10:10)-1)*10;) me permet déjà de résoudre en partie le problème:

en effet, avec cette formule, je récupère les intitulés et le reste par colonne, mais c'est loin d'être "universel" quelque soit le résultat du copier-coller d'origine, car dès qu'il y a une ligne qui varie, ça met tout en pagaille.

Merci d'avance pour vos propositions.

Pour ce qui me concerne, espère toujours ...

Pour ce qui me concerne, espère toujours ...

que dois-je comprendre ????
Rechercher des sujets similaires à "comment epurer copier coller liste importee"