OVH Cloud OVH Cloud

Comment m'en sortir ???

20 réponses
Avatar
valenza
Bonjour

j'ai un userform avec des champs et des controles de dates
apr=E8s quelques recherches sur le forum et quelques fonctions, quelques
bonnes =E2mes m'ont aid=E9 en me donnant la possibilit=E9 de trouver
l'=E9cart en mois entre deux dates (je pr=E9cise un mois commenc=E9 est
comptabilis=E9)

Lignes.Value =3D (Year(CDate(Fin.Value)) * 12) + Month(CDate(Fin.Value))
- (Year(CDate(Debut.Value)) * 12) - Month(CDate(Debut.Value)) + 1

ce nombre me permet de recopier autant de lignes ds la feuille excel
que le r=E9sultat trouv=E9
ex : lignes.value =3D6 donc 6 lignes recopi=E9es ds ma feuille

For i =3D 1 To li
num2 =3D Sheets("PRESENCES").Range("A25536").End(xlUp).Row + 1

'MsgBox (Li)

Sheets("PRESENCES").Activate
Range("A" & num2).Value =3D Me.Nom
Range("B" & num2).Value =3D Me.Prenom
Range("C" & num2).Value =3D Me.Lst1
Range("D" & num2).Value =3D Me.Formation
Range("E" & num2).Value =3D Me.Lst2
Range("F" & num2).Value =3D Me.Debut
Range("G" & num2).Value =3D Me.Fin
Range("H" & num2).Value =3D Me.Heures

Next i

Question : comment faire pour que je puisse int=E9grer les mois
concern=E9s et ce autant de fois que n=E9cessaire. Exemple 6 lignes
recopi=E9es car 6 mois =E9coul=E9s entre deux dates, donc ce que
j'aimerais c'est trouver une variable "mois" pour que je puisse ajouter

Range("J" & num2).Value =3D mavariablemois (qui biensur change 6 fois
comme pour l'exemple ci-dessus)

un grand merci d'avance

BV

10 réponses

1 2
Avatar
JLuc
avait soumis l'idée :
ca fonctionne nickel sauf...... qu'il me compte toujours un mois en
plus

ex du 15/01/06 au 31/01/06 j'ai janvier et février
ex du 15/07/06 au 31

donc j'ai mis (je sais c'est du bricolage) :

For i = Month([Debut]) To Month([Debut]) + li - 1


C'est pas du bricolage, c'est ce qu'il faut mettre.
Explication :
du 15/01/06 au 31/01/06 --> 1 mois, donc 1 ligne
boucle du mois 1 au mois 1 + 1 (li) --> = 2
du 15/01/06 au 28/02/06 --> 2 mois, donc 2 lignes
boucle du mois 1 au mois 1 + 2 (li) --> =3
....
Attention :
du 15/12/06 au 31/01/07 --> il faudra tester la valeur de i
mois 12 + 2 (li) --> *14* : il n'y a pas de mois 14

Je te laisse chercher ;-)

--
JLuc

Avatar
valenza
Je viens de me rendre compte d'une chose
c'est qu'il n'incrémente que sur une année
sij'ai un chevauchement entre deux années.....il s'arrete au dernier
mois de l'année

ex : du 15/05/05 au 13/04/06
il me renseigne de mai à decembre 2005 puis j'ai une ligne sans rien
pas de 2006

il me dit que l'indice n'appartient pas à la sélection

voilà mon petit probleme par rapport à l'énormité du reste (pour
moi bien entendu)









quel bonheur ! merci bq je vs suis vraiment reconnaissant

ca fonctionne nickel sauf...... qu'il me compte toujours un mois en
plus

ex du 15/01/06 au 31/01/06 j'ai janvier et février
ex du 15/07/06 au 31

donc j'ai mis (je sais c'est du bricolage) :

For i = Month([Debut]) To Month([Debut]) + li - 1



un grand merci
BV



avait soumis l'idée :
j'ai juste une question est ce que je dois faire comme ca ?



Non

Private Sub Valide_Click()

My_Month(1) = "Janvier"
My_Month(2) = "Février"
My_Month(3) = "Mars"
My_Month(4) = "Avril"
My_Month(5) = "Mai"
My_Month(6) = "Juin"
My_Month(7) = "juillet"
My_Month(8) = "Août"
My_Month(9) = "Septembre"
My_Month(10) = "Octobre"
My_Month(11) = "Novembre"
My_Month(12) = "Décembre"

