OVH Cloud OVH Cloud

Petit soucis en vba

7 réponses
Avatar
valenza
Bonjour =E0 tous

j'ai un user form avec une liste d=E9roulante
selon mon chois ds ma liste mes champs texte r=E9cup=E8rent des donn=E9es
via une recherche type
Me.Lst1 =3D ActiveCell.Offset(0, 1)
Me.Formation =3D ActiveCell.Offset(0, 2)
Me.Lst2 =3D ActiveCell.Offset(0, 3)
etc...... jusque l=E0 RAS

j'ai deux champs dates debut et fin et un troisi=E8me (lignes) qui me
calcule le nombre de mois entre les dates. Mes mois ne sont pas tout a
fait juste. je souhaiterais :

2 dates ds le mois en cours =3D mois en cours
de janvier =E0 f=E9vrier =3D 2 mois
une ann=E9e =3D 12 mois etc

quand je saisis par exemple : date1 : 24/08/06 et date 2 : 28/01/07
j'ai comme r=E9sultat 5 mois au lieu de 6

voici mon code merci d'avance

If (CStr(CDate(Fin.Value) - CDate(Debut.Value))) <=3D 31 Then
Lignes.Value =3D 1
Else
Lignes.Value =3D Round((((CStr(CDate(Fin.Value) -
CDate(Debut.Value))) / 31.25)), 0)
End If

7 réponses

Avatar
Poulpor
Bonjour Valenza,

je me pose des questions sur l'algorithme :

- ou tu comptes les jours et tu évalues les mois (il y a 365 / 12 jours en
moyenne dans un mois)

mon algorithme serait alors :
Lignes.Value= (dateFin - Date Début+1)/365*12

- ou tu comptes le décalage de mois (oi tu considères que tout mois commencé
est comptabilisé

mon algorithme serait alors plutôt :
Si année(datedebut)=année(datefin) et mois(datedebut)=mois(datefin) alors
Lignes.Value = 1
sinon
Lignes.value=année(datefin)*12+mois(datefin)-année(datedebut)*12-mois(datedébut) +1
FinSi

D'ailleurs, je me pose une question :
du 31/01/06 au 01/02/06, il y a deux mois d'après ta méthode (de janvier à
février) pour deux jours réels.

poulpor






Bonjour à tous

j'ai un user form avec une liste déroulante
selon mon chois ds ma liste mes champs texte récupèrent des données
via une recherche type
Me.Lst1 = ActiveCell.Offset(0, 1)
Me.Formation = ActiveCell.Offset(0, 2)
Me.Lst2 = ActiveCell.Offset(0, 3)
etc...... jusque là RAS

j'ai deux champs dates debut et fin et un troisième (lignes) qui me
calcule le nombre de mois entre les dates. Mes mois ne sont pas tout a
fait juste. je souhaiterais :

2 dates ds le mois en cours = mois en cours
de janvier à février = 2 mois
une année = 12 mois etc

quand je saisis par exemple : date1 : 24/08/06 et date 2 : 28/01/07
j'ai comme résultat 5 mois au lieu de 6

voici mon code merci d'avance

If (CStr(CDate(Fin.Value) - CDate(Debut.Value))) <= 31 Then
Lignes.Value = 1
Else
Lignes.Value = Round((((CStr(CDate(Fin.Value) -
CDate(Debut.Value))) / 31.25)), 0)
End If




Avatar
valenza
Bonjour et merci pour la réponse

effectivement si j'ai un début le 15/01 et une fin le 01/02 je dois
comter deux mois
car je raisonne en présence mensuelle

pour ton dernier algo est ce que je dois mettre
if -------- and ------- then
alors
else
alors

merci

BV






Bonjour Valenza,

je me pose des questions sur l'algorithme :

- ou tu comptes les jours et tu évalues les mois (il y a 365 / 12 jours en
moyenne dans un mois)

mon algorithme serait alors :
Lignes.Value= (dateFin - Date Début+1)/365*12

- ou tu comptes le décalage de mois (oi tu considères que tout mois c ommencé
est comptabilisé

mon algorithme serait alors plutôt :
Si année(datedebut)=année(datefin) et mois(datedebut)=mois(datefi n) alors
Lignes.Value = 1
sinon
Lignes.value=année(datefin)*12+mois(datefin)-année(datedebut)*12-mo is(datedébut) +1
FinSi

D'ailleurs, je me pose une question :
du 31/01/06 au 01/02/06, il y a deux mois d'après ta méthode (de janv ier à
février) pour deux jours réels.

