Si "E,K ou P" dans une cellule, supprimer la ligne

Bonjour tout le monde !

Je débute en VBA, j'ai vu pas mal d'exemples pour ma problématique mais je n'arrive pas à les appliquer.

En colonne "C" j'ai mes numéros de commandes sous ce format "C#######-####", j'ai certaines commandes sous ce format "E#######-####", "K#######-####" et "P#######-####". J'aimerais avoir une macro qui me supprime les lignes correspondantes à ces numéros de commandes (E,K et P) pour garder uniquement les C.

Ce serait pour l'ajouter à une suite de manipulations déjà établies sinon je ferais "trier>supprimer"

Si quelqu'un peut m'aider je lui serais vraiment reconnaissant

Merci d'avance

Bonjour Tipsy,

Il y a beaucoup de solutions possible pour répondre à cette demande, selon les personnes et les connaissance

Quelques question déjà:

Si l'on tri tes numéros de commande cela te gène? au pire tu peux refaire un tri par date par la suite (j'imagine que tu as une colonne de date)

Combien de ligne as tu dans ton fichier?

Des indices pour faire cela:

1. Soit on veut faire ça bien et on passe par des tableaux: on prend dans un tableau toute ta sheet, on fait le tri en regardant si on commence par un "C" dans ta colonne 3 (if left(cellule(X,X).value,1)= "C" then), on delete toute les info de ta feuille et on copie le nouveau tableau trié

1.1 On veut faire ça bien et être malin pour gagner du temps et le tri ne te dérange pas, on fait déjà un tri croissant sur la colonne C donc toutes les infos que tu ne veux pas sont en fin, pour boucler sur le tableau il y a beaucoup moins d'itération que la première solution.

2. Soit on est barbare et en quelques lignes de codes c'est fini et surtout tu as peu de ligne dans ton fichier ou alors ça va prendre du temps: on boucle par macro sur ta colonne C, si le premier caractère n'est pas un C on fait un row.delete

2.1 On est barbare mais un peu malin, on fait la même boucle mais on stock dans un range les lignes à supprimer et on le fait en un coup une fois toute les lignes finies car supprimer 1 ligne par 1 c'est long !

2.2 On est barbare, un peu malin mais pas pressé: on fait d'abord un tri croissant, on boucle pour trouver la première référence pas en "C" et on supprime ligne par ligne

2.3 On est barbare, un peu malin et pressé quand même: on fait d'abord un tri croissant, on boucle, on met dans un range les références pas en "C", on delete tout à la fin

2.4 Bon ça commence à en faire des idées, on est barbare mais dans le top 3 des moins bêtes : on fait un tri croissant, on boucle pour trouver la première référence pas en "C" et... on ne fait pas delete de ligne car ca prend un temps fou ... mais on supprime simplement le contenu en passant par un range

ECG

Bonjour Tipsy,

Comme tu n'as pas joint de fichier, je te propose ce code VBA barbare (selon les termes d'ExcelCoreGame) :

Option Explicit

Sub Essai()
  ' N° Commande : en colonne C
   ' ligne 1 : en-têtes ; données à partir de la ligne 2
   Application.ScreenUpdating = 0: Application.Calculation = -4135
  Dim dlig&, lig&: dlig = Cells(Rows.Count, 3).End(xlUp).Row
  For lig = dlig To 2 Step -1
    If Left$(Cells(lig, 3), 1) <> "C" Then Rows(lig).Delete
  Next lig
  Application.Calculation = -4105
End Sub

ECG a raison quand il dit que c'est une méthode lente, mais ça peut convenir si tu n'as pas trop de lignes.

Cordialement

Bonjour les gars !

Merci ECG, ton message m'a fait sourire et me creuser la tête un petit peu.

Et merci dhany pour le code, je vais essayer avec ça avant d'optimiser tout ça avec vous

Je vous met le fichier en PJ mais dans l'idée j'aimerais que ça se fasse le plus rapidement possible car j'aimerais rajouter certaines automatisations. Je ne sais pas comment je vais faire encore mais j'essaierai de trouver avant de venir vous embêter.

J'extrais ces tableaux d'environ +25XX lignes tous les mois. J'aimerais créer une macro qui :

  • Supprime les colonnes dont j'ai pas besoin,
  • Supprime les commandes E,K,P,
  • Supprime les doublons de ligne,
  • M'affiche les temps en minutes (00:00),
  • La colonne date n'affiche que la date et plus l'heure à côté,
  • Créer un TCD qui me sert sur un plateau :
- Première colonne : catégorie de camion (Nrb : 6), deuxième colonne : immat (Nbr : 30aine) par catégorie de camion, colonnes suivantes :