Dim li, i
li = Me.Lignes

For i = 1 To li
Ce premier for, tu le supprime


num2 = Sheets("PRESENCES").Range("A25536").End(xlUp).Row + 1
Cette ligne doit passée dans le deuxieme for


For i = Month([moisdedepart]) To Month([moisdedepart]) + li
ICI


'MsgBox (Li)

Sheets("PRESENCES").Activate
Range("A" & num2).Value = Me.Cmb_chantier
Range("B" & num2).Value = Me.Nom
Range("C" & num2).Value = Me.Prenom
Range("D" & num2).Value = Me.Lst1
Range("E" & num2).Value = Me.Formation
Range("F" & num2).Value = Me.Lst2
Range("G" & num2).Value = Me.Debut
Range("H" & num2).Value = Me.Fin
Range("I" & num2).Value = Me.Heures
Range("K" & num2).Value = My_Month(i)

Next i


parce que j'ai deux variable i et ca me semble bizzare

bv





Salut,
Tu fais ta boucle ainsi :

For i = Month([moisdedepart]) To Month([moisdedepart]) + li
...
...
Next

[moisdedepart] est la variable ou le controle à partir duquel tu va
recupérer la date

avait soumis l'idée :
un grand merci déjà pour votre compréhension et votre bienvei llance
j'ai appliqué à la lettre et ça fonctionne ........ à moiti é
(c'est un excellent départ)

j'ai maintenant mes mois qui apparaissent bien dans ma cellule mais en
fait
le nb de lignes donne le pas en partant de janvier et non en tenant
compte du debut
de ma date de départ

exemple : 24/03/06 au 21/05/06
nb de lignes à créer : 3
et la macro me met : janvier - février - mars et non pas mars - a vril
- mai

comment faire pour qu'il m'écrive les mois à partir de ma date de
départ
est ce que dois transformer mon (i) ?
est ce que je dois faire une formule pour qu'il me récupére le mois
de ma date et qu'il parte de là ?

merci

BV


--
JLuc



--
JLuc







Avatar
JLuc
Allez, va, je t'aide :

Private Sub Valide_Click()

My_Month(1) = "Janvier"
My_Month(2) = "Février"
My_Month(3) = "Mars"
My_Month(4) = "Avril"
My_Month(5) = "Mai"
My_Month(6) = "Juin"
My_Month(7) = "juillet"
My_Month(8) = "Août"
My_Month(9) = "Septembre"
My_Month(10) = "Octobre"
My_Month(11) = "Novembre"
My_Month(12) = "Décembre"

Dim li, i
Dim decale As Integer
li = Me.Lignes


For i = Month([moisdedepart]) To Month([moisdedepart]) + li - 1
num2 = Sheets("PRESENCES").Range("A25536").End(xlUp).Row + 1

' D'une année sur l'autre
If i > 12 Then
decale = i - 12
Else
decale = 0
End If


'MsgBox (Li)

Sheets("PRESENCES").Activate
Range("A" & num2).Value = Me.Cmb_chantier
Range("B" & num2).Value = Me.Nom
Range("C" & num2).Value = Me.Prenom
Range("D" & num2).Value = Me.Lst1
Range("E" & num2).Value = Me.Formation
Range("F" & num2).Value = Me.Lst2
Range("G" & num2).Value = Me.Debut
Range("H" & num2).Value = Me.Fin
Range("I" & num2).Value = Me.Heures
Range("K" & num2).Value = My_Month(i - decale)

Next i

--
JLuc
Avatar
valenza
merci JLuc pour ton aide
je comprends la formule que tu as mise c'est déjà un début

mais apparemment il a toujours un pbm quand il arrive a decembre
il me repete plusieurs fois decembre et ne porusuit pas sa course

BV



Allez, va, je t'aide :

Private Sub Valide_Click()

My_Month(1) = "Janvier"
My_Month(2) = "Février"
My_Month(3) = "Mars"
My_Month(4) = "Avril"
My_Month(5) = "Mai"
My_Month(6) = "Juin"
My_Month(7) = "juillet"
My_Month(8) = "Août"
My_Month(9) = "Septembre"
My_Month(10) = "Octobre"
My_Month(11) = "Novembre"
My_Month(12) = "Décembre"

Dim li, i
Dim decale As Integer
li = Me.Lignes


For i = Month([moisdedepart]) To Month([moisdedepart]) + li - 1
num2 = Sheets("PRESENCES").Range("A25536").End(xlUp).Row + 1

' D'une année sur l'autre
If i > 12 Then
decale = i - 12
Else
decale = 0
End If


'MsgBox (Li)

Sheets("PRESENCES").Activate
Range("A" & num2).Value = Me.Cmb_chantier
Range("B" & num2).Value = Me.Nom
Range("C" & num2).Value = Me.Prenom
Range("D" & num2).Value = Me.Lst1
Range("E" & num2).Value = Me.Formation
Range("F" & num2).Value = Me.Lst2
Range("G" & num2).Value = Me.Debut
Range("H" & num2).Value = Me.Fin
Range("I" & num2).Value = Me.Heures
Range("K" & num2).Value = My_Month(i - decale)

Next i

--
JLuc


Avatar
JLuc
avait soumis l'idée :
merci JLuc pour ton aide
je comprends la formule que tu as mise c'est déjà un début

mais apparemment il a toujours un pbm quand il arrive a decembre
il me repete plusieurs fois decembre et ne porusuit pas sa course

BV



Allez, va, je t'aide :

Private Sub Valide_Click()

My_Month(1) = "Janvier"
My_Month(2) = "Février"
My_Month(3) = "Mars"
My_Month(4) = "Avril"
My_Month(5) = "Mai"
My_Month(6) = "Juin"
My_Month(7) = "juillet"
My_Month(8) = "Août"
My_Month(9) = "Septembre"
My_Month(10) = "Octobre"
My_Month(11) = "Novembre"
My_Month(12) = "Décembre"

Dim li, i
Dim decale As Integer
li = Me.Lignes


For i = Month([moisdedepart]) To Month([moisdedepart]) + li - 1
num2 = Sheets("PRESENCES").Range("A25536").End(xlUp).Row + 1

' D'une année sur l'autre
If i > 12 Then
decale = i - 12
Else
decale = 0
End If


'MsgBox (Li)

Sheets("PRESENCES").Activate
Range("A" & num2).Value = Me.Cmb_chantier
Range("B" & num2).Value = Me.Nom
Range("C" & num2).Value = Me.Prenom
Range("D" & num2).Value = Me.Lst1
Range("E" & num2).Value = Me.Formation
Range("F" & num2).Value = Me.Lst2
Range("G" & num2).Value = Me.Debut
Range("H" & num2).Value = Me.Fin
Range("I" & num2).Value = Me.Heures
Range("K" & num2).Value = My_Month(i - decale)

Next i

--
JLuc



As ta regarder la derniere ligne avant le Next ? ;-)
Range("K" & num2).Value = My_Month(i *- decale* )