poulpor






Bonjour à tous

j'ai un user form avec une liste déroulante
selon mon chois ds ma liste mes champs texte récupèrent des donné es
via une recherche type
Me.Lst1 = ActiveCell.Offset(0, 1)
Me.Formation = ActiveCell.Offset(0, 2)
Me.Lst2 = ActiveCell.Offset(0, 3)
etc...... jusque là RAS

j'ai deux champs dates debut et fin et un troisième (lignes) qui me
calcule le nombre de mois entre les dates. Mes mois ne sont pas tout a
fait juste. je souhaiterais :

2 dates ds le mois en cours = mois en cours
de janvier à février = 2 mois
une année = 12 mois etc

quand je saisis par exemple : date1 : 24/08/06 et date 2 : 28/01/07
j'ai comme résultat 5 mois au lieu de 6

voici mon code merci d'avance

If (CStr(CDate(Fin.Value) - CDate(Debut.Value))) <= 31 Then
Lignes.Value = 1
Else
Lignes.Value = Round((((CStr(CDate(Fin.Value) -
CDate(Debut.Value))) / 31.25)), 0)
End If






Avatar
Poulpor
oui, c'est cela (ainsi que mois par month et année par year). Je suis parti
sur l'algo plutôt que sur le code exact, mais j'aurais en effet du aller au
bout de ma démarche.

Bon courage.

Poulpor




Bonjour et merci pour la réponse

effectivement si j'ai un début le 15/01 et une fin le 01/02 je dois
comter deux mois
car je raisonne en présence mensuelle

pour ton dernier algo est ce que je dois mettre
if -------- and ------- then
alors
else
alors

merci

BV






Bonjour Valenza,

je me pose des questions sur l'algorithme :

- ou tu comptes les jours et tu évalues les mois (il y a 365 / 12 jours en
moyenne dans un mois)

mon algorithme serait alors :
Lignes.Value= (dateFin - Date Début+1)/365*12

- ou tu comptes le décalage de mois (oi tu considères que tout mois commencé
est comptabilisé

mon algorithme serait alors plutôt :
Si année(datedebut)=année(datefin) et mois(datedebut)=mois(datefin) alors
Lignes.Value = 1
sinon
Lignes.value=année(datefin)*12+mois(datefin)-année(datedebut)*12-mois(datedébut) +1
FinSi

D'ailleurs, je me pose une question :
du 31/01/06 au 01/02/06, il y a deux mois d'après ta méthode (de janvier à
février) pour deux jours réels.

poulpor






Bonjour à tous

j'ai un user form avec une liste déroulante
selon mon chois ds ma liste mes champs texte récupèrent des données
via une recherche type
Me.Lst1 = ActiveCell.Offset(0, 1)
Me.Formation = ActiveCell.Offset(0, 2)
Me.Lst2 = ActiveCell.Offset(0, 3)
etc...... jusque là RAS

j'ai deux champs dates debut et fin et un troisième (lignes) qui me
calcule le nombre de mois entre les dates. Mes mois ne sont pas tout a
fait juste. je souhaiterais :

2 dates ds le mois en cours = mois en cours
de janvier à février = 2 mois
une année = 12 mois etc

quand je saisis par exemple : date1 : 24/08/06 et date 2 : 28/01/07
j'ai comme résultat 5 mois au lieu de 6

voici mon code merci d'avance

If (CStr(CDate(Fin.Value) - CDate(Debut.Value))) <= 31 Then
Lignes.Value = 1
Else
Lignes.Value = Round((((CStr(CDate(Fin.Value) -
CDate(Debut.Value))) / 31.25)), 0)
End If










Avatar
valenza
genial j'y suis arrivé !

par contre si je peux abuser encore

je voudrai faire toujours en vba un truc du style :
gauche(A1;5)&droite(B1;4)&annee(C1)&mois(D1)&"-"&E1-F1

ds une feuille pas de pbm

en vba .....