- La consommation mensuel par camion (ça je le traiterai en dernier car j'ai pas toutes les infos)

- les kilomètres journaliers/camion (moyenne)

- le nombres de déchargements journaliers/camion (moyenne)

- le temps de déchargements journaliers/camion (moyenne)

- surement deux ou trois autres trucs

A terme, quand je sortirais mon extraction en début de mois, j'aurais juste à lancer ma macro pour avoir toutes mes infos. J'ai compris les bases de VBA mais j'ai pas encore l'esprit assez élastique alors je m'entraine sur autre chose.

Si vous avez le temps de m'aider à avancer sur mon projet je vous en remercie mais j'aimerais chercher un peu tout seul

Donc pour l'instant, traiter mes lignes de commande E,K,P ça m'aiderai pas mal et pour le reste, si je galère, je vous mettrais le code que j'essaye pour qu'on puisse avancer.

Je vous remercie énormément pour votre attention, ça fait plaisir de voir qu'on peut s'entraider comme ça

Tipsy

Bonjour à tous !

Pour diversifier le test (avec Like), greffé sur le modèle de Dhany

    If Cells(lig, 3) Like "[EKP]*" Then '=>on supprime

Au vu du nombre de manipulations à suivre, on peut aussi se demander s'il ne convient pas d'opter pour reconstituer un tableau par prélèvement de ce qu'on garde : à la fin on supprime l'existant et on réaffecte le tableau recomposé.

Cordialement.

Re Bonjour !

Merci MFerrand,! J'ai ajouté votre diversification. Je suis pas contre votre idée, malheureusement je n'ai aucune idée de la mise en pratique. Je verrais ça de mon côté

Sub Projet_Automatisation_Step2()
' Step 2 : Surppression des lignes de commandes E,K,P
  Application.ScreenUpdating = 0: Application.Calculation = -4135
  Dim dlig&, lig&: dlig = Cells(Rows.Count, 3).End(xlUp).Row
  For lig = dlig To 2 Step -1
    If Cells(lig, 3) Like "[EKP]*" Then Rows(lig).Delete
  Next lig
  Application.Calculation = -4105
 End Sub

Ceci fonctionne très bien

Sub Projet_Automatisation_Step1()
' Step 1 : Suppression des colonnes inutiles
    Range("C:C,E:E,G:G,H:H,J:J,L:L,N:N,O:O").Delete
End Sub
 

Ceci également

Comment faire un 2 en 1 ?

Merci pour votre disponibilité

Bonjour Tipsy,

Tu a écrit :

Comment faire un 2 en 1 ?

Je te propose ce code VBA (à adapter au besoin selon l'avertissement situé en dessous) :

Sub Projet_Automatisation_Steps1et2()
  Application.ScreenUpdating = 0: Application.Calculation = -4135
  ' Step 1 : Surppression des lignes de commandes E,K,P
   Dim dlig&, lig&: dlig = Cells(Rows.Count, 3).End(xlUp).Row
  For lig = dlig To 2 Step -1
    If Cells(lig, 3) Like "[EKP]*" Then Rows(lig).Delete
  Next lig
  ' Step 2 : Suppression des colonnes inutiles
   Range("C:C,E:E,G:G,H:H,J:J,L:L,N:N,O:O").Delete
  Application.Calculation = -4105
End Sub

⚠ Note bien qu'avec ce code qui supprime la colonne C, tu supprimes les N° de commande qui ont servi pour

supprimer les lignes des commandes E, K, P ; je ne suis pas sûr que ce soit ce que tu veux, alors vérifie bien !


Ça pourrait être plutôt celui-ci, si les N° de commande sont en colonne D AVANT suppression des colonnes :

Sub Projet_Automatisation_Steps1et2()
  Application.ScreenUpdating = 0: Application.Calculation = -4135
  ' Step 1 : Suppression des colonnes inutiles
   Range("C:C,E:E,G:G,H:H,J:J,L:L,N:N,O:O").Delete
  ' Step 2 : Surppression des lignes de commandes E,K,P
   Dim dlig&, lig&: dlig = Cells(Rows.Count, 3).End(xlUp).Row
  For lig = dlig To 2 Step -1
    If Cells(lig, 3) Like "[EKP]*" Then Rows(lig).Delete
  Next lig
  Application.Calculation = -4105
End Sub

Et si les N° de commande sont en colonne C AVANT suppression des colonnes :

Sub Projet_Automatisation_Steps1et2()
  Application.ScreenUpdating = 0: Application.Calculation = -4135
  ' Step 1 : Suppression des colonnes inutiles
   Range("C:C,E:E,G:G,H:H,J:J,L:L,N:N,O:O").Delete
  ' Step 2 : Surppression des lignes de commandes E,K,P
   Dim dlig&, lig&: dlig = Cells(Rows.Count, 2).End(xlUp).Row
  For lig = dlig To 2 Step -1
    If Cells(lig, 2) Like "[EKP]*" Then Rows(lig).Delete
  Next lig
  Application.Calculation = -4105
End Sub

(car alors, les N° de commande de la colonne C passent en colonne B)

Cordialement

Pardonnez-moi, je suis un vrai demeuré. J'avais la réponse depuis le début de matinée, c'est juste que je l'avais pas tapé dans un module.. Je vous ai dis que je commençais !

Merci beaucoup pour votre aide ! Vous êtes des génies !

Je continue mon petit projet et je reviens vers vous quand je bloquerai sur quelque chose au point de péter mon écran !

Cordialement !

Rechercher des sujets similaires à "supprimer ligne"