XL 2013 Suppression ligne/colonne sur deux zone dans même onglet

Alex6942

XLDnaute Nouveau
Bonjour à tous,

J'aimerai supprimer toutes des lignes à partir de la dernière cellule contenant un "." en Colonne [A] et de la dernière cellule vide en Colonne

Cependant cette suppression doit ce faire de la colonne [A à G] (avec décalage des lignes sur le haut) et de [I à J]

la difficulté est : il se peut donc que la dernière ligne pour la zone [A à G] soit la ligne 10 alors que pour la zone [I à J] c'est la ligne 20

Le code ci dessous correspondrait presque , mais il me supprime toutes les lignes et toutes les colonnes lors de ma dernière cellule contenant "." en colonne A

Sub supp_ligne_zero()
With Range("A3:A" & [A65536].End(xlUp).Row)
.Replace What:=".", Replacement:="", LookAt:=xlWhole
.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
End Sub


je vous joint en PJ un fichier avec un onglet avec l'état avant et l'après souhaité

Si vous avez des idées..

Bonne journée :)
 

Pièces jointes

  • Essai.xlsx
    10.3 KB · Affichages: 7
Solution
Re,

Tu as raison, il y avait une erreur dans mon code. il manquait les guillemets au I de :
VB:
O.Range(O.Cells(PLV, "I")
Mais de ton coté, tu n'avais pas placé le code au bon endroit. Il fallait le mettre dans un module standard. Ici le Module1.

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Alex et bienvenu, bonjour le forum,

Essaie comme ça :

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim PLV As Integer 'déclare la variable PLV (Première Ligne Vide)
Dim I As Integer 'déclare la variable I (Incrément)

Application.ScreenUpdating = False 'masque le rafraîchissements d'écran
Set O = Worksheets("avant") 'définit l'onglet O (à adapter à ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = UBound(TV, 1) To 3 Step -1 ' boucle inversée sur toutes les lignes I du tableau des valeurs TV (de la dernière à la troisième)
    'si la donnée ligne I colonne 1 de TV est un point, supprime les 7 cellules de la ligne en déclant vers le haut
    If TV(I, 1) = "." Then O.Cells(I, 1).Resize(1, 7).Delete shift:=xlUp
Next I ' prochine ligne de la boucle
PLV = O.Cells(Application.Rows.Count, "I").End(xlUp).Row + 1 'définit la première ligne vide de la colonne I
O.Range(O.Cells(PLV, I), O.Cells(Application.Rows.Count, "J")).Delete shift:=xlUp 'supprime toutes les lignes en-dessous de PLV pour les colonnes I et J
Application.ScreenUpdating = True 'affiche le rafraîchissements d'écran
End Sub
 

Alex6942

XLDnaute Nouveau
Bonjour Robert,

Merci pour ton super retour :)

Cependant , cela ne marche pas dans le sens inverse , cas ou la première cellule contenant "." de la colonne A est la vingtième et que la dernière ligne de la colonne I est la cinquième par exemple ..

On touche presque au but :)

Bonjour Alex et bienvenu, bonjour le forum,

Essaie comme ça :

VB:
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim PLV As Integer 'déclare la variable PLV (Première Ligne Vide)
Dim I As Integer 'déclare la variable I (Incrément)

Application.ScreenUpdating = False 'masque le rafraîchissements d'écran
Set O = Worksheets("avant") 'définit l'onglet O (à adapter à ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = UBound(TV, 1) To 3 Step -1 ' boucle inversée sur toutes les lignes I du tableau des valeurs TV (de la dernière à la troisième)
    'si la donnée ligne I colonne 1 de TV est un point, supprime les 7 cellules de la ligne en déclant vers le haut
    If TV(I, 1) = "." Then O.Cells(I, 1).Resize(1, 7).Delete shift:=xlUp
Next I ' prochine ligne de la boucle
PLV = O.Cells(Application.Rows.Count, "I").End(xlUp).Row + 1 'définit la première ligne vide de la colonne I
O.Range(O.Cells(PLV, I), O.Cells(Application.Rows.Count, "J")).Delete shift:=xlUp 'supprime toutes les lignes en-dessous de PLV pour les colonnes I et J
Application.ScreenUpdating = True 'affiche le rafraîchissements d'écran
End Sub
 

Alex6942

XLDnaute Nouveau
Re,

Le code fonctionne dans tous les sens il me semble puisqu'il les deux tableaux séparément... Sinon envoie un fichier avec deux exemples pour que je comprenne.

Re ,

Sur ce fichier ci-joint, lorsque qu'on lance la macro, les données présentes dans les colonnes [B à G] se suppriment .. (à partir de la dernière ligne non vide en colonne )

Il faudrait conserver ces valeurs lorsque la dernière cellule en colonne [A] est plus loin que celle de la colonne
 

Pièces jointes

  • Essai.xlsm
    19.6 KB · Affichages: 2

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Tu as raison, il y avait une erreur dans mon code. il manquait les guillemets au I de :
VB:
O.Range(O.Cells(PLV, "I")
Mais de ton coté, tu n'avais pas placé le code au bon endroit. Il fallait le mettre dans un module standard. Ici le Module1.
 

Pièces jointes

  • Alex_ED_v01.xlsm
    21.3 KB · Affichages: 4

Discussions similaires

Statistiques des forums

Discussions
312 167
Messages
2 085 901
Membres
103 027
dernier inscrit
Dridi Ahmed