me.code = LEFT(me.nom;5 ??????? ....year(me.....

là j'avoue que je rame





oui, c'est cela (ainsi que mois par month et année par year). Je suis p arti
sur l'algo plutôt que sur le code exact, mais j'aurais en effet du alle r au
bout de ma démarche.

Bon courage.

Poulpor




Bonjour et merci pour la réponse

effectivement si j'ai un début le 15/01 et une fin le 01/02 je dois
comter deux mois
car je raisonne en présence mensuelle

pour ton dernier algo est ce que je dois mettre
if -------- and ------- then
alors
else
alors

merci

BV






Bonjour Valenza,

je me pose des questions sur l'algorithme :

- ou tu comptes les jours et tu évalues les mois (il y a 365 / 12 j ours en
moyenne dans un mois)

mon algorithme serait alors :
Lignes.Value= (dateFin - Date Début+1)/365*12

- ou tu comptes le décalage de mois (oi tu considères que tout mo is commencé
est comptabilisé

mon algorithme serait alors plutôt :
Si année(datedebut)=année(datefin) et mois(datedebut)=mois(da tefin) alors
Lignes.Value = 1
sinon
Lignes.value=année(datefin)*12+mois(datefin)-année(datedebut)*1 2-mois(datedébut) +1
FinSi

D'ailleurs, je me pose une question :
du 31/01/06 au 01/02/06, il y a deux mois d'après ta méthode (de janvier à
février) pour deux jours réels.

poulpor






Bonjour à tous

j'ai un user form avec une liste déroulante
selon mon chois ds ma liste mes champs texte récupèrent des don nées
via une recherche type
Me.Lst1 = ActiveCell.Offset(0, 1)
Me.Formation = ActiveCell.Offset(0, 2)
Me.Lst2 = ActiveCell.Offset(0, 3)
etc...... jusque là RAS

j'ai deux champs dates debut et fin et un troisième (lignes) qui me
calcule le nombre de mois entre les dates. Mes mois ne sont pas tou t a
fait juste. je souhaiterais :

2 dates ds le mois en cours = mois en cours
de janvier à février = 2 mois
une année = 12 mois etc

quand je saisis par exemple : date1 : 24/08/06 et date 2 : 28/01/07
j'ai comme résultat 5 mois au lieu de 6

voici mon code merci d'avance

If (CStr(CDate(Fin.Value) - CDate(Debut.Value))) <= 31 Then
Lignes.Value = 1
Else
Lignes.Value = Round((((CStr(CDate(Fin.Value) -
CDate(Debut.Value))) / 31.25)), 0)
End If












Avatar
Poulpor
Re,

J'espère avoir compris :

bil = Left(ActiveSheet.Cells(5, 1).Text, 5) & Right(ActiveSheet.Cells(2,
4).Text, 4) & Year(ActiveSheet.Cells(4, 1).Value) & "-" &
ActiveSheet.Cells(5, 1).Value - ActiveSheet.Cells(6, 1).Value

Activesheet peut être remplacé par sheets(1) s'il s'agit de la première
feuille.

Bonne soirée.

Poulpor



genial j'y suis arrivé !

par contre si je peux abuser encore

je voudrai faire toujours en vba un truc du style :
gauche(A1;5)&droite(B1;4)&annee(C1)&mois(D1)&"-"&E1-F1

ds une feuille pas de pbm

en vba .....

me.code = LEFT(me.nom;5 ??????? ....year(me.....

là j'avoue que je rame





oui, c'est cela (ainsi que mois par month et année par year). Je suis parti
sur l'algo plutôt que sur le code exact, mais j'aurais en effet du aller au
bout de ma démarche.

Bon courage.

Poulpor




Bonjour et merci pour la réponse

effectivement si j'ai un début le 15/01 et une fin le 01/02 je dois
comter deux mois
car je raisonne en présence mensuelle

pour ton dernier algo est ce que je dois mettre
if -------- and ------- then
alors
else
alors

merci

BV






Bonjour Valenza,

je me pose des questions sur l'algorithme :

- ou tu comptes les jours et tu évalues les mois (il y a 365 / 12 jours en
moyenne dans un mois)

mon algorithme serait alors :
Lignes.Value= (dateFin - Date Début+1)/365*12

- ou tu comptes le décalage de mois (oi tu considères que tout mois commencé
est comptabilisé

mon algorithme serait alors plutôt :
Si année(datedebut)=année(datefin) et mois(datedebut)=mois(datefin) alors
Lignes.Value = 1
sinon
Lignes.value=année(datefin)*12+mois(datefin)-année(datedebut)*12-mois(datedébut) +1
FinSi

D'ailleurs, je me pose une question :
du 31/01/06 au 01/02/06, il y a deux mois d'après ta méthode (de janvier à
février) pour deux jours réels.

poulpor






Bonjour à tous

j'ai un user form avec une liste déroulante
selon mon chois ds ma liste mes champs texte récupèrent des données
via une recherche type
Me.Lst1 = ActiveCell.Offset(0, 1)
Me.Formation = ActiveCell.Offset(0, 2)
Me.Lst2 = ActiveCell.Offset(0, 3)
etc...... jusque là RAS

j'ai deux champs dates debut et fin et un troisième (lignes) qui me
calcule le nombre de mois entre les dates. Mes mois ne sont pas tout a
fait juste. je souhaiterais :

2 dates ds le mois en cours = mois en cours
de janvier à février = 2 mois
une année = 12 mois etc

quand je saisis par exemple : date1 : 24/08/06 et date 2 : 28/01/07
j'ai comme résultat 5 mois au lieu de 6

voici mon code merci d'avance

If (CStr(CDate(Fin.Value) - CDate(Debut.Value))) <= 31 Then
Lignes.Value = 1
Else
Lignes.Value = Round((((CStr(CDate(Fin.Value) -
CDate(Debut.Value))) / 31.25)), 0)
End If
















Avatar
valenza
en fait c'est de mettre à la place d'activesheet les noms des champs
de mon formulaire
du style me.champ1 etc....

mais je vais essayer déjà avec ça

merci

BV



Re,

J'espère avoir compris :

bil = Left(ActiveSheet.Cells(5, 1).Text, 5) & Right(ActiveSheet.Cells(2,
4).Text, 4) & Year(ActiveSheet.Cells(4, 1).Value) & "-" &
ActiveSheet.Cells(5, 1).Value - ActiveSheet.Cells(6, 1).Value

Activesheet peut être remplacé par sheets(1) s'il s'agit de la premi ère
feuille.

Bonne soirée.

Poulpor



genial j'y suis arrivé !

par contre si je peux abuser encore

je voudrai faire toujours en vba un truc du style :
gauche(A1;5)&droite(B1;4)&annee(C1)&mois(D1)&"-"&E1-F1

ds une feuille pas de pbm

en vba .....

me.code = LEFT(me.nom;5 ??????? ....year(me.....

là j'avoue que je rame





oui, c'est cela (ainsi que mois par month et année par year). Je su is parti
sur l'algo plutôt que sur le code exact, mais j'aurais en effet du aller au
bout de ma démarche.

Bon courage.

Poulpor




Bonjour et merci pour la réponse

effectivement si j'ai un début le 15/01 et une fin le 01/02 je do is
comter deux mois
car je raisonne en présence mensuelle

pour ton dernier algo est ce que je dois mettre
if -------- and ------- then
alors
else
alors

merci

BV






Bonjour Valenza,

je me pose des questions sur l'algorithme :

- ou tu comptes les jours et tu évalues les mois (il y a 365 / 12 jours en
moyenne dans un mois)

mon algorithme serait alors :
Lignes.Value= (dateFin - Date Début+1)/365*12

- ou tu comptes le décalage de mois (oi tu considères que tou t mois commencé
est comptabilisé

mon algorithme serait alors plutôt :
Si année(datedebut)=année(datefin) et mois(datedebut)=moi s(datefin) alors
Lignes.Value = 1
sinon
Lignes.value=année(datefin)*12+mois(datefin)-année(datedebu t)*12-mois(datedébut) +1
FinSi

D'ailleurs, je me pose une question :
du 31/01/06 au 01/02/06, il y a deux mois d'après ta méthode (de janvier à
février) pour deux jours réels.

poulpor






Bonjour à tous

j'ai un user form avec une liste déroulante
selon mon chois ds ma liste mes champs texte récupèrent des données
via une recherche type
Me.Lst1 = ActiveCell.Offset(0, 1)
Me.Formation = ActiveCell.Offset(0, 2)
Me.Lst2 = ActiveCell.Offset(0, 3)
etc...... jusque là RAS

j'ai deux champs dates debut et fin et un troisième (lignes) qui me
calcule le nombre de mois entre les dates. Mes mois ne sont pas tout a
fait juste. je souhaiterais :

2 dates ds le mois en cours = mois en cours
de janvier à février = 2 mois
une année = 12 mois etc

quand je saisis par exemple : date1 : 24/08/06 et date 2 : 28/0 1/07
j'ai comme résultat 5 mois au lieu de 6

voici mon code merci d'avance

If (CStr(CDate(Fin.Value) - CDate(Debut.Value))) <= 31 Th en
Lignes.Value = 1
Else
Lignes.Value = Round((((CStr(CDate(Fin.Value) -
CDate(Debut.Value))) / 31.25)), 0)
End If


















Avatar
valenza
c'est exactement ca et ca marche !!!!
encore bravo poulpor et merci




en fait c'est de mettre à la place d'activesheet les noms des champs
de mon formulaire
du style me.champ1 etc....

mais je vais essayer déjà avec ça

merci

BV



Re,

J'espère avoir compris :

bil = Left(ActiveSheet.Cells(5, 1).Text, 5) & Right(ActiveSheet.Cells (2,
4).Text, 4) & Year(ActiveSheet.Cells(4, 1).Value) & "-" &
ActiveSheet.Cells(5, 1).Value - ActiveSheet.Cells(6, 1).Value

Activesheet peut être remplacé par sheets(1) s'il s'agit de la prem ière
feuille.

Bonne soirée.

Poulpor



genial j'y suis arrivé !

par contre si je peux abuser encore

je voudrai faire toujours en vba un truc du style :
gauche(A1;5)&droite(B1;4)&annee(C1)&mois(D1)&"-"&E1-F1

ds une feuille pas de pbm

en vba .....

me.code = LEFT(me.nom;5 ??????? ....year(me.....

là j'avoue que je rame





oui, c'est cela (ainsi que mois par month et année par year). Je suis parti
sur l'algo plutôt que sur le code exact, mais j'aurais en effet d u aller au
bout de ma démarche.

Bon courage.

Poulpor




Bonjour et merci pour la réponse

effectivement si j'ai un début le 15/01 et une fin le 01/02 je dois
comter deux mois
car je raisonne en présence mensuelle

pour ton dernier algo est ce que je dois mettre
if -------- and ------- then
alors
else
alors

merci

BV






Bonjour Valenza,

je me pose des questions sur l'algorithme :

- ou tu comptes les jours et tu évalues les mois (il y a 365 / 12 jours en
moyenne dans un mois)

mon algorithme serait alors :
Lignes.Value= (dateFin - Date Début+1)/365*12

- ou tu comptes le décalage de mois (oi tu considères que t out mois commencé
est comptabilisé

mon algorithme serait alors plutôt :
Si année(datedebut)=année(datefin) et mois(datedebut)=m ois(datefin) alors
Lignes.Value = 1
sinon
Lignes.value=année(datefin)*12+mois(datefin)-année(datede but)*12-mois(datedébut) +1
FinSi

D'ailleurs, je me pose une question :
du 31/01/06 au 01/02/06, il y a deux mois d'après ta méthod e (de janvier à
février) pour deux jours réels.

poulpor






Bonjour à tous

j'ai un user form avec une liste déroulante
selon mon chois ds ma liste mes champs texte récupèrent d es données
via une recherche type
Me.Lst1 = ActiveCell.Offset(0, 1)
Me.Formation = ActiveCell.Offset(0, 2)
Me.Lst2 = ActiveCell.Offset(0, 3)
etc...... jusque là RAS

j'ai deux champs dates debut et fin et un troisième (lignes ) qui me
calcule le nombre de mois entre les dates. Mes mois ne sont p as tout a
fait juste. je souhaiterais :

2 dates ds le mois en cours = mois en cours
de janvier à février = 2 mois
une année = 12 mois etc

quand je saisis par exemple : date1 : 24/08/06 et date 2 : 28 /01/07
j'ai comme résultat 5 mois au lieu de 6

voici mon code merci d'avance

If (CStr(CDate(Fin.Value) - CDate(Debut.Value))) <= 31 Then
Lignes.Value = 1
Else
Lignes.Value = Round((((CStr(CDate(Fin.Value) -
CDate(Debut.Value))) / 31.25)), 0)
End If