Précédent   Forum du club des développeurs et IT Pro > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/04/2012, 09h52   #1
vincmer28
Futur Membre du Club
 
Inscription : avril 2012
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 50
Points : 18
Points : 18
Bonjour,

J'explique ce que je cherche à faire. J'ai actuellement un formulaire sur lequel j'entre une date de début, et une date de fin de formation au format 00/00/0000 gràçe à des calendriers.

Une formation ne peut durer plus d'une semaine (donc 5 jours). J'ai donc des contrainte m'empechant de valider une formation si elle dure plus de 5 jours.
Actuellement, je n'ai pas ainsi de soucis si celle-ci s'étend sur une même semaine, mais le soucis est si je veut une formation, par exemple du mercredi au mardi de la semaine suivante...Il me dit que ça fait plus de 5 jours, forcement, il me compte mercredi, jeudi ,vendredi, samedi, dimanche, lundi, mardi....

Seulement, il n'y a bien sur aucune formation possible le week-end. Alors comment faire pour qu'il ne prenne pas en compte le samedi et le dimanche, et que donc si je choisi une date de début le mercredi , et une date de fin le mardi d'après, il me compte bien:
Mercredi, jeudi, Vendredi, lundi, mardi..

J'aimerais rajouter aussi que j'ai une ligne qui affiche tous les jours dans cet intervalle.

Par exemple, si j'ai une formation du mercredi 18 avril au mardi 24, je voudrais avoir dans la ligne A:

A1
Mercredi 18 avril 2012

A2
Jeudi 19 avril 2012

A3
Vendredi 20 avril 2012

A4
Lundi 21 avril 2012

A5
Mardi 22 avril 2012


Merci d'avance pour votre aide!
vincmer28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2012, 10h23   #2
ZebreLoup
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 994
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 34
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 994
Points : 2 190
Points : 2 190
Alors, il y a deux choses dans ta question.

- Calcul du nombre de jours : Tu as regardé du coté de WorkDays ? Je crois qu'elle n'est pas disponible pas défaut selon les version d'Excel, mais google est ton ami.
- Affichage des dates : C'est en formule Excel ou en VBA ? Dans tous les cas, une petite condition devrait suffir avec un WeekDay. Si c'est vendredi tu ajoutes 3 jours, sinon 1 seul.

Je ne pourrais pas t'en dire plus car je manque un peu de détails sur le fonctionnement de ton outil.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2012, 10h32   #3
vincmer28
Futur Membre du Club
 
Inscription : avril 2012
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 50
Points : 18
Points : 18
Bon alors pour faire simple, j'ai un formulaire qui par deux calendriers, me permet d'avoir deux dates, une date de début et une date de fin (DTPicker1 et DTPicker2)


J'ai pensé à Workday, mais quand je fait
Code :
1
2
3
datedebut= DTPicker1.Value
datefin=DTPicker2.Value
WorksheetFunction.WorkDay(Datedebut, DateFin)
j'obtient un résultat étrange, du style 98451, et non un intervalle.

Et pour afficher les dates de l'intervalle, l'outils fait un truc tout moche (ça a été fait par un débutant en vb :p):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
'---Recuperation, mise en forme et ajout des dates
DateDebut = Format(DTPicker1.Value, "dd mmmm yyyy")
DateFin = Format(DTPicker2.Value, "dd mmmm yyyy")
 
DateJour1 = Format(DTPicker1.Value, "dddd dd mmmm yyyy")
DateJour2 = Format(DateAdd("d", 1, DTPicker1.Value), "dddd dd mmmm yyyy")
DateJour3 = Format(DateAdd("d", 2, DTPicker1.Value), "dddd dd mmmm yyyy")
DateJour4 = Format(DateAdd("d", 3, DTPicker1.Value), "dddd dd mmmm yyyy")
DateJour5 = Format(DTPicker2.Value, "dddd dd mmmm yyyy")
 
Range("C5").Value = DateJour1
 
If DTPicker1.Value <> DTPicker2.Value Then
Range("E5").Value = DateJour2
 
If DTPicker2.Value - DTPicker1.Value > 1 Then
Range("G5").Value = DateJour3
 
If DTPicker2.Value - DTPicker1.Value > 2 Then
Range("I5").Value = DateJour4
 
If DTPicker2.Value - DTPicker1.Value > 3 Then
Range("K5").Value = DateJour5
End If
End If
End If
End If

Il doit y avoir un moyen de faire mieux que ça pour afficher les dates dans l'intervalle de datedebut et datefin, tout en excluant les samedi et dimanche?
vincmer28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2012, 10h33   #4
casefayere
Expert Confirmé Sénior
 
