Commande d'effacer les lignes dont 1 colonne est vide

Bonjour,

comment dire à Excel que si dans ma colonne A, il y a des cellules vides, j’efface la ligne correspondante sur les colonnes B, D, E (sauf la colonne C qui contient une formule) ?

merci

Un exemple
i = 2
Do while i < Range (« A65536 »).end (xlup).Row+1
If Range (« A » & i) = «  » Then
Range (« B » & i).Clear
Range (« D » & i, « E » & i).Clear
End If
i = i + 1
Loop

Çà devrait le faire

Attention ressaisir les guillemets au clavier accolés aux données

« » Then
Guillemets à ressaisir sans espace entre

peut contenir jusqu’à combien d’argument car faut que j’aille jusqu’à la colonne P

L instruction Range permet de cibler une plage continue de cellules que détermine la première adresse et la deuxième adresse
Exemple de la colonne À à la colonne D donc A,B,C,D pour la ligne 1 j écrit :

Range (« A1 »,« D1 »)

Je peux Inclure 2 lignes :

Range (« A1 »,« D2 »)

Cela concerne toutes les cellule de la ligne 1 et 2 de la colonne À à D

Toutes les cellules ciblées entre ces 2 adresses séparées par la virgule sont contiguës de la première adresse à la deuxième incluses

J ai oublié le nombre d argument est de 2 maximum séparé par une , ou :
Maintenant on peut mettre plusieurs couples comme ceci :

Range (« A1 »,« D1 » « C2 »,« F2 »)

Les couples désignent toutes les cellules de la première adresse à la deuxième

donc j’ai compris que si je veux effacer toutes les lignes des colonnes A à P sauf la colonne C si dans la colonne A est vide :

i = 2
Do While i < Range(« A65536 »).End(xlUp).Row + 1
If Range(« A » & i) = " " Then
Range(" B " & i).Clear
Range(" D " & i, " P " & i).Clear

sauf qu’il arrête d’effacer à la colonne F inclue

End If
i = i + 1
Loop

Chez moi cela marche nickel :

seule la colonne C n’est pas vidée de sa donnée (3)

Envoie moi ton fichier avec le code à l’ntérieur

Voilà mon fichier test extrait de mon projet
TEST CARNET.xlsm (21,6 Ko)

Ton code récupéré n’a pas respecté mes consignes :

Ma consigne :

Attention ressaisir les guillemets au clavier accolés aux données

Les guillemets sont bien retapés correct mais éloignés de la donnée et non accolés

Cela ne peut pas le faire !!!

Ma consigne :

« » Then
Guillemets à ressaisir sans espace entre

Les guillemets sont bien retapées correct mais doubles espaces entre

Cela ne peut pas le faire !!!

Après avoir fais respecté à ton code mes consignes bizarrement cela fonctionne

Juste à voir l’instruction qui nettoie :

Range(" D " & i, " P " & i).Clear

L’instruction Clear enlève tout y compris la mise en forme des cellules donc le quadrillage

Pour n’enlever que la valeur et garder la mise en forme comme le quadrillage il faut remplacer l’instruction Clear par ClearContents

A toi de faire

Donnes moi des nouvelles

pfffffffffff les guillemets, les espaces …au bout d’un moment ça va rentrer

image

Oui ce n est pas facile
C est lié à une mauvaise restitution en copier/coller de ces messages avec lesquels on échange
Dans le copier tout est correct
En coller beaucoup d anomalies guillemets espace etc…
Il faut veiller
C est maintenant tout bon ?

malheureusement non j’ai la ligne jaune , voir post précédent

Ton dernier fichier transmis corrigé et adapté à cette nouvelle instruction
Il fonctionne parfaitement (Macro2)
Testes le et regardes le script

TEST CARNET.xlsm (20,4 Ko)

Marche pas dans mon projet

ci-joint mon projet le but si on clique sur la macro est de reprendre les données en valeur de l’onglet liste fin exo dans l’onglet liste début exo sauf la colone C
et ça doit faire référence qu’au tableau de A9 à P96
TEST CARNET 1.xlsm (102,8 Ko)

Ne vous occupez pas des dièse/ref , j’ai supprimé des pages

Ce code ne pourra jamais fonctionner en l’état :

Par exemple
Mon code avait cette ligne :

