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.
A voir également:
- Les Macros
- Macros word - Guide
- My macros - Télécharger - Organisation
- Ez macros - Télécharger - Divers Utilitaires
- Impossible de copier cette macro complémentaire dans la bibliothèque de macros ✓ - Forum Programmation
- Le classeur macros personnelles dans le dossier de démarrage doit être ouvert ✓ - Forum VB / VBA
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
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
Marimar
Merci c'est efficace ;)
bonjour
Tu devrais plutôt écrire ainsi :
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
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 :
- 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 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é.
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ée
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