Avatar de casefayere
 
Homme Dominique LEMAIRE
Salarié Champagne
Inscription : décembre 2006
Messages : 2 650
Détails du profil
Informations personnelles :
Nom : Homme Dominique LEMAIRE
Âge : 58
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Salarié Champagne
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : décembre 2006
Messages : 2 650
Points : 5 392
Points : 5 392
Bonjour,
voir du coté de "NETWORKDAYS" en VBA ou "NB.JOURS.OUVRES" avec excel

Bonne journée
__________________
Dom

De Anomaly
Citation:
N'oubliez pas les points suivants !

Les membres qui vous répondent sont des participants bénévoles !
Quand votre problème est résolu, pensez à cliquer sur le bouton [Résolu] en bas de la discussion !
Pensez à remercier les messages qui vous ont aidé en votant positivement pour eux !
casefayere est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2012, 10h33   #5
kiki29
Expert Confirmé Sénior
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 2 298
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 2 298
Points : 5 594
Points : 5 594
Salut, par curiosité vas voir ici tu y verras un calendrier annuel sans Samedi Dimanche ni jours fériés et l'utilisation de Weekday
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2 3
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2012, 10h43   #6
fring
Rédacteur/Modérateur
 
Avatar de fring
 
Homme Fred Thomas
Engineering
Inscription : février 2008
Messages : 3 900
Détails du profil
Informations personnelles :
Nom : Homme Fred Thomas
Âge : 49
Localisation : Belgique

Informations professionnelles :
Activité : Engineering

Informations forums :
Inscription : février 2008
Messages : 3 900
Points : 8 485
Points : 8 485
Bonjour,

Pour compléter tout ce qui vient de se dire, un petit exemple de l'utilisation de la fonction NB.JOURS.OUVRES en VBA
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub test()
Dim Ddeb As Date, Dfin As Date, Jferie As Range
 
Ddeb = "26/04/2012" '<-- date de début
Dfin = "03/05/2012" '<-- date de fin
Set Jferie = Sheets("Feuil2").Range("A1:A10") '<-- plage contenant les jours fériés (par exemple le 01/05/2012)
 
'résultat sans tenir compte des jours fériés
MsgBox Application.WorksheetFunction.NetworkDays(Ddeb, Dfin)
 
'résultat en tenant compte des jours fériés
MsgBox Application.WorksheetFunction.NetworkDays(Ddeb, Dfin, Jferie)
 
End Sub
__________________
LES FAQ OFFICE - LES COURS OFFICE - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance
En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois)
fring est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2012, 10h48   #7
vincmer28
Futur Membre du Club
 
Inscription : avril 2012
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 50
Points : 18
Points : 18
Effectivement, je viens d'essayer la fonction NetWorkDay, cela fonctionne. Mon premier soucis est donc réglé, merci beaucoup .

Maintenant, reste ma 2nd question, qui je vous rappele concerne l'affichage dans une ligne d'un tableau de tous les jours de la formation au format "Vendredi 26 avril 2012".

