Extraire une liste (suite)

Signaler
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020
-
Messages postés
12403
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
-
Bonjour,
Je reprends un sujet que j'avais déposé il y a quelques temps ici: https://forums.commentcamarche.net/forum/affich-35807669-extraire-une-liste-a-partir-d-un-copier-coller-de-site?page=2#p35818288

Il faudrait que je rajoute deux choses
1) si la deuxième ligne (qui devrait en principe contenir un prix en €) ne contient pas ce signe € (cela revient à dire qu'il n'est pas indiqué), alors insérer une ligne à la place
2) si le mot "Historique" est présent dans les lignes de la colonne A, le supprimer partout

Merci de m'aider à la rédaction du script pour ces deux conditions, je saurai comment les ajouter au script existant.

Configuration: Windows / Firefox 72.0

6 réponses

Messages postés
840
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
9 septembre 2020
173
Bonjour,

Comme le lien de partage du fichier n'est plus disponible sur l'ancien post,
Je ne vois pas comment y mettre un "oeil"
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

en effet, je n'avais fait attention, désolé voici le fichier en question:
https://mon-partage.fr/f/qqpOYA4F/
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

Bonjour,
Je reviens sur ce fichier car il me pose des problèmes.
Il s'agit, comme je l'avais expliqué dans le topic initial, d'un "copier-coller" depuis un célèbre site de petites annonces (je ne sais pas si on a le droit de le citer ici).
Quand on fait un copier-coller, la liste des annonces se présente sous une forme classée verticalement dans la colonne A du fichier Excel.
Or, tout ce qui est collé ne m'intéresse pas forcément et, surtout, le format de chaque annonce, même s'il est globalement le même et occupe autant de ligne pour chacune d'entre elles, peut avoir des "variantes" parasites.
Par exemple, si aucun prix n'est indiqué, la ligne sera évidemment "sautée" lors du collage, ce qui provoque un décalage de lignes.
Autre "parasite" constaté: le prix (toujours lui) est "collé" parfois sous la forme monétaire (en €) parfois en simple nombre. Ce qui, dans le traitement macro de mon fichier pose problème.
Car je l'analyse ainsi:
If InStr(ShVert.Cells(LigV + 1, "A").Text, "€") = 0 Then ShVert.Rows(LigV + 1).Insert Shift:=xlDown
'rajoute un saut de ligne si la ligne après l'intitulé n'est pas un prix

Pour l'instant, c'est la ligne qui me pose problème. Il faudrait (peut-être) que je traite cette ligne pour détecter un "nombre" et non pas le signe €, de cette façon, que ce soit monétaire ou non, la macro ajoutera une ligne si ce n'est pas un nombre.

Je peux vous soumettre un fichier, mais comme il y a des données personnelles et professionnelles, je devrais limiter ses infos au copier-coller partiel (sans la partie macros). Est-ce que c'est bien utile ?
Merci d'avance pour votre aide
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

Bonjour,
j'ai avancé un peu, mais suis bloqué par deux autres problèmes:

Voici d'abord comment j'ai résolu la "détection de l'absence de prix"

If IsNumeric(ShVert.Cells(LigV + 1, "A")) = False Then ShVert.Rows(LigV + 1).Insert Shift:=xlDown
'rajoute un saut de ligne si la ligne après l'intitulé n'est pas un nombre


(au lieu de rechercher le signe € qui n'était pas "vu" de VBA)

1) il subsiste des cellules contenant les mots "x jours restants" avec x qui varie.
Je suis arrivé à vider les lignes contenant un libellé invariable comme ceci:
'remplacement du mot "moins d’un jour restant" par [vide]
Selection.Replace What:="moins d’un jour restant", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False


Mais comment faire s'il y a un nombre qui varie ?

2) la macro balaye toute la colonne comme ceci:
LigV = 1
DerLigV = ShVert.[A100000].End(xlUp).Row
For i = 1 To DerLigV


saut qu'elle s'arrête à la ligne 1732 sans aucune raison, car rien de diffère à cet endroit là par rapport au reste.

Je ne comprends pas ...
merci pour votre aide
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

petit complément: si j'affiche la variable DerLigV, elle me donne 1732 (comme si la macro ne "voyait" pas la suite)
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020
>
Messages postés
12403
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020

j'ai dit:
"petit complément: si j'affiche la variable DerLigV, elle me donne 1732 (comme si la macro ne "voyait" pas la suite) "
en fait je pense que la réponse à votre question se trouve dans cette phrase puisque j'y évoque une suite, c'est donc bien qu'il y a des données après la ligne 1732.

Mais je pense avoir trouvé le "pourquoi":

Avant de balayer les lignes je fixe cette variable DerLigV en scrutant la colonne A. Elle subit ensuite des modifications en hauteur (rajout/suppressions de lignes) ce qui modifie la valeur du nombre de ligne, mais pas la valeur de DerLigV. Donc la macro s'arrête là où DerLigV lui dit de s'arrêter, pas là où il y a la nouvelle fin de liste.

Evidemment, si je pouvais fournir le fichier dans son entier, ce serait plus simple, mais il contient des données confidentielles (professionnelles) et les masquer prendrait un temps considérable. je ne peux qu'en faire un extrait et le joindre ici
https://mon-partage.fr/f/c3Z9r0is/

Il s'agit du fichier "brut de fonderie", avant les modifs proposées par les membres de CCM

A noter que les images ont déjà été supprimées, même si la macro est sensée le faire
Merci
Messages postés
12403
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695 >
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

merci de spécifier "basic" quand tu utilises les balises de code pour partager du VBA.

on est donc d'accord: au moment d'exécuter l'instruction
DerLigV = ShVert.[A100000].End(xlUp).Row

il n'y a pas de données après la ligne 1732.
et donc la macro a bien raison de s'y arrêter.

as-tu d'autres questions?
Messages postés
12403
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695 >
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

quand je lis "comme si la macro ne "voyait" pas la suite", j'interprete immédiatement que c'est toi qui croit voir une suite qui n'existe pas. la macro ayant toujours raison.
le but de ma question était, d'une part, de t'encourager à réfléchir, d'autre part, à essayer que tu nous donnes quelques informations utiles.

ta première réponse à ma question "la réponse à votre question se trouve dans cette phrase" prouve bien que tu étais enfermé dans un raisonnement incorrect. ensuite, ma question t'a permis de sortir de cet enfermement.
Messages postés
12403
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695 >
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

il n'est pas nécessaire de partager le fichier avec toutes les données, tu peux partager un fichier de test qui nous permette de reproduire ton soucis.

EDIT: et, bien sûr, en expliquant comment le reproduire.
Messages postés
12403
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 septembre 2020
695 >
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

quand tu fais une boucle, il est très utile de spécifier la variable de boucle dans le Next. cela aide a détecter des erreurs, et cela rend le code plus lisible.
For i = 1 To DerLigV
    ' ...
Next i


Il est souvent dangereux (source d'erreur et de confusion), la preuve dans ton cas, de modifier la variable de la boucle for dans la boucle.
Il est préférable d'utiliser alors un autre type de boucle: https://www.excel-pratique.com/fr/vba/boucles

EDIT: tu obtiendras un bien meilleur résultat en utilisant
While LigV < DerLigV
qui se trouve en commentaire dans ton code.
Messages postés
146
Date d'inscription
samedi 16 septembre 2006
Statut
Membre
Dernière intervention
29 septembre 2020

Bonjour,
Personne n'a d'idée à me proposer ?
Merci