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

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
Marimar
 
Merci c'est efficace ;)
0
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 725
 
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
chossette9 Messages postés 4239 Date d'inscription   Statut Contributeur Dernière intervention   1 311
 
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
Steefif Messages postés 485 Date d'inscription   Statut Membre Dernière intervention   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
gbinforme Messages postés 14946 Date d'inscription   Statut Contributeur Dernière intervention   4 725
 
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
Steefif Messages postés 485 Date d'inscription   Statut Membre Dernière intervention   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
sirefalas Messages postés 219 Date d'inscription   Statut Membre Dernière intervention   8
 
regarde du coté de la fonction TimeSerial, normalement ça devrait te guider pour ce que tu semble vouloir faire
0

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

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