--
JLuc


Avatar
valenza
oui mais je ne comprends pas

si mon nb de lignes est sup à 12 il decale du nombre de lignes issues
de la soustraction
sinon il ne décale pas
mais je ne sais pas ce que tu veux me faire comprendre je n'ai jamais
fait de prog
j'enregistre des macros je bidouille un peu le code et j'apprends bq
avec vos réponses

mais ca ne me saute pas encore aux yeux

BV




avait soumis l'idée :
merci JLuc pour ton aide
je comprends la formule que tu as mise c'est déjà un début

mais apparemment il a toujours un pbm quand il arrive a decembre
il me repete plusieurs fois decembre et ne porusuit pas sa course

BV



Allez, va, je t'aide :

Private Sub Valide_Click()

My_Month(1) = "Janvier"
My_Month(2) = "Février"
My_Month(3) = "Mars"
My_Month(4) = "Avril"
My_Month(5) = "Mai"
My_Month(6) = "Juin"
My_Month(7) = "juillet"
My_Month(8) = "Août"
My_Month(9) = "Septembre"
My_Month(10) = "Octobre"
My_Month(11) = "Novembre"
My_Month(12) = "Décembre"

Dim li, i
Dim decale As Integer
li = Me.Lignes


For i = Month([moisdedepart]) To Month([moisdedepart]) + li - 1
num2 = Sheets("PRESENCES").Range("A25536").End(xlUp).Row + 1

' D'une année sur l'autre
If i > 12 Then
decale = i - 12
Else
decale = 0
End If


'MsgBox (Li)

