Les Macros
Résolu
Marimar
-
loulita -
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.
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
-
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 -
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-
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.
-
-
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é.
-
regarde du coté de la fonction TimeSerial, normalement ça devrait te guider pour ce que tu semble vouloir faire
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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éeConst 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 -
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???