date

B

brigitte

Guest
bonjour a tous
dans cet extrait de suivi d'un plan de qualification,j'aimerais suite a une saisie( a l'aide de userform,clic dans cellule) dans ce tableau B5/E14 récupéré la date la plus ancienne , lui ajouter 6 mois ou 182jours et coller la valeur en B2

merci d'avance pour votre collaboration et bon week-end
brigitte
 

Pièces jointes

  • recupdate6mois.zip
    10.1 KB · Affichages: 13
  • recupdate6mois.zip
    10.1 KB · Affichages: 12
  • recupdate6mois.zip
    10.1 KB · Affichages: 12
@

@+Thierry

Guest
Bonsoir Brigitte, le Forum

Tiens, pour une fois que je fais quelque chose de "sérieux" avec toi Brigitte
...à moins que tu ne soies pas notre Brigitte Nationale d'XLD !

Dans le Private Module de la Feuil1 où tu as déjà l'évènementielle du déclenchement du UserForm Calendar, tu remplaces le code par celui-ci :

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Plage As Range
Dim BigestDate As Date

If Not Application.Intersect(Target, Range("B5:E14")) Is Nothing Then
UserForm2.Show

Set Plage = Me.Range("B5:E14")
BigestDate = Application.WorksheetFunction.Max(Plage)
Me.Range("B2") = CDate(BigestDate + 182)
End If

End Sub

Ce devrait te convenir...

Bonne Soirée et Week End
@+Thierry
 
B

brigitte (une autre)

Guest
Désole Thierry ce n'ai pas votre Brigitte preferée d'XLD
Merci pour la reponse ultra rapide mais j'ai oubliée 2 conditions
-prendre les cellules en compte si il n'y a rien de saisie a leurs droite
-si dans la colonne F4 ily a "archiver" ne pas prendre en compte la ligne correspondante
ca se complique un peu pour moi mais pour vous thierry c'est si simple ......

merci et a bientot
 

Pièces jointes

  • recupdate6mois.zip
    10.8 KB · Affichages: 11
  • recupdate6mois.zip
    10.8 KB · Affichages: 13
  • recupdate6mois.zip
    10.8 KB · Affichages: 12
@

@+Thierry

Guest
Re Brigitte, le Forum

Ah oui, sacrée info complémentaire que tu donnes là !!!! lol (faut tout reprendre !!! lol)

Bon voici le code complètement refait.... Au fait, quand tu recopies mes codes, n'oublies pas les Déclaration de Variables ... Car j'ai écrit :
Dim Plage As Range
Dim BigestDate As Date

et pas :
Dim Plage
Dim BigestDate

Tu pourrais avoir des surprises sinon....

Bon alors voilà ton code prèt à l'emploi :

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Plage As Range, Cell As Range
Dim TabPlage() As Date
Dim x As Integer, i As Integer, ii As Integer, j As Integer
Dim Tmp1 As Date, Tmp2 As Date
Dim BigestDate As Date

If Not Application.Intersect(Target, Range("B5:E14")) Is Nothing Then
UserForm2.Show


Set Plage = Me.Range("B5:E14")

   For Each Cell In Plage
      If Cell.Offset(0, 1) = "" Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If UCase(Cells(Cell.Row, 6)) <> "ARCHIVER" Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReDim Preserve TabPlage(x)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TabPlage(x) = CDate(Cell)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = x + 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;Next

&nbsp;&nbsp;&nbsp;For i = LBound(TabPlage) To UBound(TabPlage)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;For j = LBound(TabPlage) + ii To UBound(TabPlage)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If TabPlage(i) > TabPlage(j) Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tmp1 = TabPlage(j): Tmp2 = TabPlage(j)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TabPlage(j) = TabPlage(i): TabPlage(j) = TabPlage(i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TabPlage(i) = Tmp1: TabPlage(i) = Tmp2
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next j
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ii = ii + 1
&nbsp;&nbsp;&nbsp;Next i

BigestDate = TabPlage(UBound(TabPlage))
Me.Range("B2") = CDate(BigestDate + 182)
End If

End Sub

Explications
* If Cell.Offset(0, 1) = "" Then == Signifie ==> prendre les cellules en compte si il n'y a rien de saisie à leur droite
* If UCase(Cells(Cell.Row, 6)) <> "ARCHIVER" Then == Signifie ==> si dans la colonne F4 il y a "archiver" ne pas prendre en compte la ligne correspondante...

Bonne soirée même si tu n'es pas notre brigitte préférée

@+Thierry
 
B

Brigitte

Guest
Bonsoir à tous, Coucou Thierry,


Et bien oui Thierry, une Brigitte peut en cacher une autre... Tu penses bien, moi et le VBA... de l'utopie, encore que Jmps m'initie tout doucement aux délices des Userforms...

Alors je profite du fait de te croiser ici pour te remercier pour celui que tu avais fait pour mon anniversaire. Je t'ai envoyé un mot dans ta Bal mais comme un boomerang, il m'est revenu : boîte saturée ; tu m'étonnes, notre Thierry doit être le destinataire le plus fourni de la terre.

Bon alors Thierry, tu profites de tes 31 jours de congés pour faire le tour de France et de Belgique et tu passes par Nantes ? Quelle date ? Je t'attends avec impatience...

Bisous et bonne soirée à tous.

PS : Pardon brigitte d'avoir "squatté" ton post.



(pour ceux qui savent pas : gif offert par notre Thierry dans un de ses élans spontanés de gentillesse).
 
B

brigitte (une autre)

Guest
MERCI Thierry pour tout ce travail
Ton code est parfait ,mais j'ai petit soucis je me suis mal exprimee,je souhaite recuperée la date la plus ancienne du tableau a condition que
-prendre les cellules en compte si il n'y a rien de saisie a leurs droite
-si dans la colonne F4 ily a "archiver" ne pas prendre en compte la ligne correspondante
c'est a dire si je saisie en B7 1/12/2004 recupérer par exemple en B6(date la plus ancienne du tableau) 10/06/2003 et y ajouter +182

toutes les brigitte ne sont pas si douees brigitte XLD
MERCI ET BONNE SOIREE
 

Pièces jointes

  • recupdate6mois.zip
    12 KB · Affichages: 13
  • recupdate6mois.zip
    12 KB · Affichages: 15
  • recupdate6mois.zip
    12 KB · Affichages: 15
M

MARIE

Guest
bonjour le forum ,brigitte et thierry
j'ai eu un probleme similaire a traiter , mais sans les conditions imposees et mon code ne marche pas sur ton exemple
si j'ai bien compris suite a une saisie tu veux recuperer la date la plus ancienne du tableau quelque soit les lignes(pour lui ajouter +182)et quelque soit la cellule saisie a condition de respecter les 2 conditions suivantes
-prendre les cellules en compte si il n'y a rien de saisie a leurs droite
-si dans la colonne F4 il y a "archiver" ne pas prendre en compte la ligne correspondante

a mon avis c'est vraiment costaut

bonne journee a tous
 
@

@+Thierry

Guest
=> DEMO UserForm de Recherche > Date sur Tableau avec exclusions et majoration

Bonjour Brigitte & Brigitte, Bonjour Marie, (que des "Fifilles" ici !!

Bonjour le Forum,

Bon alors je ne sais toujours pas si j'ai compris quelque chose, mais de toute manière c'est un bon exercice un Dimanche de jouer avec les Dates dans les UserForms... C'est un peu "costaud" comme dit Marie, mais on peut faire pas mal de trucs avec VBA...

Voici une démo complète qui fait excatement ce que tu as demandé Brigitte, en prime il y a un UserForm de Statistiques qui te montrera ce qui a été pris en compte de ce qui ne l'a pas été et cecui en indiquant les raisons :

Cas d'Exclusions :
Soit il y a la mention "Archiver" en colonne "F"
Soit la cellule immédiatement à droite de la selection n'est pas vide..

Pour ta phrase "c'est à dire si je saisie en B7 1/12/2004 recupérer par exemple en B6(date la plus ancienne du tableau) 10/06/2003 et y ajouter +182" je ne comprends pas trop bien (lol)...

Tout ce que je sais c'est que je vais faire écrire par VBA le résultat (date la plus grande non exclue par les règles ci-dessus, majorée de 182 jours), en cellule "B2"...

Bon Dimanche à toutes (et à tous)
@+Thierry
 

Pièces jointes

  • XLD-Bigest-Date-Tableau-Condition-V01.zip
    19 KB · Affichages: 13
B

brigitte

Guest
bonsoir thierry
Un grand merci pour ta collaboration
ton code pour mon application avec user form stat me comble,c'est exactement ce que je souhaitait mais il me semble que le code ne prend pas en compte la date la plus ancienne ,il prend la plus recente ,tu as ecrit dans le post precedent
"(date la plus grande non exclue par les règles ci-dessus, majorée de 182 jours), en cellule "B2"..."" est ce la date la plus ancienne ou plus recente

je sais que tu vas surement par commencer d'en avoir marre de moi c'est pourquoi je t'envoi un gros bissous
brigitte
 
B

brigitte

Guest
re bonsoir Thierry

Comme je ne suis pas resté a rien faire en attendant les réponses,j'ai trouvé une solution un peu bricolée(ca rien a voir avec tes superbes code) ,j'aurais aimé faire une boucle pour recupérer la valeur de chaque ligne mais je n'ai pas reussi

a bientot et merci encore
 

Pièces jointes

  • recupdate6mois.zip
    14.4 KB · Affichages: 14
  • recupdate6mois.zip
    14.4 KB · Affichages: 12
  • recupdate6mois.zip
    14.4 KB · Affichages: 13
@

@+Thierry

Guest
Re: DEMO UserForm de Recherche < Date sur Tableau avec exclusions et majoration

Re Bonjour Brigitte, Brigitte & Co, Marie, le Forum

Merci pour le gros bisou !

Arrrrf enfer et damnation, je me suis mis en tête la date la plus grande dès le départ et PAS la date la plus ancienne ! lol (pourtant c'est ce que tu avais écrit dans ton premier post !!! (comme quoi les informaticiens volent parfois à dix miles au dessus de la réalité lol)

Bon alors que faire............. lol

Heureusement lorsque l'on programme depuis pas mal d'heures de vols on peut facilement retomber sur ses pattes :

Tu vois en bas du Private Module "USFStats" vers la fin ?

Oui oui là où il y ceci :
DateFound = TabPlage(0, UBound(TabPlage, 2))
LFound = TabPlage(1, UBound(TabPlage, 2))
CFound = TabPlage(2, UBound(TabPlage, 2))
DateCalculated = CDate(DateFound + 182)

BadDateFound = TabBad(0, UBound(TabBad, 2))
BadLFound = TabBad(1, UBound(TabBad, 2))
BadCFound = TabBad(2, UBound(TabBad, 2))
BadReason = TabBad(3, UBound(TabBad, 2))


Tu as bien repéré ?

.... te plantes surtout pas, sinon plus rien ne marchera !!! lol

OK alors tu remplaces pûrement et simplement tout ce qu'il y a au dessus par ceci :

&nbsp;&nbsp;&nbsp;For i = 0 To UBound(TabPlage, 2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If TabPlage(0, i) <> 0 Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateFound = TabPlage(0, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LFound = TabPlage(1, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CFound = TabPlage(2, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateCalculated = CDate(DateFound + 182)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;Next


&nbsp;&nbsp;&nbsp;For i = 0 To UBound(TabBad, 2)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If TabBad(0, i) <> 0 Then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BadDateFound = TabBad(0, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BadLFound = TabBad(1, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BadCFound = TabBad(2, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BadReason = TabBad(3, i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Exit For
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If
&nbsp;&nbsp;&nbsp;Next

Et hop !!! c'est la date la plus petite (ancienne) qui sera prise en compte et non plus la plus grande.

Si tu as un problème je peux poster la version II mais là je dois sortir faire des achats de Noël...

Bonne Soirée et encore désolé pour avoir compris le problème à l'envers !
@+Thierry
 
B

brigitte

Guest
merci Thierry
on arrive a ce comprendre enfin,je pense qu'il y a un petit bug a moins que j'ai mal recopie le code
je pense que le code prend en compte la valaeur 0 des cellules vides parce que je me retrouve avec la date la plus ancienne 1/01/1900

merci et joyeux noel
BRIGITTE
 
@

@+Thierry

Guest
Re: DEMO UserForm de Recherche < Date sur Tableau avec exclusions et majoration

Bonjour toutes les Brigittes, Marie, le Forum

C'est bizarre, je ne vois pas où se situerait un problème.

Voici le version II telle qu'elle fonctionne chez moi...

Bonne Journée
@+Thierry
 

Pièces jointes

  • XLD-Bigest-Date-Tableau-Condition-V02.zip
    22.5 KB · Affichages: 17
B

brigitte

Guest
BONJOUR THIERRY

J'ai essaye ta version 2 ,j'ai clique enB11 il m'affiche 1/12/1900 comme date la plus ancienne
ci joint une image de l'userform
desolé pour tout ce tracas que je te cause
brigitte
 

Pièces jointes

  • Classeur1.zip
    19.8 KB · Affichages: 29
  • Classeur1.zip
    19.8 KB · Affichages: 24
  • Classeur1.zip
    19.8 KB · Affichages: 25
@

@+Thierry

Guest
Re: DEMO UserForm de Recherche < Date sur Tableau avec exclusions et majoration

Bonjour Brigitte, Brigitte, Marie, le Forum


Je suis Mort de Rire !!!!

Regarde la cellule E6 n'est-il donc pas marqué 01/12/1900... lol et cette cellule n'est pas exclue par les règles, puisque pas de mention "Archiver" en colonne "F" et la cellule immédiatement à droite de cette cellule E6 est bien vide... Donc c'est bien la plus ancienne date valide...

Donc merci d'avoir capturé l'image de mon UserForm qui fonctionne !!

Ou alors je mange mon écran TFT entre deux morceaux de pain à midi

Bon Appétit
@+Thierry
 

Discussions similaires

Réponses
8
Affichages
800

Statistiques des forums

Discussions
312 345
Messages
2 087 473
Membres
103 553
dernier inscrit
jhnm