Variables sur no de ligne ou plage de lignes

  • Initiateur de la discussion Initiateur de la discussion DIDPRO
  • Date de début Date de début

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 !

D

DIDPRO

Guest
Bonjour à tous,

N'étant pas un expert (encore) sur visual basic, je voudrais savoir si on peut affecter un n° de ligne ou une plage de ligne en variable pour pouvoir à la demande masquer la plage demandée par inputbox.

Merci à tous pour vos futurs réponses.

Did,🙂
 
Re : Variables sur no de ligne ou plage de lignes

Bonjour DIDPRO,

Sur le principe, Oui, comment veux-tu indiquer les lignes à masquer ?
en tapant leurs numéros dans l'inputbox ou en demandant à l'utilisateur de sélectionner des cellules des lignes concernées ?
 
Re : Variables sur no de ligne ou plage de lignes

Bonjour Didpro, Toto🙂

remplace ceci :
Code:
ActiveSheet.Range("A" & Rep1 & ":A" & Rep2).EntireRow.Hidden = True
par cela :
Code:
ActiveSheet.Range("A" & Rep1 & ":A" & Rep2).Delete

bonne journée
@+
 
Re : Variables sur no de ligne ou plage de lignes

Bonjour Pierrot,

Cela marche quand dans ma macro, je ne fais que ça. Par contre, j'en ai besoin dans un contexte particulier à savoir que la feuille est protégée. Je passe par la macro pour la déprotéger et ensuite l'utilisateur supprime les lignes en trop, pour qu'ensuite je revérrouille la feuille.
Dans ce contexte là, il me supprime plus les lignes mais les cellules A des N° de lignes spécifiés en décalant les cellules B en A.

Si tu pouvais m'aider à comprendre, je t'en remercie ....

Did,

Ps : Ci-joint le code ...

Sub Del_Ligne()
'
' Déverrouillage de la feuille par un mot de passe "primes"
'
Range("D3").Select
ActiveSheet.Unprotect
Range("D3").Select
'
' Suppression des lignes en trop ...
'
Dim Rep1, Rep2
Rep1 = Application.InputBox(Prompt:="Premier N° de ligne à masquer", Type:=1)
Rep2 = Application.InputBox(Prompt:="Dernier N° de ligne à masquer", Type:=1)

If Rep1 = False Or Rep2 = False Then Exit Sub
ActiveSheet.Range("A" & Rep1 & ":A" & Rep2).Delete

'
' RE vérrouillage de la feuille par un mot de passe "primes"
'
Range("D3").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowDeletingRows:=True
Range("D3").Select
End Sub
 
Re : Variables sur no de ligne ou plage de lignes

Bonjour,

Peux être en supprimant la ligne entière et pas seulement la cellule

Code:
Sub Del_Ligne()
Dim Rep1, Rep2
' Déverrouillage de la feuille par un mot de passe "primes"
ActiveSheet.Unprotect
' Suppression des lignes en trop ...
Rep1 = Application.InputBox(Prompt:="Premier N° de ligne à masquer", Type:=1)
Rep2 = Application.InputBox(Prompt:="Dernier N° de ligne à masquer", Type:=1)
If Rep1 = False Or Rep2 = False Then Exit Sub
ActiveSheet.Range("A" & Rep1 & ":A" & Rep2).EntireRow.Delete
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowDeletingRows:=True
End Sub

Bonne journée
 
Re : Variables sur no de ligne ou plage de lignes

Re Pierrot,

J'ai rajouté la boucle pour pouvoir supprimer que les lignes dont la cellule en colonne "C" est vide. Pour cela j'ai besoin de changer la valeur de 'VAL' dans la boucle For Each, mais je n'y arrive pas. Dans le code ci-joint, elle est mise en commentaire ....

Dim Rep1, Rep2, aff
Rep1 = Application.InputBox(Prompt:="Premier N° de ligne à supprimer", Type:=1)
Rep2 = Application.InputBox(Prompt:="Dernier N° de ligne à supprimer", Type:=1)
Dim val
For Each val In Range("C" & Rep1 & ":C" & Rep2)
If val.Value = 0 Or val.Value = "" Then
Range("C" & val.Row).Select
Selection.EntireRow.Delete
' val = val + 1
Rep2 = Rep2 - 1
End If
Next

Merci à toi pour tes réponses ....

Did,
 
Re : Variables sur no de ligne ou plage de lignes

Bonsoir,

essaye ceci :
Code:
Option Explicit
Sub test()
Dim Rep1 As Long, Rep2 As Long, i As Long
Rep1 = Application.InputBox(Prompt:="Premier N° de ligne à supprimer", Type:=1)
Rep2 = Application.InputBox(Prompt:="Dernier N° de ligne à supprimer", Type:=1)
For i = Rep2 To Rep1 Step -1
    If Cells(i, 3).Value = 0 Or Cells(i, 3).Value = "" Then Cells(i, 3).EntireRow.Delete
Next i
End Sub

bonne soirée
@+
 
Re : Variables sur no de ligne ou plage de lignes

Re Pierrot,

Toutes mes excuses, mais il y a une erreur dans mon code, car Val doit se décrémenter lorsque la condition est remplie; ci-joint le code corrigé.
Code:
Dim Rep1, Rep2, aff
Rep1 = Application.InputBox(Prompt:="Premier N° de ligne à supprimer", Type:=1)
Rep2 = Application.InputBox(Prompt:="Dernier N° de ligne à supprimer", Type:=1)
Dim val
For Each val In Range("C" & Rep1 & ":C" & Rep2)
If val.Value = 0 Or val.Value = "" Then
Range("C" & val.Row).Select
Selection.EntireRow.Delete
' val = val - 1
Rep2 = Rep2 - 1
End If
Next

Quand la condition est rempli, on supprime la ligne et pour éviter de sauter une ligne, on décrémente val et Rep2 pour éviter de dépasser la plage donnée.

Espérant avoir été clair, je te remercie pour la suite....

Did,
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour