Suppression lignes et colonnes si condition

Bonjour tout le monde,

Je viens ici car, étant novice avec l'utilisation d'excel, je n'arrive pas à répondre à mon problème.

Le voici:

Dans un tableau (fichier plus bas), je référence des articles (colonne) et le délai d'expédition de ces articles (ligne).

Les nombres figurant dans le tableau sont les quantités expédiées à ce jour.

J'aimerais supprimer automatiquement (sûrement en passant par VBA...):

  • un article (donc sa ligne) si il n'y a aucune expédition (ARTICLE C en exemple)
  • un délai (donc sa colonne) si aucune quantité n'est à noter ce jour (JOUR 3 en exemple)

Pour faciliter (je pense) le problème, j'ai créer un "code":

Si la somme de la ligne ou colonne > 0, (donc si à garder) alors "1"

Si la somme de la ligne ou colonne = 0, (donc à supprimer) alors "0"

Il me faudrait alors une macro:

Si sur la plage des codes j'ai un 0, il faut supprimer la ligne ou la colonne qui lui correspond.

Un grand merci à celui qui pourra m'aider.

Cordialement,

Jon

PS: L'optimal serait d'éviter de passer par ce "code" !

Bonjour, je doute que le fichier original ressemble à celui-ci. Si on vous écrit une macro, vous saurez l'adapter dans se dernier ?

Bonjour,

Vous doutez bien

Mon fichier original contient une centaine d'articles, et environ une cinquantaine de jours.

Mais je voudrais être capable de l'adapter par moi-même pour pouvoir le réutiliser au besoin.

En effet, ces "tableaux" sont extraits d'un logiciel et définis sur une période. Je souhaite avoir une macro pour effectuer cette suppression peu importe ma période choisie.

Pour cela, j'ai créer un "template" avec tous les articles et tous les délais possibles de façon exhaustive, d'où ma volonté de suppression derrière.

Cordialement,

Jon

Bonjour cela peut se faire comme ceci:

Sub test()
'De la dernière ligne non vide à ligne 2 en comptant à l'envers
For i = Feuil1.Range("a" & Rows.Count).End(xlUp).Row To 2 Step -1
'si sur ma plage Ai:ei j'ai 4 cellules vides (i c'est pas un i, c'est une valeur)
If Application.WorksheetFunction.CountBlank(Range("a" & i & ":e" & i)) = 4 Then
'alors j'efface toute la ligne
Rows(i).Delete
'fin de ma condition
End If
'je passe à la valeur suivante. Dans un cas de suppression de ligne, on commence toujours par la fin et on affecte un pas de -1 pour dire à excel décalle toi vers le haut (si on voulait qu'excel aille vers le bas on aurait mis step 1
Next
End Sub

Voilà, bienvenue dans l'univers des macros et de la torture neuronale...

Ah oui, c'est quelque chose... j'en étais tellement loin...

Merci en premier lieu, ça a l'air de bien marcher.

Je vais tenter de bien comprendre tout ça et l'appliquer aux colonnes

Quelques questions:

La même logique est-elle applicable pour les colonnes (en remplaçant par Columns) ?

Le A est bien l'intitulé de l'article ? Que puis-je faire si les articles viennent à changer ?

Est-ce que passer par le système de "code" serait plus simple ?

Cordialement,

Jon

En quelque sorte oui

Feuil1.Range("a1").End(xlToRight).Column

Après la macro n'est pas figée d'un point de vu structure, selon l'agencement du fichier on change la forme tout en obtenant le même résultat, cela revient à ce que nous faisons au quotidien, on prend des chemins différent pour aller bosser selon le trafic, les humeurs...

Ok, j'ai réussi à adapter la formule pour supprimer les lignes à mon vrai fichier, mais je bloque complètement sur l'adaptation aux colonnes...

Quelqu'un pourrait-il m'aider svp ?

Merci

Cordialement,

Jon

Joignez votre fichier cela ira plus vite

Re-bonjour,

Voilà, j'ai joint le fichier avec des articles fictifs, mais le reste des données est réel. (colonne C à AS pour les quantités)

J'ai supprimé des quantités dans les lignes exprès, pour que vous puissiez vérifier que ça marche.

Je vous remercie pour le temps accordé...

Cordialement,

Jon

EDIT: j'ai oublié d'en supprimer au niveau des colonnes pour la vérif..

Sub test()
    Dim i%
    For i = Feuil1.Range("a" & Rows.Count).End(xlUp).Row To 2 Step -1
        If Application.WorksheetFunction.CountBlank(Range(Cells(i, 2), Cells(i, 45))) = 43 Then
            Feuil1.Rows(i).Delete
        End If
    Next
End Sub

A tester

En réalité, j'ai déjà pu utiliser votre formule précédente et je l'ai adapter ce qui donne

Sub test()

For i = ActiveSheet.Range("a" & Rows.Count).End(xlUp).Row To 2 Step -1

If Application.WorksheetFunction.CountBlank(Range("a" & i & ":AS" & i)) = 43 Then

Rows(i).Delete

End If

Next
End Sub

Cela marche, j'ai déjà pu supprimer les lignes qu'il ne me faut pas.

Il me reste seulement à supprimer les colonnes qui ne me servent à rien, donc les colonnes dont les quantités sont vides de haut en bas, et c'est cela que je souhaite automatiser !

Cordialement,

Jon

Up

down

Rechercher des sujets similaires à "suppression lignes colonnes condition"