Supprimer une ligne si cellule d'une colonne remplie

Fermé
Antraxin Messages postés 7 Date d'inscription dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016 - 2 oct. 2016 à 00:52
Antraxin Messages postés 7 Date d'inscription dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016 - 2 oct. 2016 à 12:09
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 oct. 2016 à 08:39
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 dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016
2 oct. 2016 à 11:22
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
2 oct. 2016 à 08:45
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
2 oct. 2016 à 09:22
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
2 oct. 2016 à 10:17
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 dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016
2 oct. 2016 à 11:25
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 lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
2 oct. 2016 à 12:00
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 dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
Modifié par Antraxin le 2/10/2016 à 12:04
ç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 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
2 oct. 2016 à 11:42
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 dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016
2 oct. 2016 à 11:49
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 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
2 oct. 2016 à 11:52
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 dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016
2 oct. 2016 à 11:55
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 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
2 oct. 2016 à 12:03
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 dimanche 2 octobre 2016 Statut Membre Dernière intervention 2 octobre 2016
2 oct. 2016 à 12:09
Désolé, je m'adresserai à lui.

Bonne journée.
0