Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Masquer plusieurs lignes en présence du caractère *

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Terrence0

XLDnaute Nouveau
Bonjour à tous

C'est la première fois que je touche à du VBA, donc je ne maîtrise pas encore le format du langage, mais je veux apprendre à l'utiliser correctement.
Je vous explique ce que je veux faire.

J'ai un tableau excel de fournisseurs que je dois payer, certains par chèque, d'autres par virement. Ceux que je dois payer par virement ont un astérisque dans leur nom.
Cependant le fichier excel exporté d'un logiciel de compta me sort tous les fournisseurs que je dois payer dans l'ordre alphabétique, alors je voudrais faire un tri de ces fournisseurs selon ce critère.


Voici un exemple de la colonne en question.

Fournisseur 1*

Total Fournisseur 1*

Fournisseur 2

Total Fournisseur 2

Fournisseur 3*

Total Fournisseur 3*


Le but de l'opération est de pouvoir masquer toutes les lignes se situant entre "Fournisseur 1*" et "Total Fournisseur 1*" inclus, et inversement.



J’ai pensé à l’algorithme ci-dessous (emprunté à du turbo pascal) mais à chaque fois que j’ai essayé de le «traduire», j’ai échoué ne maitrisant pas la syntaxe du VBA. J'ai vu que pour le test, je pouvais utiliser la fonction instr, mais les paramètres devaient être incorrectes. Donc si vous vouliez bien m’aider, ce serait très sympa. Merci.


i correspond à une ligne quelconque et initialisé à 1. B est la colonne avec le nom des fournisseurs.

While i < 100000 Do

If TestPrésenceAstérisque (« B & i») = 1

Then
ligne1 := i
ligne2 :=ligne1+1
While TestPrésenceAstérisque («B & ligne2») = 0 Do ligne2 := ligne2 + 1
For j := ligne1 to j := ligne2 Do CacherLaLigne(j)
i := b+1

Else i :=i+1


Bonne soirée
 
Re : Masquer plusieurs lignes en présence du caractère *

Bonjour Terrence0,

Une proposition qui devrait fonctionner (fait en vitesse et non testée)

Code:
Sub CacheLigne()
    Dim c As Range, rg As Range

    Application.ScreenUpdating = False
    For Each c In [B1:B1000]        'Ajuster la plage ici
        If InStr(1, c.Text, "*") > 0 Then c.EntireRow.Hidden = True
    Next c
    Application.ScreenUpdating = False

End Sub

A+
 
Re : Masquer plusieurs lignes en présence du caractère *

Bonsoir à tous 🙂

Un peu tard mais puisque c'est fait je poste quand même avec les commentaires au cas où.

VB:
Sub masquer()
'Bloque l'affichage écran
Application.ScreenUpdating = False
'Définit la variable c
Dim c As Range
'Travaille sur l'onglet Feuil1
With Sheets("Feuil1")
'.Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row) permet de calculer
'la dernière cellule remplie de la colonne 1
For Each c In .Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
'si le caractère * est absent Find renvoie Nothing et on masque la ligne de cette cellule
If c.Find("~*", LookIn:=xlValues) Is Nothing Then c.Rows.EntireRow.Hidden = True
Next c
End With
Application.ScreenUpdating = True
End Sub
 
 
Sub afficher()
'Affiche toutes les lignes de l'onglet Feuil1
Sheets("Feuil1").Cells.EntireRow.Hidden = False
End Sub

Bonne soirée à tous 🙂

mth
 
Re : Masquer plusieurs lignes en présence du caractère *

Bonsoir,

De ce que j'ai compris, essaie avec ce code :

Code:
Sub masquer()
Dim Cel As Range
Dim Flag1 As Boolean, Flag2 As Boolean
Cells.Rows.Hidden = False
For Each Cel In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If InStr(1, Cel, "*") > 1 Then Flag1 = IIf(Flag1 = True, False, True): Flag2 = True
    If Not Flag1 And Not Flag2 Then Cel.EntireRow.Hidden = True
    Flag2 = False
Next Cel
End Sub
Bonne soirée

Hi, bonsoir Mireille et Grand Chaman...

De ce que j'ai compris, il veut laisser visible les lignes insérées entre les Fournisseurs "étoilés" et leurs totaux respectifs....

Peut-être???
pas facile sans fichier explicite...
 
Dernière édition:
Re : Masquer plusieurs lignes en présence du caractère *

Wow ! Je suis impressionné par toutes vos réponses, merci beaucoup. Je suis à Montréal (-6h par rapport à Paris), et je n'ai qu'un mac chez moi, donc je ne testerai que demain matin, mais merci beaucoup ça va m'aider.

Voici un fichier plus explicite comme demandé, désole j'aurais dû y penser plus tôt.
 

Pièces jointes

Re : Masquer plusieurs lignes en présence du caractère *

Bonsoir bhbh, le forum

Hi, bonsoir Mireille et Grand Chaman...

De ce que j'ai compris, il veut laisser visible les lignes insérées entre les Fournisseurs "étoilés" et leurs totaux respectifs...

En effet, après relecture ma proposition n'est pas correcte. La tienne semble mieux quoique ta version semble masquer les lignes pour les fournisseurs sans les * alors qu'il faudrait faire l'inverse ou plutôt les 2...

Le but de l'opération est de pouvoir masquer toutes les lignes se situant entre "Fournisseur 1*" et "Total Fournisseur 1*" inclus, et inversement.

Je vais y réfléchir...
 
Re : Masquer plusieurs lignes en présence du caractère *

Salut
avec ou sans *, vois Si... cela te convient :
Code:
Sub A_Voir()
  Rows("2:34").Hidden = Not Rows("2").Hidden
  Rows("3:6").Hidden = Not Rows("3").Hidden
  Rows("18:29").Hidden = Rows("3").Hidden
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
45
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…