Masquer les lignes suivant une valeur de cellule

Bonjour,

Je suis novice en VBA et j'en appelle à vous pour le créer cette fonction.

J'ai un tableau avec des lignes de coût et je souhaite cacher toutes celles qui ont une quantité 0 dans la colonne G.

Je vous laisse le fichier source.

Pourriez vous me créer la macro pour cette fonction.

Merci beaucoup. Cordialement

16classeur1.xlsx (15.31 Ko)

Bonjour,

Plutôt que de réinventer le roue, je vous propose :
- De réorganiser un peu la structure du fichier vers quelque chose de plus "conventionnel"
- Utiliser l'une des nombreuses fonctionnalités intégrées à Excel : le filtre

Ce qui donne :

12classeur1.xlsx (13.29 Ko)

Si l'utilisation de VBA vous tient particulièrement à cœur, vous trouverez une multitude de sujets correspond à votre besoin et déjà traités dans ce forum.

Le filtre ne se met pas à jour automatiquement.

Pour ce qui concerne la macro, n'ayant aucune notion, en lisant ce qui a été déjà élaboré sur les autres sujets, je ne sais pas quoi modifier.

Maintenant, si je dérange, je sors et demande ailleurs...

On peut donc utiliser VBA, soit pour actualiser le filtre, soit pour reproduire son effet (la plupart des sujets existants traite de ce cas de figure).

Je peux donc vous fournir une solution "clé en main", mais personnellement je suis réticent à le faire car si vous ne maitrisez pas un minimum son fonctionnement, vous ne serez pas autonomes pour le faire évoluer/dépanner, etc...

Je vous propose un code qui se déclenche automatiquement, lors de la modification du contenu de n'importe quelle cellule de la feuille. Ici, on traite toujours la même plage de cellules (lignes 12 à 27) :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Lig As Integer 'Variable de type entier

For Lig = 12 To 27 'Boucle sur les lignes
    If Range("G" & Lig) = 0 Then 'Si la quantité est =0
        Rows(Lig).Hidden = True 'Masquage ligne
    Else 'Sinon
        Rows(Lig).Hidden = False 'Affichage
    End If
Next Lig

End Sub

Le code est à placer dans le module VBA de la feuille concernée.

Merci.

Pour être autonome, il faut un minimum de savoir, ce que je n'ai pas.

Je pensais que le but de ce forum était de résoudre les problématiques des utilisateurs...

Merci.

Pour être autonome, il faut un minimum de savoir, ce que je n'ai pas.

Je pensais que le but de ce forum était de résoudre les problématiques des utilisateurs...

Ce n'est pas contradictoire, pour moi résoudre les problèmes des utilisateurs consiste principalement à les faires progresser pour construire ensemble la solution, plutôt que de la donner "bêtement" (et les revoir le lendemain pour le même sujet, ou un nouveau).

Donnes un poisson à un homme, tu le nourris une fois. Apprends lui à pêcher, et tu le nourris pour toujours.

Proverbe chinois.

Ce qui aurait été formateur, c'est que tu m'expliques littéralement ton programme que je comprennes ce que tu fais

Ce qui aurait été formateur, c'est que tu m'expliques littéralement ton programme que je comprennes ce que tu fais

Le code est déjà entièrement commenté, et j'ai mis un lien vers la page de cours du site !

Maintenant tu peux toujours revenir avec des questions ciblées...

Par contre, je ne retrouve pas la macro ! c'est le pb de Private sub mais quand je remplace par Sub, ça ne fonctionne pas non plus !

Par contre, je ne retrouve pas la macro ! c'est le pb de Private sub mais quand je remplace par Sub, ça ne fonctionne pas non plus !

Vous ne retrouvez pas le code dans le module de la feuille ? Il n'y a pas lieu de remplacer Private Sub par Sub. Je rappelle que le déclenchement de la macro est automatique (lors de la modification de n'importe quelle cellule de la feuille), et donc pas lié à son exécution manuelle par votre part ni via un bouton.

Ben alors ça ne marche pas...

les lignes avec 0 sont toujours affichées.

quelle est la différence avec ce genre de programme?

Sub MasquerLigne()

DebutLgn = 1

FinLgn = 14

Valeur = 2

For NbLgn = DebutLgn To FinLgn

If Cells(NbLgn, Valeur).Value < 14 Then

Cells(NbLgn, Valeur).EntireRow.Hidden = True

End If

Next NbLgn

End Sub

Celui-ci est placé dans un module standard, et déclenché manuellement ou lié à une autre macro qui gère son exécution.

Par contre le contenu de ce code ne correspond pas tout à fait à votre demande initial, on est bien d'accord ?

A noter aussi qu'il existe d'autres évènements qui déclenche des macros, que celui que j'ai utilisé ici (_change). Vous avez plus d'infos en suivant le lien que j'ai fourni dans mon 1er post.

Je suis perdu

Je ne sais pas lequel correspond à ma demande. Je voulais juste masquer les lignes qui étaient inutiles car avec une quantité 1 pour que l'on puisse visualiser que les lignes avec des quantités non nulles...

Dans l'idéal, sur un onglet maitre j'aurai toutes les lignes et j'indiquerai manuellement la quantité par ligne de produit.

Cela pourrait générer le même tableau sur l'onglet esclave mais en supprimant (et non masquant) les lignes à qté 0.

Bien entendu, si je modifie le maitre l'esclave se met à jour.

Mais là, c'est loin très loin de mes compétences !!!

J'en reviens à ma suggestion de départ... Un filtre, copié-collé des lignes filtrées dans ton onglet "esclave", et basta le tour est joué en 2 clics ! Vous savez faire, pas de risque de s'emmêler les pinceaux ou se retrouver avec une solution inefficace suite à l'évolution du fichier.

Sinon ça reste réalisable via VBA, mais dans ce cas j'opterais plutôt pour une macro "classique", liée à un bouton.

En fait, je souhaite créer une trame utilisable à chaque chiffrage.

Pour un chiffrage fait sur l'onglet maitre, je mets les quantités des produits nécessaires. L'onglet esclave copie le fichier maitre en supprimant tout ce qui est nulle.

J'en déduis que la première solution ne vous convient pas, et que vous attendez du tout cuit...

Un essai à adapter (au niveau des noms de feuille notamment, et indice de ligne de début et fin) :

Sub CréerTableauEpuré()

Dim Lig As Integer

With Sheets("Esclave") 'Tout ce qui commence par un "." se réfère à cette feuille
    Sheets("Maitre").Cells.Copy .Range("A1") 'Copie de l'onglet maitre
    For Lig = 27 To 12 Step -1 'Boucle sur les lignes, en partant de la dernière
        If .Range("G" & Lig) = 0 Then .Rows(Lig).Delete 'Suppression ligne si qte nulle
    Next Lig
End With

End Sub

A mettre dans un module standard, puis à associer à un bouton pour exécuter le code depuis la feuille maitre.

merci et dsl pour le tout cuit mais ça ne s'improvise pas.

J'essaie ça demain.

Bonjour,

En fait ce sujet m'interresse fortement, mais je ne sais pas si peux intervenir en tant que demandeur.

Dans le module de Pedro22, je ne comprend pourquoi il est fait référence à un onglet maitre et esclave.

Ne peut on pas avoir un code VBA déclenché manuellement et qui n'interviendrait que sur un onglet ...

Merci

ça marche.

Mais comment limiter la copie d'une partie du tableau seulement plutôt que la feuille?

Il y a certaines colonnes que je ne voudrais pas copier vers "Esclave".

Merci

Rechercher des sujets similaires à "masquer lignes suivant valeur"