Pourquoi cette macro fontionne et pas l'autre ?

nat07

XLDnaute Nouveau
Bonsoir à tous, Pourquoi cette macro fonctionne bien ?

For Each ligne In ActiveSheet.UsedRange.Rows
If ligne.Cells(1, 12).Value = Empty Then
'si la cellule de la colonne L est vide, la ligne est masquée
ligne.EntireRow.Hidden = True
End If
Next
Range("A2").Select
End Sub

Et si je change le ligne.EntireRow.hidden = true
par
un ligne.EntireRow.delete = true

ça me mets un message d'erreur ?????
 

laurent950

XLDnaute Accro
Re : Pourquoi cette macro fontionne et pas l'autre ?

Bonsoir Nat07,

Et si je change le --->> ligne.EntireRow.hidden = true (cette ligne est masquer mais pas supprimer)
par
un --->> ligne.EntireRow.delete = true (cette ligne est supprimer)

True = vrais (execute la procédure) et false = faut (n'exécute pas la procédure)

avec cela ca devrais fonctionner

Sub testDelete()
For Each ligne In ActiveSheet.UsedRange.Rows
If ligne.Cells(1, 12).Value = Empty Then
'si la cellule de la colonne L est vide, la ligne est masquée
Rows(ligne.Row).Delete
End If
Next
Range("A2").Select
End Sub

Laurent
 
Dernière édition:

Fred0o

XLDnaute Barbatruc
Re : Pourquoi cette macro fontionne et pas l'autre ?

Bonsoir nat07,

Peut-être ce code-ci fonctionnera-t-il
VB:
Sub essai()
    Dim ligne
    For ligne = Cells(65536, 12).End(xlUp).Row To 1 Step -1
        If IsEmpty(Cells(ligne, 12)) Then Cells(ligne, 1).EntireRow.Delete
    Next
    Range("A2").Select
End Sub

A+
 

nat07

XLDnaute Nouveau
Re : Pourquoi cette macro fontionne et pas l'autre ?

merci pour ta réponse si rapide, ni l'un ni l'autre fonctionne...grrrrrrrrrrrrr j'en ais un peu marre de ramé pour ça.....j'y comprend pas grand chose, j'arrive juste à assembler des macros pour arriver à ce que je voudrais mais là je but sur ça et les MAJUSCULES

bref, reprennons : le (i) il faut que je le mette comme cela = ligne.EntireRow(i).delete = true ????

cette phrase veut bien dire qu'il supprime la ligne entiere ???
 

Fred0o

XLDnaute Barbatruc
Re : Pourquoi cette macro fontionne et pas l'autre ?

Re-bonsoir,

Ta syntaxe n'est pas bonne. La bonne est celle de mon code, c'est à dire :
VB:
ligne.EntireRow.Delete
Il ne faut pas mettre de = True derrière.

Mais : ton code ne peut pas fonctionner car ta variable ligne contient un n° de ligne et dans la syntaxe ci-dessus, il faut un objet de type Range. d'où le Cells(ligne, 1).

En outre, si tu pars de la 1° ligne et que tu les supprimes en allant vers la dernière, tu vas te retrouver avec un décalage, car en supprimant la ligne 12 par exemple, la n° 13 va devenir la 12 et ton code va incrémenter de 1 ton n° ligne. De ce fait, tu ne supprimeras correctement que la 1° ligne remplissant ta condition.

Le mieux est de poster un fichier exemple comme cela est spécifié dans Lien supprimé et tu verras que la solution que nous te proposerons devrait fonctionner

A+
 

nat07

XLDnaute Nouveau
Re : Pourquoi cette macro fontionne et pas l'autre ?

voici mon fichier j'ai mis l'annotation dedans pour expliquer ce qu'il me faudrait.
merci beaucoup
nat
 

Pièces jointes

  • essai.xlsm
    33.3 KB · Affichages: 43
  • essai.xlsm
    33.3 KB · Affichages: 48
  • essai.xlsm
    33.3 KB · Affichages: 51

Fred0o

XLDnaute Barbatruc
Re : Pourquoi cette macro fontionne et pas l'autre ?

Bonjour,

En dernière ligne de ta macro MISE-EN_PLACE_TAB, juste avant le End Sub, tapes cette instruction :
VB:
Call suppr

Ensuite, ,tu rajoutes cette macro :
VB:
Sub suppr()
    Dim ligne
    For ligne = Cells(65536, 2).End(xlUp).Row To 1 Step -1
        If IsEmpty(Cells(ligne, 2)) Then Cells(ligne, 1).EntireRow.Delete
        Cells(ligne, 3) = UCase(Cells(ligne, 3))
        Cells(ligne, 12) = UCase(Cells(ligne, 3))
        Cells(ligne, 13) = UCase(Cells(ligne, 3))
    Next
    Range("A2").Select
End Sub

Et le tour est joué.

A+
 

Discussions similaires

Réponses
0
Affichages
156
Réponses
1
Affichages
177

Statistiques des forums

Discussions
312 329
Messages
2 087 329
Membres
103 517
dernier inscrit
hbenaoun63