Supression d'une ligne en fonction du contenu d'une colonne

Bonjour à tous !

Je suis ravie d'arriver parmis vous! Bonnes fêtes à tous pour commencer.

Je suis également nouvelle dans le monde du VBA.

Je suis en train de créer une macro me permettant d'automatiser le traitement de fichiers Excel afin d'être formatés de manière adéquate à un upload sous le logiciel SAP.

Composition de mon fichier: 7 colonnes et X lignes (nombre de lignes variable)

Colonne A: texte

Colonne B: numéro de client

Colonne C: code produit

Colonne D: prix

Colonne E: devise

Colonne F: date de début de vente

Colonne G: date de fin

Mon problème

Le fichier de base sur lequel je fais tourner ma macro comprend des produits n'ayant pas de prix. Je souhaite faire en sorte que ma macro supprime la ligne entière consacrée au produit si celui-ci n'a pas de prix.

En des termes plus spécifiques : pour chaque ligne de mon fichier, si la cellule de la colonne D est vide je souhaite supprimer la ligne entière.

Jusqu'ici j'ai pu créer ma macro en m'appuyant sur un code généré par enregistrement et en tâtonnant pour l'adapter à un cas variable, cependant pour cette histoire de suppression de ligne en cas de cellule vide je suis vraiment bloquée.

J'imagine qu'il faut faire intervenir une fonction IF mais je reste très perdue.

Quelqu'un pourrait-il partager ses lumières ?

Merci d'avance !!

Bon après-midi!

Bonjour et bienvenu sur le forum,

On conseille toujours d'apporter le support afin de mieux cerner le problème. Même fait avec l'enregistreur le code nous intéresse ainsi que le fichier exporté de SAP. A toi.

Sinon, voici une méthode conseillée :

1) Ouverture du fichier exporté

2) Calculer le nombre de lignes du fichier importé dans une variable

3) Faire un boucle à l'envers (de la dernière ligne - variable précédent - jusqu'à la première ligne) en testant les valeurs de la colonne D. Ceci pour éviter les soucis de suppression des lignes.

Bonjour Raja, Quisemar, le forum

Vois du côté de la méthode SpecialCells.

Sub supprime()
    On Error Resume Next
    With Columns("d")
        .SpecialCells(4).EntireRow.Delete
    End With
    On Error GoTo 0
End Sub

klin89

Bonjour à vous deux, et au forum.

Mes excuses pour ne pas avoir fourni mon fichier immédiatement, il contient des noms de client donc je n'ai pas osé.

Je vous joins donc ici un tout petit extrait non nomiatif afin que vous puissiez vous rendre compte de la structure.

Pour le code relatif à mon problème de suppression de ligne je ne puis vous en fournir, même avec l'enregistreur car je ne sais pas comment formaliser sous forme de code la condition de suppression Si D=null.

Je me penche dès à présent sur la suggestion de Klin89 de la méthode des SpecialCells, la méthode de Raja me semble encore hors de portée de mes compétences de débutante!

Merci à vous pour les pistes, je reste à l'écoute et vous tiens au courant de l'avancée du problème.

17example.xlsx (9.29 Ko)

Re,

As-tu testé le code de Klin89 ? Ça marche parfaitement pour ton cas.

Oui il marche à merveille. Merci beaucoup!

J'en profite pour étendre ma question à un cas qui pourrait potentiellement arriver avec un futur fichier. Je préfère me pencher directement sur la question et prévoir toutes les situation dans mon code dès le début.

Parfois ma colonne D (=ma colonne de prix) n'est pas vide mais contient du texte, ce texte arrive à cause du formatage imposé par SAP et ne signifie strictement rien. J'aimerai donc lui appliquer la même logique de suppression de la ligne entière que précédemment.

Le problème est que ce texte n'est pas toujours exactement le même, il est de la forme "Billing PriceEUR", ""Billing PriceGBP" etc suivant la devise.

En suivant la logique de Klin89 d'utiliser la méthode des SpecialCells, j'aurai pensé utiliser la fonction xlCellTypeComments. Mais sous quelle forme puis-je prendre en compte les différentes occurences possibles de mon texte ? Est-il possible d'énumérer dans le code les différentes chaînes de caractères qu'il sera possible de rencontrer dans la colonne D et qu'il faudra supprimer ?

Si oui comment ?

On Error Resume Next

With Columns("d")

.SpecialCells(xlCellTypeComments).EntireRow.Delete

End With

On Error GoTo 0

Ou alors faut-il que j'adapte le code de Klin89 pour chaque occurence de texte possible, c-à-d pour "Billing PriceEUR" puis un autre bout de code pour "Billing PriceGBP" puis ainsi de suite pour chaque devise ?

J'espère que je suis claire :/

Merci MILLE FOIS !

Re,

Non tu ne peux pas avec le même code. Donne-nous les textes possibles exhaustivement dans le colonne D la condition pour supprimer la ligne en dehors de vide.

Bonjour,

Une proposition à tester.

Cdlt.

Public Sub DEMO()
' Declaration des variables
Dim ws As Worksheet
Dim lRows As Long
Dim rng As Range
    ' Optimisation code (affichage gelé)
    Application.ScreenUpdating = False
    ' Initialisation variable feuille
    Set ws = ActiveSheet
    ' Nombre de lignes donnees
    lRows = ws.Cells(Rows.Count, 1).End(xlUp).Row
    ' Initialisation plage de donnees à traiter
    Set rng = ws.Range("D2:D" & lRows)
    ' Avec la plage de donnees à traiter
    With rng
        ' On traite les cellules vides
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        ' On traite les constantes texte (valeurs non numériques)
        .SpecialCells(xlCellTypeConstants, xlTextValues).EntireRow.Delete
    End With
    ' RAZ variables objets
    Set rng = Nothing: Set ws = Nothing
End Sub

D'accord, merci.

[u]Toutes les occurences possibles du texte en colonne D:

[/u]

Billing PriceEUR

Billing PriceGBP

Billing PriceUSD

Billing PriceCAD

Billing PriceAUD

Si ces chaïnes de caractères sont présentes dans ma colonne D, je souhaite supprimer la ligne entière.

MERCI Raja, Klin89 et Jean-Eric pour votre aide aussi prompt qu'efficace!

Je commence à mieux comprendre la logique VBA et ma macro vient de s'enrichir d'une nouvelle fonctionnalité très appréciable pour mes jeux de données assez massifs!

Joyeuses fêtes et à bientôt sur le forum

Rechercher des sujets similaires à "supression ligne fonction contenu colonne"