Les Macros

Résolu
Marimar -  
 loulita -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Marimar
       
      Merci c'est efficace ;)
      0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
    0
    1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      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.
      0
  3. Steefif Messages postés 526 Statut Membre 19
     
    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é.

    0
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      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.
      0
    2. Steefif Messages postés 526 Statut Membre 19
       
      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.
      0
  4. sirefalas Messages postés 260 Statut Membre 8
     
    regarde du coté de la fonction TimeSerial, normalement ça devrait te guider pour ce que tu semble vouloir faire
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0
  7. Marimar
     
    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???
    0
    1. loulita
       
      fonction LIGNES() pour compter le nombre des lignes et COLONNES() pour compter le nombre des colonnes
      0