OVH Cloud OVH Cloud

Chercher une date

10 réponses
Avatar
apt
Bonjour,

Comment chercher la date du jour dans une colonne de dates et
r=E9cup=E9rer tout les donn=E9es de cette ligne au cas ou elle y, sinon on
insere la date du jour =E0 son emplacement convenable.

Merci.

10 réponses

Avatar
Daniel
Bonjour.
Ceci (je n'ai pas compris où insérer la date) :

Sub test()
Dim ctr
ctr = Application.Match(Date * 1, Range("A:A"), 0)
If IsNumeric(ctr) Then
Range("A1")(ctr, 1).EntireRow.Copy
'coller où tu veux
Else
'insérer à un emplacement convenable
End If
End Sub

Cordialement.
Daniel
"apt" a écrit dans le message de news:



Bonjour,

Comment chercher la date du jour dans une colonne de dates et
récupérer tout les données de cette ligne au cas ou elle y, sinon on
insere la date du jour à son emplacement convenable.

Merci.
Avatar
apt
mais comment recuperer les donnees de cette ligne trouvé ?

et puis :

L'insertion de date se fait au cas ou il un saut de date ou une date a
été intentionnellement effacer.

par exemple :

Dates
01/04/06
02/04/06
04/04/06

quand on fait notre test on ne trarouvera rien.

alors on doit inserer la date du jour pour avoir un resultat comme suit
:

Dates
01/04/06
02/04/06
03/04/06
04/04/06
Avatar
Daniel
mais comment recuperer les donnees de cette ligne trouvé ?


Dans la macro, j'ai fait un copy de la ligne. A toi de coller la ligne où tu
veux
et puis :

L'insertion de date se fait au cas ou il un saut de date ou une date a
été intentionnellement effacer.


Sub test()
Dim ctr
ctr = Application.Match(Date * 1, Range("A:A"), 0)
If IsNumeric(ctr) Then
Range("A1")(ctr, 1).EntireRow.Copy
'coller où tu veux
Else
ctr = Application.Match(Date * 1, Range("A:A"), 1)
Range("A1")(ctr + 1, 1).Insert xlShiftDown
Range("A1")(ctr + 1, 1).Value = Date
End If
End Sub

Daniel

Avatar
apt
Par exemple si j'ai cela :

13 28-03-06
13 29-03-06
13 30-03-06
13 31-03-06
14 01-04-06
14 02-04-06
14 1
14 04-04-06
14 05-04-06
14 06-04-06
14 07-04-06
15 08-04-06
15 09-04-06
15 10-04-06

Apres recherche et insertion du code :

Private Sub testdate()
Dim ctr
Dim NSem As Integer

ctr = Application.Match(Date * 1, Range("B:B"), 0)
If IsNumeric(ctr) Then

NSem = Range("A1")(ctr, 1).Value

Range("D1")(ctr, 5).Value = NSem
Else
ctr = Application.Match(Date * 1, Range("B:B"), 1)
Range("B2")(ctr + 1, 1).Insert xlShiftDown
Range("B2")(ctr + 1, 1).Value = Date
End If
End Sub


j'aurais ceci :


13 28-03-06
13 29-03-06
13 30-03-06
13 31-03-06
14 01-04-06
14 02-04-06
14 1
14 04-04-06
14 03-04-06
14 05-04-06
14 06-04-06
15 07-04-06
15 08-04-06
15 09-04-06
15 10-04-06

On voit clairement que la date du jour a été inserée aprés le
04-04-06 et non pas aprés le 02-04-06, ... pourquoi?

enfin j'aimerais comprendre les lignes suivantes :

=> ctr = Application.Match(Date * 1, Range("B:B"), 0)
=> Range("B2")(ctr + 1, 1).Value = Date
=> ctr est de quel type ?
=> Si je declare ctr : Dim ctr As Integer ce me donne une erreur ... ??

Merci Daniel.
Avatar
Jacquouille
Bonsoir
Je ne comprends rien au Grand Breton, mais ctr n'est-il pas une variable
date?
Auquel cas, peut-on qualifier une var date en "integer" ?
Bonne chance
--
Bien amicalmement,
Vivement conseillés:
http://www.excelabo.net
http://jacxl.free.fr/mpfe/trombino.html
http://dj.joss.free.fr/netiquet.htm
http://frederic.sigonneau.free.fr/

Jacquouille.

"apt" a écrit dans le message de news:

Par exemple si j'ai cela :

13 28-03-06
13 29-03-06
13 30-03-06
13 31-03-06
14 01-04-06
14 02-04-06
14 1
14 04-04-06
14 05-04-06
14 06-04-06
14 07-04-06
15 08-04-06
15 09-04-06
15 10-04-06

Apres recherche et insertion du code :

Private Sub testdate()
Dim ctr
Dim NSem As Integer

ctr = Application.Match(Date * 1, Range("B:B"), 0)
If IsNumeric(ctr) Then

NSem = Range("A1")(ctr, 1).Value

Range("D1")(ctr, 5).Value = NSem
Else
ctr = Application.Match(Date * 1, Range("B:B"), 1)
Range("B2")(ctr + 1, 1).Insert xlShiftDown
Range("B2")(ctr + 1, 1).Value = Date
End If
End Sub


j'aurais ceci :


13 28-03-06
13 29-03-06
13 30-03-06
13 31-03-06
14 01-04-06
14 02-04-06
14 1
14 04-04-06
14 03-04-06
14 05-04-06
14 06-04-06
15 07-04-06
15 08-04-06
15 09-04-06
15 10-04-06

On voit clairement que la date du jour a été inserée aprés le
04-04-06 et non pas aprés le 02-04-06, ... pourquoi?

enfin j'aimerais comprendre les lignes suivantes :

=> ctr = Application.Match(Date * 1, Range("B:B"), 0)
=> Range("B2")(ctr + 1, 1).Value = Date
=> ctr est de quel type ?
=> Si je declare ctr : Dim ctr As Integer ce me donne une erreur ... ??

Merci Daniel.
Avatar
Daniel
"apt" a écrit dans le message de news:

Par exemple si j'ai cela :

13 28-03-06
13 29-03-06
13 30-03-06
13 31-03-06
14 01-04-06
14 02-04-06
14 1
14 04-04-06
14 05-04-06
14 06-04-06
14 07-04-06
15 08-04-06
15 09-04-06
15 10-04-06

Apres recherche et insertion du code :

Private Sub testdate()
Dim ctr
Dim NSem As Integer

ctr = Application.Match(Date * 1, Range("B:B"), 0)
If IsNumeric(ctr) Then

NSem = Range("A1")(ctr, 1).Value

Range("D1")(ctr, 5).Value = NSem
Else
ctr = Application.Match(Date * 1, Range("B:B"), 1)
Range("B2")(ctr + 1, 1).Insert xlShiftDown
Range("B2")(ctr + 1, 1).Value = Date
End If
End Sub


j'aurais ceci :


13 28-03-06
13 29-03-06
13 30-03-06
13 31-03-06
14 01-04-06
14 02-04-06
14 1
14 04-04-06
14 03-04-06
14 05-04-06
14 06-04-06
15 07-04-06
15 08-04-06
15 09-04-06
15 10-04-06

On voit clairement que la date du jour a été inserée aprés le
04-04-06 et non pas aprés le 02-04-06, ... pourquoi?

*******************
Parce que tu as changé l'énoncé :
on avait, dans ton second post :

01/04/06
02/04/06
04/04/06

c'est à dire une séquence dans laquelle MANQUE la date du jour.
on a maintenant une valeur quelconque A LA PLACE de la date du jour. Le code
suivant répond au cas exposé dans ce post, mais ne répond plus au précédent.
Il faut savoir comment sont organisées tes données.

Sub test()
Dim ctr
ctr = Application.Match(Date * 1, Range("A:A"), 0)
If IsNumeric(ctr) Then
Range("A1")(ctr, 1).EntireRow.Copy
'coller où tu veux
Else
ctr = Application.Match(Date * 1, Range("A:A"), 2)
Range("A1")(ctr, 1).Value = Date
End If
End Sub

*******************

enfin j'aimerais comprendre les lignes suivantes :

=> ctr = Application.Match(Date * 1, Range("B:B"), 0)

application.match correspond à la fonction EQUIV (soit une recherche de la
date du jour ("Date" représente par définition la date système)
(oublie poour le moment le "*1" qui fait que ça marche) et renvoie dans la
variable "ctr" le numéro de ligne si la recherche est fructueuse; dans le
cas contraire, ctr reçoit un code genre "erreur 2002".

=> Range("B2")(ctr + 1, 1).Value = Date
Là c'est un peu du vice : Range("B2")(2,2) est équivalent à
Range("B2").Offset(1,1) c'est à dire un décalage d'une ligne et d'une
colonne par rapport à B2 (soit C3). "Date" représente par définition la date
système. Donc Range("B2")(ctr + 1, 1).Value prend la valeur de la date
système.

=> ctr est de quel type ?
De type Variant puisque comme je te l'ai expliqué plus haut, il est tantôt
numérique tantôt de valeur String.

=> Si je declare ctr : Dim ctr As Integer ce me donne une erreur ... ??
Oui en cas d'échec de la recherche (fonction Match), celle-ci renvoie du
texte ( et tu peux le voir puisqu'on teste si elle est numérique : If
IsNumeric(ctr)...). Tu peux le déclarer:
Dim ctr as Variant ou dim ctr (variant par défaut).

Daniel
Avatar
apt
Je m'excuse Daniel.

Pour ton code, il faut inserer une ligne vide, sinon on ecrase la
valeur de la cellule courante. (premier code avec modification du
deuxieme code)

ctr = Application.Match(Date * 1, Range("B:B"), 2)
Range("B2")(ctr, 1).Insert xlShiftDown
Range("B2")(ctr, 1).Value = Date

Bon, ça fonctionne.

Je m'excuse une autre fois.

A l'aide du n'une valeur recuperer, j'aimerais pouvoir determiner la
plage dans laquelle se trouve la date du jour.

j'ai fait ce code pour ça, mais ca ne fonctionne pas (il me faut une
petite modificztion svp).

Bon, voila les données :

N° Sem Date
13 30-03-06
13 31-03-06
14 01-04-06
14 02-04-06
14 03-04-06
14 04-04-06
14 05-04-06
14 06-04-06
14 07-04-06
15 08-04-06
15 09-04-06

'---------------------------------------
Public Nsem As Integer

Private Sub TrouveDate()
Dim ctr

ctr = Application.Match(Date * 1, Range("B:B"), 0)
If IsNumeric(ctr) Then
Range("D1")(ctr, 2).Value = "N° de ligne est = " & ctr
Else
ctr = Application.Match(Date * 1, Range("B:B"), 2)
Range("B2")(ctr, 1).Insert xlShiftDown
Range("B2")(ctr, 1).Value = Date
Range("D1")(ctr, 2).Value = "N° de ligne est = " & ctr
End If
Nsem = Range("A1")(ctr, 1).Value
Range("D1")(ctr + 1, 2).Value = "N° Semaine est = " & Nsem
TrouvePlage (Nsem)
End Sub

'--------------------------------

Private Sub TrouvePlage(Val As Integer)
Dim Debut, Fin, vFin, ComptPlg, Lig
Lig = Application.Match(Val * 1, Range("A:A"), 0)
If IsNumeric(ctr) Then
'Valeur de la 2eme Col qui corresponde
Debut = Range("B2")(Lig, 1).Value
'et puis on doit continuer pour trouver la derniere occurence
ComptPlg = 1
While IsNumeric(vFin)
vFin = Application.Match(Val * 1, Range("A:A"), ComptPlg)
ComptPlg = ComptPlg + 1
Wend
Fin = Range("B2")(vFin, 1).Value
End If
MsgBox "La valeur " & Val & " se trouve dans la plage du " & Debut &
" au " & Fin
End Sub
'-------------------------------------

Resultat qui doit etre obtenue :

La valeur 14 se trouve dans la plage du 01-04-06 au 07-04-06.

Merci.
Avatar
apt
Pas de reponses SVP ?
Avatar
Clément Marcotte
Y é parti 2 jours.,

"apt" a écrit dans le message de news:

Pas de reponses SVP ?



Avatar
apt
C'est Daniel qui est parti, ou toi Clément ?