Nettoyage de cellules dans une seule colonne

Bonjour à tous,

J'ai un tableur avec plusieurs pages qui ont pour le but de nettoyer et de sortir certaines données provenant d'une extraction de plusieurs PDF (environ 16.000)

J'obtiens donc des données texte que j'ai dans plusieurs colonnes (ici nous nous intéresserons qu'à la colonne 1)

J'aimerais faire en sorte que je puisse nettoyer les cellules qui ne correspondent pas à mes conditions. J'ai réussi sur 100,1000,10000 lignes. Mais au-delà, plus rien ne fonctionne...

J'ai essayé plusieurs alternatives, mais rien n'y fait. Pourriez-vous me dire que qui n'est pas bon ?

Public Sub SupLigne()

 Dim r As Object

 Dim zone As Range

 Set zone = Range("A1:A1000000")

 For Each r In zone

If Left(r, 1) = Chr(32) Then r.ClearContents

 ElseIf Len(r) <= 15 Then r.ClearContents

 End If Next r

 End Sub

Il me semble que ce sont mes variables qui ont un souci, mais je n'arrive pas à trouver.

À vous lire !

Bonjour

Cette procédure ne supprime aucune ligne, elle supprime seulement le contenu de la cellule.

Il me semble que 0 c'est inférieur à 15 donc If Len(r) = 0 est redondant avec ElseIf Len(r) <= 15

Pourquoi ne pas utiliser un "ou" dans la condition : If Len(r) <= 15 or Left(r, 1) = Chr(32) then

Pourquoi ne pas passer par un tableau en mémoire ça serait beaucoup plus rapide?

Bonjour Yal_excel,

En effet, je n'avais pas fait attention à cela ! J'avais ajouté les conditions les unes après les autres sans voir que celle-ci faisait doublon. Je l'ai retiré, merci !

Effectivement, je ne supprime rien, je souhaite uniquement les vider de leur contenu s'il ne correspond pas à mes conditions.

Les conditions ici ne posent pas de problème, cela fonctionne comme je le souhaite, mais la macro s'arrête aux environs de la ligne 392.000 et cela me met "Erreur de type"

Une idée d'où cela peut provenir ?

Cordialement,

Sans même savoir sur quelle ligne le code s'arrête difficile de déterminer quoique ce soit.

aux environs de la ligne 392.000

C'est à dire que sur les mêmes données l'arrêt ne se produit pas toujours au même moment?

aux environs?

C'est toujours les mêmes données sur lesquels je fais les essais. J'ai ajouté deux colonnes qui me donnent la quantité de caractères & le code ASCII.

Lorsque la macro a fait son travail sur les cellules replissant les conditions cela me met un #VALEUR (ce qui est normal vu que je vide la cellule).

Et au bout d'un certain nombre de ligne qui n'est pas toujours identique mais toujours aux environs de 390.000/400.000lignes cela s'arrête et j'ai un message "Erreur de type"

Alors que tout fonctionnait bien jusque la.

Sans même savoir sur quelle ligne le code s'arrête difficile de déterminer quoique ce soit.

La question n'était peut être pas assez claire. Je demandais sur quelle ligne du programme celle surlignée en jaune.

Ah effectivement je n'avais pas compris !

Lors de message cela me surligne la ligne :

Set zone = Range ("A1:A1000000")

Essayez avec cette légère modification de votre macro. Plutôt que de créer un range d'un million de ligne cela crée le range utile seulement.

Public Sub SupLigne()

 Dim r As Object

 Dim zone As Range
Dim derniereLigne as Long
derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
 Set zone = Range("A1:A" & derniereLigne)

 For Each r In zone

If Left(r, 1) = Chr(32) Then r.ClearContents

 ElseIf Len(r) <= 15 Then r.ClearContents

 End If Next r

 End Sub

J'ai essayer avec votre code (je vous en remercie par ailleurs). Mais le problème reste le même...

L'écran gèle quelques secondes, puis ce message apparait et rien n'a été modifié. C'est tout de même étrange que cela fonctionne sur de petites plages mais pas des plus étendues.

erreurvba

Il y a une incohérence quelque part

Les conditions ici ne posent pas de problème, cela fonctionne comme je le souhaite, mais la macro s'arrête aux environs de la ligne 392.000 et cela me met "Erreur de type"

donc le traitement commence et s'arrête à un moment donné.

Lors de message cela me surligne la ligne :

Set zone = Range ("A1:A1000000")

et là ça ne rentre même pas dans la boucle donc aucun traitement n'est fait

Par ailleurs comment sont importés les pdf?

Effectivement =') C'est bien cela que je ne comprends pas... Je m'étais demandé si cela avait quelque chose à voir avec les "Range" et "Long" ou si c'étais une erreur de syntaxe, mais je ne trouve rien...

Les documents pdf sont dans un dossier, sur lequel je lance un batch qui copie tout le contenu et le colle dans un fichier.txt

Et c'est justement la raison de tout mon tableau de nettoyage : Il y a énormément de lignes et de mises en forme particulière sur ces PDF (ce sont pour la majorité des certificats de validité ou des devis). Ce qui me donne en résultat ce genre de données :

brouillonvbaextraction

J'aurais bien aimé faire autrement, mais c'est la seule possibilité que j'aie au vu de la quantité de fichiers.

J'ai donc fait toutes mes formules sur Excel => Aucun soucis MAIS extrêmement lent. (Rien que l'ouverture prend plusieurs minutes, de même pour changer un filtre)

J'ai ainsi décidé de nettoyer un maximum les données avant de les importer sur mon tableur de travail final.

Par énervement (oui cela fait plusieurs heures que je suis dessus) J'ai cliqué plusieurs fois sur "lecture" pour lancer la macro sur une plage réduite. Et la... Le traitement à fonctionner sur plus de cellules qu'auparavant. D'ou cela peut il venir ??

D'ou cela peut il venir ??

Pas la moindre idée mais il me semble que tu devrais plutôt revoir la méthode de conversion. Je ne suis pas certain que même si tu viens à bout de cette macro le reste sera utilisable.

Sinon si ça marche sur un nombre de lignes restreint pourquoi vouloir le faire sur un aussi gros fichier? Puisqu'au départ ce sont des fichiers indépendants autant les traiter l'un après l'autre.

Rechercher des sujets similaires à "nettoyage seule colonne"