Pour le moment, ça fonctionne ainsi (c'est moche^^) et ça affiche même les samedi et dimanches...:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
'---Recuperation, mise en forme et ajout des dates
DateDebut = Format(DTPicker1.Value, "dd mmmm yyyy")
DateFin = Format(DTPicker2.Value, "dd mmmm yyyy")
 
DateJour1 = Format(DTPicker1.Value, "dddd dd mmmm yyyy")
DateJour2 = Format(DateAdd("d", 1, DTPicker1.Value), "dddd dd mmmm yyyy")
DateJour3 = Format(DateAdd("d", 2, DTPicker1.Value), "dddd dd mmmm yyyy")
DateJour4 = Format(DateAdd("d", 3, DTPicker1.Value), "dddd dd mmmm yyyy")
DateJour5 = Format(DTPicker2.Value, "dddd dd mmmm yyyy")
 
Range("C5").Value = DateJour1
 
If DTPicker1.Value <> DTPicker2.Value Then
Range("E5").Value = DateJour2
 
If DTPicker2.Value - DTPicker1.Value > 1 Then
Range("G5").Value = DateJour3
 
If DTPicker2.Value - DTPicker1.Value > 2 Then
Range("I5").Value = DateJour4
 
If DTPicker2.Value - DTPicker1.Value > 3 Then
Range("K5").Value = DateJour5
End If
End If
End If
End If
Comment améliorer ça en n'affichant pas les week-ends?
vincmer28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2012, 10h55   #8
kiki29
Expert Confirmé Sénior
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 2 298
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 2 298
Points : 5 594
Points : 5 594
Salut, égalment pour infos voir ceci
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2 3
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2012, 10h58   #9
casefayere
Expert Confirmé Sénior
 
Avatar de casefayere
 
Homme Dominique LEMAIRE
Salarié Champagne
Inscription : décembre 2006
Messages : 2 650
Détails du profil
Informations personnelles :
Nom : Homme Dominique LEMAIRE
Âge : 58
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Salarié Champagne
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : décembre 2006
Messages : 2 650
Points : 5 392
Points : 5 392
Et tu ne pouvais pas adapter ce que je t'ai déjà donné, en ajoutant une condition ?

http://www.developpez.net/forums/d12...ine-caractere/
__________________
Dom

De Anomaly
Citation:
N'oubliez pas les points suivants !

Les membres qui vous répondent sont des participants bénévoles !
Quand votre problème est résolu, pensez à cliquer sur le bouton [Résolu] en bas de la discussion !
Pensez à remercier les messages qui vous ont aidé en votant positivement pour eux !
casefayere est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2012, 11h02   #10
vincmer28
Futur Membre du Club
 
Inscription : avril 2012
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 50
Points : 18
Points : 18
Si justement, c'est ce que je suis en train d'essayer de faire^^. Au passage j'ai oublié de te remercier hier .

Mais c'est justement au niveau de la condition que je bloque (gros débutant en vb).
vincmer28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2012, 11h12   #11
casefayere
Expert Confirmé Sénior
 
Avatar de casefayere
 
Homme Dominique LEMAIRE
Salarié Champagne
Inscription : décembre 2006
Messages : 2 650
Détails du profil
Informations personnelles :
Nom : Homme Dominique LEMAIRE
Âge : 58
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Salarié Champagne
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : décembre 2006
Messages : 2 650
Points : 5 392
Points : 5 392
A adapter
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub remplirdates()
Dim x As Long, tb(), y As Long
y = 0
For x = Range("A1") To Range("B1")
  If WorksheetFunction.Weekday(x, 2) <> 6 And WorksheetFunction.Weekday(x, 2) <> 7 Then
    y = y + 1
    ReDim Preserve tb(1 To y)
    tb(y) = x
  End If
Next x
Range("C1:C" & UBound(tb)) = WorksheetFunction.Transpose(tb)
 
End Sub
__________________
Dom

De Anomaly
Citation:
N'oubliez pas les points suivants !

Les membres qui vous répondent sont des participants bénévoles !
Quand votre problème est résolu, pensez à cliquer sur le bouton [Résolu] en bas de la discussion !
Pensez à remercier les messages qui vous ont aidé en votant positivement pour eux !
casefayere est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2012, 11h50   #12
vincmer28
Futur Membre du Club
 
Inscription : avril 2012
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 50
Points : 18
Points : 18
Merci casefayere , cela repond à ce que je cherche. Par contre, pour une raison qui m'échappe encore, cela bug quand je selectionne une plage de 5 jours (il ne m'affiche que les 3 premiersà, alors que si je selectionne une plage de 1 à 4 jours aucun soucis.
vincmer28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2012, 12h08   #13
casefayere
Expert Confirmé Sénior
 
Avatar de casefayere
 
Homme Dominique LEMAIRE
Salarié Champagne
Inscription : décembre 2006
Messages : 2 650
Détails du profil
Informations personnelles :
Nom : Homme Dominique LEMAIRE
Âge : 58
Localisation : France, Ardennes (Champagne Ardenne)

Informations professionnelles :
Activité : Salarié Champagne
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : décembre 2006
Messages : 2 650
Points : 5 392
Points : 5 392
Citation:
quand je selectionne une plage de 5 jours (il ne m'affiche que les 3 premiers
tout dépend de tes dates, exemple :
- Nous sommes le jeudi 26/4
- ta date de depart = 25/4
- ta date de fin = 29/4
tu n'auras que 3 jours

Est-ce le problème ?
__________________
Dom

De Anomaly
Citation:
N'oubliez pas les points suivants !

Les membres qui vous répondent sont des participants bénévoles !
Quand votre problème est résolu, pensez à cliquer sur le bouton [Résolu] en bas de la discussion !
Pensez à remercier les messages qui vous ont aidé en votant positivement pour eux !
casefayere est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/04/2012, 13h40   #14
vincmer28
Futur Membre du Club
 
Inscription : avril 2012
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 50
Points : 18
Points : 18
C'est bon, j'ai finallement réussi ce que je cherchais faire. Merci pour votre aide
vincmer28 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h00.


 
 
 
 
Partenaires

Hébergement Web