Supprimer une ligne si cellule d'une colonne remplie

Antraxin Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
Antraxin Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

J'ai un tableau sous excel qui n'a pas une taille limite, il peut y avoir 2 lignes comme 5000 avec des dates d'entrée et de sortie.
Ce que j'aimerais c'est détecté toute les lignes où une cellule de la colonne H contient une date et supprimer cette ligne via une macro.
Les données du tableau commencent en A6 (l'intitulé du tableau est en A5)
J'utilise déjà des macro dans mon fichier mais là je ne sais pas comment faire ça.

Merci d'avance pour votre aide.
A voir également:

5 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

La date colonne H est elle issue d'une formule ?

nombre total de colonnes ou dernière lettre des colonnes utilisées ?

Merci d'avance
0
Antraxin Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

La date de la colonne H est insérée de cette manière
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    With Target
        If .Column = 6 Or .Column = 7 Or .Column = 8 Then .Value = Date: Cancel = True
    End With
End Sub

Ou écrite via le pavé numérique.

La dernière colonne du tableau est en L5
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,

Tu peux le faire avec cette simple ligne de code :
Cells(6, "H").Resize(Cells(Rows.Count, "H").End(xlUp).Row, 1).SpecialCells(xlCellTypeConstants).EntireRow.Delete
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
salut gb, :o)

c'est presque ce que j'avais sous le coude !

si H est remplie par des formules

On Error Resume Next
Columns("H").SpecialCells(xlCellTypeFormulas).EntireRow.Delete


"On error resume next" pour éviter un message d'erreur si il n'y a aucune cellule avec formule dans H
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Salut Michel,
Je n'ai vu ton message qu'après ma réponse mais je me doutais bien, en le voyant, que tu avais dû y penser très fort pour m'inspirer ! ;-)
Effectivement, c'est parfait en évitant le message d'erreur.
Bon dimanche à toi.
0
Antraxin Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour, jai essayer les deux codes mais ça ne fonctionne pas
Option Explicit

Sub Supprimer()
Cells(6, "H").Resize(Cells(Rows.Count, "H").End(xlUp).Row, 1).SpecialCells(xlCellTypeConstants).EntireRow.Delete
End Sub


Surement ma syntaxe qui est mauvaise, je ne connais pas le VBA, je me sers de ce que j'arrive a trouver sur le net.

Merci a vous pour votre aide
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 724
 
Bonjour,
ça ne fonctionne pas
C'est très explicite : qu'est-ce qui ne fonctionne pas.

Si ta procédure utilise "copy" dans ta "commande qui envoi toute les lignes avec une valeur dans la colonne H sur un deuxième onglet", remplace "copy" par "Cut".
0
Antraxin Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   > gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention  
 
ça me mets"erreur d'exécution 1004, la méthode delete de la classe range à echoué.
et je n'ai pas de "copy" dans la commande qui envoi sur la deuxième page :s
0
cousinhub29 Messages postés 1074 Date d'inscription   Statut Membre Dernière intervention   361
 
Bonjour,

Pour ma part, je ne comprends pas pourquoi tu insères une date, si c'est pour supprimer la ligne de suite après...

Donc, en utilisant uniquement ce code (j'ai gardé l'option double-clic, et ajouté une condition, sur le numéro de ligne) :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
If .Row > 1 Then
If .Column = 6 Or .Column = 7 Or .Column = 8 Then .EntireRow.Delete: Cancel = True
End If
End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If IsDate(Target) Then
If .Column = 6 Or .Column = 7 Or .Column = 8 Then .EntireRow.Delete
End If
End With
End Sub


Peut-être?

Bon dimanche
0
Antraxin Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
En fait c'est pour supprimer de mon premier onglet, avant de supprimer j'ai une commande qui envoi toute les lignes avec une valeur dans la colonne H sur un deuxième onglet. le code n'est pas de moi donc je ne sais pas comment le changer pour qu'il supprimer après avoir déplacer.
C'est pour ça que je cherche un deuxième code qui fait qu'une fois que j'ai déplacer je puisse supprimer.
0
cousinhub29 Messages postés 1074 Date d'inscription   Statut Membre Dernière intervention   361
 
Re-,

En effectuant le déplacement juste avant la suppression, dans un des codes proposés, peut-être?

Quel code, utilises-tu, pour effectuer le déplacement?
0
Antraxin Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Le code n'es pas de moi, j'espère que celui qui l'a fait ne m'en voudras pas ^^'
Sub Archiver()
Dim I As Worksheet 'déclare la variable I (onglet Interventions)
Dim H As Worksheet 'déclare la variable H (onglet Histo)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim NL As Long 'déclare la variable NL (Nombre de Lignes)
Dim NC As Byte 'déclare la variable NC (Nombre de Colonnes)
Dim J As Long 'déclare la variable J (incrément)
Dim K As Long 'déclare la variable K (incrément)
Dim L As Byte 'déclare la variable L (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim PL As Range 'déclare la variable PL (PLage)

Set I = Worksheets("Interventions") 'définit l'onglet I
Set H = Worksheets("Histo") 'définit l'onglet H
Set PL = I.Range("A1") 'initialise la variable PL
TV = I.Range("A4").CurrentRegion 'définit le tableau des valeurs TV (il commence en A3 et la première valeur est à sa 4ème ligne)
NL = UBound(TV, 1) 'définit le nombre de lignes NL du tableau des valeurs TV
NC = UBound(TV, 2) 'définit le nombre de colonnes NC du tableau des valeurs TV
K = 1 'initialise la variable K
For J = 4 To NL 'boucle 1 : sur toutes les lignes J du tableau des valeurs TV (en partant de la 4ème)
  If TV(J, 8) <> "" Then 'condition : si la donnée ligne I colonne 8 (=> "Efectuer le") n'est pas vide
      Set PL = IIf(PL.Cells.Count = 1, I.Rows(J + 2), Application.Union(PL, I.Rows(J + 2))) 'définit la variable PL
      ReDim Preserve TL(1 To NC, 1 To K) 'redimensionne le tableau des lignes TL
      For L = 1 To NC 'boucle 2 :  sur toutes les colonnes du tableau des valeurs TV
          TL(L, K) = TV(J, L) 'récupère dans la ligne L de TL, la valeur de la donnée en colonne L de TV (=transposition)
      Next L 'prochaine colonne de la boucle 2
      K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
  End If 'fin de la condition
Next J 'prochaine ligne de la boucle 1
If K > 1 Then 'condition : si K est égale à 1 (au moins une occurence "Effectué le" trouvée)
  Set DEST = IIf(H.Range("A4") = "", H.Range("A4"), H.Range("A3").End(xlDown).Offset(1, 0)) 'définit la cellule de destination DEST
  DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL) 'renvoie dans DEST redimensionnée le tableau TL transposé
End If 'fin de la condition
End Sub
 



Il avait mis cette ligne après le dernier End if
If PL.Cells.Count > 1 Then PL.Delete 'efface la plage PL

Mais elle ne fonctionne pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cousinhub29 Messages postés 1074 Date d'inscription   Statut Membre Dernière intervention   361
 
Re-,

Ce code, tu l'as obtenu de Tautheme, sur un autre forum....

C'est pas que j'aime pas quand on multi-poste, mais le mieux, serait peut-être de lui demander directement...
En fait, si, j'aime pas, le multi-postage (faire travailler plusieurs, sur le même sujet, un dimanche...)

Bon Dimanche
0
Antraxin Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
Désolé, je m'adresserai à lui.

Bonne journée.
0