If Range(« A » & i) = «  » Then

L’équivalent ici est cette ligne :

If Range(« A9 » & i) = «  » Then

et notamment :

« A9 » & i

alors que ma ligne a :

« A » & i

d’où vien le chiffre 9 ???

Lorsque l’on met

Range(« A » & i)

le A est la colonne le i la ligne qui au fur et à mesure de la boucle évolue
Cela permet de traiter toutes les lignes
de la ligne 2 (i = 2)
à la dernière ligne (Do While i < Range(« A65536 »).End(xlUp).Row + 1)
Qui évolue à chaque tour de la boucle ici :

i = i + 1

Donc chaque instruction Range a sa colonne écrit en dur et sa ligne qui évolue avec la variable i
Surtout pas lui mettre en plus un chiffre comme :

Range(« A9 » & i)
Car la ligne au final au premier tour de boucle par exemple la cellule pris en considération est
i étant égale à 2
Range (« A92 »)
Idem ici :

Range(« B9 » & i).ClearContents
Range(« D9 » & i, « P9 » & i).ClearContents

Range(« B92 »).ClearContents
Range(« D92 », « P92 »).ClearContents

Non je ne sait pas d’où vient ce 9 mais il est de trop

Cela fait désordre

A supprimer donc partout où il se trouve dans mon code

Autre chose

Je détermine la dernière ligne à traiter ici :

Do While i < Range(« A65536 »).End(xlUp).Row + 1

Et plus particulièrement cette partie :

Range(« A65536 »).End(xlUp).Row + 1
L’instruction démarre à partir de la cellule A65536 qui est vide et remonte End(xlUp) jusqu’à la première non vide de cette colonne et en détermine la ligne .Row

Pour cela il est indispensable que la cellule de la dernière ligne colonne A soit remplie
Sinon la commande déterminera la ligne de la colonne dernière rempli qui ne sera pas celle de la dernière de l’ensemble des données
Si la colonne n’a pas de donnée dans la dernière ligne à traiter il faut choisir une autre colonne dont on sera certain qu’elle est sa cellule de la dernière ligne remplie
A toi de voir quelle colonne prendre à cette fin et de modifier cette partie en conséquence :

Do While i < Range(« A65536 »).End(xlUp).Row + 1

Si par exemple c’est la colonne B la plus adaptée à la condition tu mets ainsi :

Do While i < Range(« B65536 »).End(xlUp).Row + 1

Je démarre la boucle à la ligne 2 pour faire le nettoyage avec cette ligne :

i = 2

je vois que dans ton onglet à nettoyer « Liste ouverture exo » les données commencent à la ligne 9

Donc cette ligne de code doit être actualisée en conséquence ainsi :

i = 9

Pour faire démarrer le traitement de nettoyage à la ligne 9

Reste à savoir si c’est bien la bonne ligne à prendre en compte d’une manière générale car si tout remonte en ligne 2 dans tes prochains projets et que cette ligne de code reste à 9 les lignes de 2 à 8 ne seront pas traitées

Derniers souci

J’ai quand même réalisé avec ton fichier le traitement de nettoyage et effectivement j’ai eu un arrêt comme toi sur cette ligne de code :

Range(« D » & i, « P » & i).ClearContents

Et pour cause les colonnes P à S sont fusionnées
Cà peut pas le faire sur des cellules fusionnées
2 solutions :
Tu enlèves de la fusion la colonne P
Tu t’arrêtes à la colonne O pour le nettoyage comme ceci :

Range(« D » & i, « O » & i).ClearContents (O à la place du P)

Il n’y aura pas dans cette option choisie de nettoyage en colonne P

Pour mener à bien le traitement c’est cette manière que j’ai choisi et bingo cela marche

A toi de voir

J ai essayé sans le 9 en 1er et ca fonctionnait pas. J ai contaté que mes formules s effacaient depuis la ligne 1 donc j ai essayé avec le 9 par hasard et oublié de l enlever car ca ne fonctionnait pas non plus.

Je regarde ton post dans le detail demain

Merci

Envoyé depuis Yahoo Mail pour Android

Bonjour,
Un test
TEST CARNET.xlsm (105,9 Ko)

Avec ta proposition dans mon projet réel

Bonjour
Avec ta proposition avec i=9

avec i=2 j’ai le même résultat