RE suppression de ligne

J

jean

Guest
Bonjour

Je suis entrain d'étudier une macro qui avait été réalisée par Zon dans le cadre d'une suppression de ligne.
Etant novice comme celui auquel s'adressait le message je souhaiterai que vous éclaireriez ma lanterne

Votre macro était la suivante
Sub SupLignes()
Dim Res As Integer

1
On Error GoTo Sortie
Res = WorksheetFunction.Match("X", Range("H2:H32767"), 0)
Rows(Res).Delete
GoTo 1
Sortie:
End Sub

J'ai besoin de quelques explications car je vais essayer de la mettre en pratique sur un de mes tableaux. Je ne suis absolument pas familier avec ce vocable et en recherchant dans l'explorateur objet je ne suis pas vraiment gaté non plus.

Je suis entrain d'appliquer cette formuleà toute les lignes 25 qui apparaissent sur mon tableau
Plusieurs question de sémantique :
1 )Dim res as integer signifie que la valeur est un entier compris dans une certaines plage ?
2) on error go to sortie là je dois dire que je sèche car sortie je ne vois pas à quoi cela réfère
3) res = ….. Veut dire que le programme recherche les X dans les cellules allant de h 2 à h32767 mais je ne vois pas à quoi correspond le 0

4) rows ….. Je comprends que l'on efface la ligne si l'on trouve un x
5) goto 1 on remonte au début de la macro c'est-à-dire au 1
6) sortie : Pas surprenant que je sèche je ne sais toujours pas à quoi cela correspond
Je souhaitais décortiquer cette macro et je vous prie de m'excuser par avance de mes questions qui doivent vous apparaître stupides mais en tant que débutant je suis admiratif et tout à la fois un peu désemparé par la facilité avec laquelle vous maniez une telle sémantique

Je me suis permis d'y adjoindre un tableau sur lequel je souhaite éliminer les lignes comprenant le numéro 25 et la macro dont je n'ai fait que changer la variable pourtant cela ne fonctionne pas . Pourriez vous m'aider?

Merci et bravo pour ce forum qui est très utile aux débutant
Jean
 

Pièces jointes

  • Classeur2.zip
    8.2 KB · Affichages: 20
  • Classeur2.zip
    8.2 KB · Affichages: 21
  • Classeur2.zip
    8.2 KB · Affichages: 21
@

@Christophe@

Guest
Bonjour Jean et le forum

Utilise plutôt le code suivant, parce que Match est pour du text

Colle le code suivant dans un module et modifie ta feuille de travail et ta plage:

Option Explicit
Dim WS1 As Worksheet
Dim Plage As Range
Dim Cell As Range

Sub Clear()
Set WS1 = Worksheets("Feuil1") 'Feuille de travail
Set Plage = WS1.Range("H2:H" & Range("H65535").End(xlUp).Row) 'Plage de travail, peux aussi être modifie par WS1.Range("H2:H30")

For Each Cell In Plage 'controle de toutes les cellules
If Cell.Value = 25 Then 'si valeur 25 alors valeur remplacé par ""
Cell.Clear
End If
Next Cell
Plage.SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'nettoyage cellule vide
End Sub

Bonne journée

@Christophe@
 
@

@Christophe@

Guest
Re

Aussi pour ton info, pour répondre à tes question sur le macro de Zon

1) Dim res as integer signifie que la valeur est un entier compris dans une certaines plage ?

Dim res as integer signifie que res est une variable déclaré en integer, donc une variable numérique entre -32768 et 32767, si plus grand ou plus petit alors bug(erreur), solution utilisé "Long" au lieu de integer.

2) on error go to sortie là je dois dire que je sèche car sortie je ne vois pas à quoi cela réfère

Ben c'est tous simple, on génère l'erreur, donc en cas de bug nous allons à sortie, exemple:

