Les Macros

Résolu
Bonjour,

Merci bcp pour vos aides c'est déja sauf que,
je viens de commencer avec les macro et je n'arrive pas a faire des traitements sur des champs de type: hh,mm,ss.
voila mon programme pour pouvoir supprimer les lignes qui sont inférieur à 16:30:00 et supérieur à 19:00:00 mais mon programme ne prends pas ça en compte.

sub supr_ligne()
Dim Dep As Date
Const Nb_ligne As Integer = 1110
Const heur1 As date = 16:30:00, heur2 As Date = 19:00:00 (cette forme n'est pas accepté par Excel)alors comment faire).

for i=1 to Nb_ligne
Dep=Cells(i,4).Select
If Dep < heur1 and Dep > heur2 then
cells(i,4).clearsContents
EndIf
Next
End Sub

SVP j'ai besoin de savoir coment je peux lui données des heures.

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. bonjour à tous
    juste en passant
    dim DerLig as long
    DerLig = Range("A65536").End(xlUp).Row
    donne le n° de la dernière ligne de la colonne A
    à adapter à ton cas

    bonne suite
    1. Merci c'est efficace ;)
  2. Contributeur
    bonjour

    Tu devrais plutôt écrire ainsi :

    Sub supr_ligne()  
    Dim Dep As Date, i As Integer  
    Const Nb_ligne As Integer = 1110  
    Const heur1 As Date = "16:30:00", heur2 As Date = "19:00:00"  
    For i = 1 To Nb_ligne  
        Dep = Cells(i, 4).Value  
        If Dep < heur1 And Dep > heur2 Then  
            Cells(i, 4).ClearContents  
        End If  
    Next  
    End Sub

    mais tu ne peux pas "supprimer les lignes qui sont inférieur à 16:30:00 et supérieur à 19:00:00" car cela n'arrivera jamais !

    peut-être en utilisant OR au lieu de AND ?
    Toujours zen
    1. Contributeur
      Bonjour,

      je proposerais plutôt ceci :

      Sub supr_ligne()
      Dim Dep As Date
      Const Nb_ligne As Integer = 1110
      Const heur1 As Date = "16:30:00", heur2 As Date = "19:00:00"
      
      For i = Nb_ligne To 1 Step -1
      Dep = Cells(i, 4).Value
      If Not (IsEmpty(Dep)) And (Dep < heur1 Or Dep > heur2) Then
      Rows(i).Delete
      End If
      Next
      End Sub
      


      - La suppression de ligne est plus pertinente en partant de la fin car en partant depuis le début les lignes se décalent et on risque d'en oublier au passage

      - Il faut aussi vérifier que la cellule n'est pas vide, sinon on supprime quand même la ligne

      Cordialement.
  3. Je ne m'y connais pas trop en excel, mais je vais essayer de t'aporter un contournement.
    Je sais qu'il est possible par des opérations sur les chaines de faire :

    16:30:00 ->1630 en prenant droite(5) et en supprimant le :
    de meme 19:00:00 ->1900

    après il suffit de faire le meme système pour supprimer les lignes.
    C'est moche, je sais, mais ça doit marcher à mon avis pour parer au plus pressé.

    1. Contributeur
      Bonjour Steefif,

      16:30:00 ->1630 en prenant droite(5) et en supprimant le :

      Attention pour les dates et heures car lorsque tu as un format "16:30:00" dans une cellule le contenu réel est 0,6875 et c'est le format choisi (hh:mm:ss) qui t'affiche l'heure correspondante.
    2. haha bien vu !
      merci je ne savais pas du tout tu vois.
      si j'ai le temps cet après midi je regarderai comment tout ça fonctionne.
      Curiosité (non) professionnelle.
  4. regarde du coté de la fonction TimeSerial, normalement ça devrait te guider pour ce que tu semble vouloir faire
    1. Contributeur
      onjour à tous

      1/ il est d'usage de déclarer les constantes avant la macro (utilisation possible dans le projet)
      une date-heure se déclare entre #, VBA transforme sous la forme PM AM
      2/ comme l'indique Gb informe il s'agirait plut^t d'un OR qu'un AND
      3/ pour ne pas avoir un écran qui clignote uitilise screenupdatng=false qui fige le défilement de l'écran

      macro proposée
      Const Nb_ligne As Integer = 1110
      Const heur1 As Date = #4:30:00 AM#, heur2 As Date = #7:00:00 PM#
      
      Sub supr_ligne()
      Dim Dep As Date
      Application.ScreenUpdating = False
      For i = 1 To Nb_ligne
           Dep = Cells(i, 4)
           If Dep < heur1 Or Dep > heur2 Then
                Cells(i, 4).ClearContents
           End If
      Next
      End Sub
      1. Merci bcp les amis, la solution de chossette9 fonctionne. sauf que ESQu'il ya une fonction qui permet de recupérer le nombre de ligne de notre fichier , car j'ai bcp de ligne et le nb_ligne doit étre compté d'une façon automatique.
        ESq vous pouvez m'aider???
        1. fonction LIGNES() pour compter le nombre des lignes et COLONNES() pour compter le nombre des colonnes