Sheets("PRESENCES").Activate
Range("A" & num2).Value = Me.Cmb_chantier
Range("B" & num2).Value = Me.Nom
Range("C" & num2).Value = Me.Prenom
Range("D" & num2).Value = Me.Lst1
Range("E" & num2).Value = Me.Formation
Range("F" & num2).Value = Me.Lst2
Range("G" & num2).Value = Me.Debut
Range("H" & num2).Value = Me.Fin
Range("I" & num2).Value = Me.Heures
Range("K" & num2).Value = My_Month(i - decale)

Next i

--
JLuc



As ta regarder la derniere ligne avant le Next ? ;-)
Range("K" & num2).Value = My_Month(i *- decale* )



--
JLuc




Avatar
JLuc
avait soumis l'idée :
oui mais je ne comprends pas

si mon nb de lignes est sup à 12 il decale du nombre de lignes issues
de la soustraction
sinon il ne décale pas
mais je ne sais pas ce que tu veux me faire comprendre je n'ai jamais
fait de prog
j'enregistre des macros je bidouille un peu le code et j'apprends bq
avec vos réponses

mais ca ne me saute pas encore aux yeux
Allez, va, je t'aide :

Private Sub Valide_Click()

My_Month(1) = "Janvier"
My_Month(2) = "Février"
My_Month(3) = "Mars"
My_Month(4) = "Avril"
My_Month(5) = "Mai"
My_Month(6) = "Juin"
My_Month(7) = "juillet"
My_Month(8) = "Août"
My_Month(9) = "Septembre"
My_Month(10) = "Octobre"
My_Month(11) = "Novembre"
My_Month(12) = "Décembre"

Dim li, i
Dim decale As Integer
li = Me.Lignes


For i = Month([moisdedepart]) To Month([moisdedepart]) + li - 1
num2 = Sheets("PRESENCES").Range("A25536").End(xlUp).Row + 1

' D'une année sur l'autre





Merdum, :') je suis aller trop vite
If i > 12 Then
decale = 12 'Pas i - 12




decale = i - 12
Else
decale = 0
End If
' si i est sup à 12, decale vaut 12 sinon il vaut 0




'donc si i vaut 13, decale vaut 12 : My_Month(i -
decale)=My_Month(13-12)
Range("K" & num2).Value = My_Month(i - decale)

--
JLuc




Avatar
valenza
sei un signore !!!!!!!!
traduction = tu es un seigneur ou un Monsieur

BV



avait soumis l'idée :
oui mais je ne comprends pas

si mon nb de lignes est sup à 12 il decale du nombre de lignes issues
de la soustraction
sinon il ne décale pas
mais je ne sais pas ce que tu veux me faire comprendre je n'ai jamais
fait de prog
j'enregistre des macros je bidouille un peu le code et j'apprends bq
avec vos réponses

mais ca ne me saute pas encore aux yeux
Allez, va, je t'aide :

Private Sub Valide_Click()

My_Month(1) = "Janvier"
My_Month(2) = "Février"
My_Month(3) = "Mars"
My_Month(4) = "Avril"
My_Month(5) = "Mai"
My_Month(6) = "Juin"
My_Month(7) = "juillet"
My_Month(8) = "Août"
My_Month(9) = "Septembre"
My_Month(10) = "Octobre"
My_Month(11) = "Novembre"
My_Month(12) = "Décembre"

Dim li, i
Dim decale As Integer
li = Me.Lignes


For i = Month([moisdedepart]) To Month([moisdedepart]) + li - 1
num2 = Sheets("PRESENCES").Range("A25536").End(xlUp).Row + 1

' D'une année sur l'autre





Merdum, :') je suis aller trop vite
If i > 12 Then
decale = 12 'Pas i - 12




decale = i - 12
Else
decale = 0
End If
' si i est sup à 12, decale vaut 12 sinon il vaut 0




'donc si i vaut 13, decale vaut 12 : My_Month(i -
decale)=My_Month(13-12)
Range("K" & num2).Value = My_Month(i - decale)

--
JLuc






Avatar
JLuc
avait soumis l'idée :
sei un signore !!!!!!!!
traduction = tu es un seigneur ou un Monsieur


non, seulement moi même :')

--
JLuc

Avatar
JLuc
avait soumis l'idée :
sei un signore !!!!!!!!
traduction = tu es un seigneur ou un Monsieur


A la place du If...End If, tu peux mettre :
decale = i - (Fix((i - 1) / 12) * 12)
De cette façon, tu pourras gérer sur plusieurs année
rofl B-) rofl

--
JLuc

1 2