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

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
 

Grand Chaman Excel

XLDnaute Impliqué
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+
 

mth

XLDnaute Barbatruc
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
 

Cousinhub

XLDnaute Barbatruc
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:

Terrence0

XLDnaute Nouveau
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

  • Exemple Fournisseur.xlsx
    40.8 KB · Affichages: 59

Grand Chaman Excel

XLDnaute Impliqué
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...
 

Si...

XLDnaute Barbatruc
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
 

Discussions similaires

Statistiques des forums

Discussions
312 658
Messages
2 090 619
Membres
104 611
dernier inscrit
Kanette2024