Tu éxécute une boucle 5 fois, disons que si il trouve que 4 fois, tu auras bug, puisque ta boucle va s'exécuter une dernière fois sans rien trouvé, donc tu dois géneré cette erreur, tu lui dis en cas d'erreur aller à (On error goto Suite)
Dans ta macro en fin de macro, tu mets Suite: et le code que tu veux exécuté en cas d'erreur

Sub Erreur
On error goto Suite
Ton code qui risque de géneré une erreur
...
Exit sub

Suite:
Msgbox "Erreur dans le code"
End sub

3) res = ….. Veut dire que le programme recherche les X dans les cellules allant de h 2 à h32767 mais je ne vois pas à quoi correspond le 0

Ben le 0 est un argument qui fait partie de la fonction, Equiv sur excel Français, tu peux le remplacé par 1, mais alors il commence par le bas, avec 0 il commence la plage de début à la fin, 1 commence de la fin au début

c'est une fonction excel, c'est pourquoi il utilise application.worksheetfunction. ...


Voila un peu les explication que tu ne savais pas

Bonne chance

@Christophe@
 
@

@Christophe@

Guest
Re

Je me relis et j'ai noté une connerie, désolé

Pour le match, cela vient de Equiv(valeur recherché, plage de recherche, argument type)

L'argument type dois être 0 ou 1, 0 si tu veux t'arreté sur le premier, 1 si tu en as deux de suite et que tu veux connaitre le numéro du dernier

Exemple 1
1 10
2 25
3 25
4 14
5 15

Match avec type 0 te renvoi 2, par contre match avec type 1 te renvoi 3

Exemple 2
1 10
2 25
3 12
4 25
5 15

Match avec type 0 te renvoi 2, match avec type 1 te renvoi également 2(il ne se suive pas)

Voila

@Christophe@
 
Z

ZON

Guest
Salut à tous,

Merci Christophe d'avoir répondu car les explications c'est pas mon truc, j'en profite pour souhaiter la bienvenue à Jean qui a suivi mon conseil en BAL: poser la question sur le forum.

Match travaille avec du texte mais pour un nombre on peut mettre 25 et non "25".

A+++

Ps Bon courage Jean
 
J

Jean

Guest
Bonsoir le forum,

Ici un autre Jean.

Le 1/09 Polinichel a posé une question semblable (masquer des lignes) et Michel y a répondu. Comme le principe était bon, c'est la manière de sélectionner qui me posait un problème et je vous le représente pour voir si c'est solutionable.

je voudrais que la sélection des lignes à masquer se fasse sur le contenu d'une colonne (qui du reste est cachée) et qui contient la valeur "T" (pour titre) quand la ligne concernée est un titre (cette information est encodée par moi même et ne change pas). Pour chaque titre, j'ai en dessous quinze lignes sur 12 colonnes. Si le total en ligne de ces 12 colonnes est < ou > ou = à ZERO, la cellule correspondante dans ma colonne masquée prend la valeur "D" (pour détail). Dans les autres cas, la valeur 0.
Après, en utilisant

Edition, atteindre, Cellule, Constante, texte (pour sélectionner toutes les lignes avec le code T ou D et puis masquer.

Excel ne me reprend que les lignes de type "T", il ignore superbement toutes les valeurs calculées.

Ce petit tableau se répète 28 fois et j'ai donc un travail de dieu le père pour masquer toutes les lignes inutiles car chaque fois que j'imprime tout, je contribue malheureusement très activement à la défôrestation de notre planète.

Je voudrais bien aussi ajouter au niveau du titre, un bouton de type bascule pour que quand je clique dessus, les lignes soient masquées et dès que je "déclique", les lignes réaparraissent.

Voila. J'espère que ce problème pourra intéresser un des lecteurs et qu'il pourra me guider et m'expliquer sa solution s'il en a une.

D'avance un tout grand merci.

Jean
 

Discussions similaires

Réponses
5
Affichages
326

Statistiques des forums

Discussions
312 412
Messages
2 088 196
Membres
103 763
dernier inscrit
p.michaux