Bonjour
dans un tableau, dont la taille peut changer, qui débute en a5 j'ai besoin que la date la plus ancienne en colonne b s'affiche dans la cellule b2. (au dessus)
en vba svp
Merci
Sub Liste() 'mise a jour des données Feuil1 de puis Import
'declaration des plages en dates + heures de debut et de fin
Di
Dim minidate2, maxidate2
Dim minimaldate2, maximaldate2 As Date
With Feuil1
minidate2 = .Cells(.Rows.Count, "b").End(xlUp).Row
mm DébP As Date, FinP As Date
inimaldate2 = IIf(minidate2 > 4, Application.Min(.Range("b5:b" & minidate2)), "")
End With
On devrait plutôt lire
VB:
Sub Liste() 'mise a jour des données Feuil1 de puis Import
'declaration des plages en dates + heures de debut et de fin
Dim DébP As Date, FinP As Date
Dim minidate2 As Long , maxidate2 As Long
Dim minimaldate2 As Date , maximaldate2 As Date
With Feuil1
minidate2 = .Cells(.Rows.Count, "b").End(xlUp).Row
minimaldate2 = IIf(minidate2 > 4, Application.Min(.Range("b5:b" & minidate2)), "")
End With
Re..
Bon,
Je ne comprend pas ce que tu veux faire avec ce classeur...
Tu veux mettre une date et une heure (max et min) dans des cellules à l'activation de la feuille et en même temps modifier ces cellules.
Si c'est cela , je ne pense pas que cela soit une bonne méthode
Je ne sais pas si JM à compris la même chose.
En pj, le classeur avec seulement la demande initiale.
J'ai interprété la demande ainsi : 2 actions Action 1 : mettre à jour la feuille à son activation après récupération des données. Là c'est simple avec les formats de date !
VB:
Dim MiB as date, MaC as date
Private Sub Worksheet_Activate()
MiB = Application.Min([B:B])
MaC = Application.Max([C:C])
[D3] = MiB
[B2] = Format(MiB, "dd/mm/yyyy")
[G2] = Format(MiB, "hh:mm")
[J3] = MaC
[I2] = Format(MaC, "dd/mm/yyyy")
[L2] = Format(MaC, "hh:mm")
End Sub
Action 2 : changements de saisie dans les cellules [B2], [G2], [I2] et [L2]. Cela se corse car la macro ci-dessus impacte l'évènementielle. Il faut se prémunir de cela en bloquant puis libérant les évènements.
VB:
Private Sub Worksheet_Activate()
Application.EnableEvents = 0 'pour bloquer les évènements
MiB = Application.Min([B:B])
…
[L2] = Format(MaC, "hh:mm")
Application.EnableEvents = 1 'pour libérer les évènements
End Sub
Maintenant, il faut traiter les changements
VB:
Dim T as Boolean 'à rajouter obligatoirement tout en haut
Private Sub Worksheet_Change(ByVal R As Range)
If Not Intersect(R, [B2:G2,I2:L2]) Is Nothing Then
T = [B2] = "" Or [G2] = "" Or [I2] = "" Or [L2] = ""
If T Then Exit Sub '4 saisies non vides pour conclure
[D3] = [B2] & " " & Format([G2], "[$-409]h:mm AM/PM;@")
[J3] = [I2] & " " & Format([L2], "[$-409]h:mm AM/PM;@")
If CDate([D3]) > CDate([J3]) Then MsgBox "la date de début doit être inférieure à celle de la fin !", vbCritical, "Attention, erreur ..."
[B3].Select 'ou autre action de nettoyage
End If
End Sub
Je n'ai pas testé la validité des saisies donc à rajouter.
Tout se passe dans la feuille 1* alors il n'y a plus de With… End With donc de point.
Si je suis en dehors de la plaque, il y a quand même une sacrée réduction pour la recherche des dates minimale et maximale et pour l'indication des cellules concernées.
* je vois trop souvent des macros dans des Modules Standards quand tout se passe dans le même onglet donc des codes alourdis !
Il me semble que c'est bien plus simple quand on se dit « Je travaille sur une seule feuille donc je saisis mes macros dans la fenêtre de codes de celle-ci !».
Re..
Bon,
Je ne comprend pas ce que tu veux faire avec ce classeur...
Tu veux mettre une date et une heure (max et min) dans des cellules à l'activation de la feuille et en même temps modifier ces cellules.
Si c'est cela , je ne pense pas que cela soit une bonne méthode Je ne sais pas si JM à compris la même chose.
Je viens d'apprendre que le libre-arbitre serait un leurre (selon les neurosciences)
Du coup si je comprends ou pas la question, ce n'est pas de mon fait.
"29/5/18 7:00 AM 31/5/18 6:00 PM trouer"
Cependant, je me demande bien qui creuse des trous (et dans quoi) durant un si grand laps de temps
Au final, je crois bien que comme toi, Jacky67, je ne comprenne pas vraiment la demande du demandeur.
Mais celui-ci finira bien par trouver chaussure à son pied parmi toutes les réponses postées dans son fil.
je veux mettre une date et une heure (max et min) dans des cellules à l'activation de la feuille et après modifier ces cellules
quand ces cellules seront modifiées les boites de dialogues s'activeront (au besoin*) via Sub Liste()
*si les valeurs saisies sortent du cadre de la plage [b2:g2,i2:L2]
à l'activation de la feuille b2:g2 sera au minimum et i2:L2 au maximum
J'ai interprété la demande ainsi : 2 actions Action 1 : mettre à jour la feuille à son activation après récupération des données. Là c'est simple avec les formats de date !
VB:
Dim MiB as date, MaC as date
Private Sub Worksheet_Activate()
MiB = Application.Min([B:B])
MaC = Application.Max([C:C])
[D3] = MiB
[B2] = Format(MiB, "dd/mm/yyyy")
[G2] = Format(MiB, "hh:mm")
[J3] = MaC
[I2] = Format(MaC, "dd/mm/yyyy")
[L2] = Format(MaC, "hh:mm")
End Sub
Action 2 : changements de saisie dans les cellules [B2], [G2], [I2] et [L2]. Cela se corse car la macro ci-dessus impacte l'évènementielle. Il faut se prémunir de cela en bloquant puis libérant les évènements.
VB:
Private Sub Worksheet_Activate()
Application.EnableEvents = 0 'pour bloquer les évènements
MiB = Application.Min([B:B])
…
[L2] = Format(MaC, "hh:mm")
Application.EnableEvents = 1 'pour libérer les évènements
End Sub
Maintenant, il faut traiter les changements
VB:
Dim T as Boolean 'à rajouter obligatoirement tout en haut
Private Sub Worksheet_Change(ByVal R As Range)
If Not Intersect(R, [B2:G2,I2:L2]) Is Nothing Then
T = [B2] = "" Or [G2] = "" Or [I2] = "" Or [L2] = ""
If T Then Exit Sub '4 saisies non vides pour conclure
[D3] = [B2] & " " & Format([G2], "[$-409]h:mm AM/PM;@")
[J3] = [I2] & " " & Format([L2], "[$-409]h:mm AM/PM;@")
If CDate([D3]) > CDate([J3]) Then MsgBox "la date de début doit être inférieure à celle de la fin !", vbCritical, "Attention, erreur ..."
[B3].Select 'ou autre action de nettoyage
End If
End Sub
Je n'ai pas testé la validité des saisies donc à rajouter.
Tout se passe dans la feuille 1* alors il n'y a plus de With… End With donc de point.
Si je suis en dehors de la plaque, il y a quand même une sacrée réduction pour la recherche des dates minimale et maximale et pour l'indication des cellules concernées.
* je vois trop souvent des macros dans des Modules Standards quand tout se passe dans le même onglet donc des codes alourdis !
Il me semble que c'est bien plus simple quand on se dit « Je travaille sur une seule feuille donc je saisis mes macros dans la fenêtre de codes de celle-ci !».
J'ai interprété la demande ainsi : 2 actions Action 1 : mettre à jour la feuille à son activation après récupération des données. Là c'est simple avec les formats de date ! Action 2 : changements de saisie dans les cellules [B2], [G2], [I2] et [L2]. Cela se corse car la macro ci-dessus impacte l'évènementielle. Il faut se prémunir de cela en bloquant puis libérant les évènements.
* je vois trop souvent des macros dans des Modules Standards quand tout se passe dans le même onglet donc des codes alourdis !
Il me semble que c'est bien plus simple quand on se dit « Je travaille sur une seule feuille donc je saisis mes macros dans la fenêtre de codes de celle-ci !»
.
Bon_soir à toi aussi
Je suis entièrement d'accord avec toi
Mais dans ce fil la notion de code évènementiel n'est apparu qu'au 12ème message...
Tous ces codes ne me permettent pas de comprendre la finalité de ce classeur.
La modification de la date et de l'heure ne sera pas effectuée pour autant dans le classeur d'exportation(s'il y a), ni même dans le classeur en question.
Un choix pratique plutôt. Centrer sur plusieurs colonnes impose d'entrer les criteres de dates sur la cellule de gauche de la sélection. Ce sont des champs qui seront renseignés par les utilisateur pour extraire plusieurs rapport d'activités sur des créneaux réduits.
Je viens d'apprendre que le libre-arbitre serait un leurre (selon les neurosciences)
Du coup si je comprends ou pas la question, ce n'est pas de mon fait.
"29/5/18 7:00 AM 31/5/18 6:00 PM trouer"
Cependant, je me demande bien qui creuse des trous (et dans quoi) durant un si grand laps de temps
Au final, je crois bien que comme toi, Jacky67, je ne comprenne pas vraiment la demande du demandeur.
Mais celui-ci finira bien par trouver chaussure à son pied parmi toutes les réponses postées dans son fil.
Pourrais tu stp apporter un éclaircissement j ’avoue je nage
Dans "If Not Intersect(R, [B2:G2,I2:L2]) Is Nothing Then" qu'est ce que R vient faire?
que signifie "[$-409]h:mm AM/PM;@" que signifie [$-409] quel en est usage?
Re..
Bon,
Je ne comprend pas ce que tu veux faire avec ce classeur...
Tu veux mettre une date et une heure (max et min) dans des cellules à l'activation de la feuille et en même temps modifier ces cellules.
Si c'est cela , je ne pense pas que cela soit une bonne méthode
Je ne sais pas si JM à compris la même chose.
En pj, le classeur avec seulement la demande initiale.
Holala Jacky67 a très bien vu j'ai fais une grosse erreurdans ma demande et mon fichier d'exemple qui trompe tout le monde
Je souhaite que à la 1ere activation de la Feuil1 [B2:G2,I2:L2] cette plage affiche 2 dates et heures (max et min) issue d'un autre onglet qui n'est pas présent dans mon exemple initial (ça sera Feuil2 - elle même une extraction) ce qui renvoi donc la totalité des données de Feuil2 dans la Feuil1
Pour qu'après l'utilisateur modifie ces cellules Feuil1 [B2:G2,I2:L2] ce qui renvoi dans le tableau de la Feuil1 l'ensemble des données selon ces nouveaux critères depuis les données de la Feuil2
Et si l'utilisateur saisie des date et heure de début B2:G2 anterieur a celle de la Feuil2 alors message d'erreur et retour à la saisie
idem avec date et heure de fin I2:L2 posterieur a celle de la Feuil2
idem si date et heure de fin antérieur à date et heure de début
Je joins un nouvel exemple
Je vais essayer maintenant que le problème est mieux posé avec l'aide des codes que vous avez tous apporté
Pas si facile d’être clair j’espère que ca l'est pour vous