Précédent   Forum des professionnels en informatique > 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 Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/12/2011, 18h46   #1
Invité de passage
 
Homme Michel BENTOUMI
Responsable d'exploitation informatique
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme Michel BENTOUMI
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 2
Points : 2
Par défaut Pb Format da date

Bonjour à toutes et à tous,
J'ai développé une appli qui me calcule des Heures supplémentaires. OK tout va bien, mais les utilisateurs ne respectent pas toujours le format de date "jj/mm/aaaa".
1) Dans une plage B7:B20 comment faire pour que quelque soit la façon dont est rentrée la date (01 01 2011, 1er janvier 2011, 01.01.2011.....) le résultat dans la celulle soit "jj/mm/aaaa". Par VBA dans le code de la feuille serait mieux car pas de risque d'éffacement de la formule.
2) dans cette plage, comment en colonne C, je peux extraite le jour en toutes lettres.
merci d'avance pour votre aide.
Bonnes Fêtes de Fin d'année.
MBEN69
MBen69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 20h03   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Code :
1
2
3
4
5
6
7
8
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [B7:B20]) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Target.Value = CDate(Target.Value)
    Target.Offset(, 1).Value = Day(Target)
    Application.EnableEvents = True
    Target.NumberFormat = "dd/mm/yyyy"
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2011, 20h06   #3
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Le plus simple je pense est de forcer l'utilisateur à ne pas mettre n'importe quoi, regarde les validations de données dans Excel, tu peux choisir une validation Date, ainsi seule les date valide seront autorisé, si l'utilisateur tape une date dans un format non reconnu, tu peux afficher le message d'erreur que tu veux (c'est dans les options de la validation)

Je te déconseilles de faire un système qui reconnait des format de date, ce sera toujours aléatoire, prend l'exemple du 12/06/2011 : le 12 juin ou le 06 décembre?

Pour ta colonne C regarde dans les fonction, tu doit avoir Jour() qui te permet d'extraire la jour d'une date.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/12/2011, 23h17   #4
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Dans l'idée de faire coup double, forcer le format de la date, et aider les utilisateurs à la saisie, en faisant apparaître un calendrier (DateTimePicker sous XLS2003).

Attention, ce type d'objet existe bien sous la version 2003, mais sauf erreur de ma part, PAS dans la version 2010 d'Office )

Pour une question de portabilité, tu peux également créer ta propre fenêtre de sélection de date. (ex basique 3 ComboBox JJ, MM, AAAA).
Dans ce dernier cas, il faudra déterminer si ça vaut toujours le coup d'implémenter ça (par rapport à la méthode de Quazerty),
parce que la simplification n'est plus énorme. (au moins 8 clics pour une saisie de Date, alors qu'avec le DateTimePicker
en 3 clics la date est choisie)
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 08h22   #5
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Pour abonder dans le sens de BlueMonkey il existe même un xla tout fait qui traîne sur le net, une fois celui-ci lancé un calendrier est automatiquement affiché sur les cellules contenant un format date.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 12h43   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Citation:
Attention, ce type d'objet existe bien sous la version 2003, mais sauf erreur de ma part, PAS dans la version 2010 d'Office
On peut l'avoir avec Office 2010 en chargent mscomctl2.ocx.
Ci-joint un exemple en ajoutant la commande "Date ?" au menu contextuel "Cell" (bouton droit de la souris. Voici le code (nécessite un contrôle DTPicker et un command button sur un userform. Dans le module "ThisWorkbook" :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Application.CommandBars("Cell").Controls("Date ?").Delete
End Sub
 
Private Sub Workbook_Open()
    On Error Resume Next
    Set myControl = Application.CommandBars("Cell").Controls _
        .Add(Type:=msoControlPopup)
    With myControl
        .Caption = "Date ?"
        .OnAction = "ShowUF"
    End With
End Sub
Dans le module de l'userform :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub CommandButton1_Click()
    ActiveCell = Me.DTPicker1.Value
    Unload Me
End Sub
 
Private Sub DTPicker1_Change()
    ActiveCell = Me.DTPicker1.Value
    Unload Me
End Sub
 
Private Sub UserForm_Initialize()
    Me.DTPicker1.Value = Date
End Sub
Dans un module standard :

Code :
1
2
3
Sub ShowUF()
    UserForm1.Show
End Sub
Fichiers attachés
Type de fichier : xls Calendrier.xls (45,5 Ko, 4 affichages)
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h17   #7
Invité de passage
 
Homme Michel BENTOUMI
Responsable d'exploitation informatique
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme Michel BENTOUMI
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 2
Points : 2
Bonjour Daniel.C
Merci pour ta réponse rapide. Celà fonctionne parfaitement pour tous les formats sauf si je rentre une date avec des points comme séparateurs (ex : 21.12.2011). Plantage ligne 4 du code "Target.value=cdate(target.value)
Cordialement
MBen69

Citation:
Envoyé par Daniel.C Voir le message
Bonjour,

Code :
1
2
3
4
5
6
7
8
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [B7:B20]) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Target.Value = CDate(Target.Value)
    Target.Offset(, 1).Value = Day(Target)
    Application.EnableEvents = True
    Target.NumberFormat = "dd/mm/yyyy"
End Sub
Qwazerty Bonjour,
Merci pour ta réponse. je vais le chercher
Bonnes Fêtes
MBen69



Citation:
Envoyé par Qwazerty Voir le message
Salut

Pour abonder dans le sens de BlueMonkey il existe même un xla tout fait qui traîne sur le net, une fois celui-ci lancé un calendrier est automatiquement affiché sur les cellules contenant un format date.

++
Qwaz
MBen69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h21   #8
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Oui, moi aussi. Je suppose que c'est parce que le point est mon symbole décimal (et toi ?). Raison de plus pour adopter la solution de Qwazerty ou ma seconde proposition.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 13h28   #9
Invité de passage
 
Homme Michel BENTOUMI
Responsable d'exploitation informatique
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme Michel BENTOUMI
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 2
Points : 2
Par défaut Pb Format de Date,

Daniel.C
Tu as raison, moi aussi.
Cependant en colonne C, quand la date s'affiche au bon format, j'ai pas le nom du jour mais 01/01/1900 ? Tu vois d'ou ça vient ?
MBen69
MBen69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 15h01   #10
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Ca vient que j'avais mal compris ce que tu voulais. "01/01/1900", c'est 1 au format date. Mets :

Code :
1
2
3
4
5
6
7
8
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [B7:B20]) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    Target.Value = CDate(Target.Value)
    Target.Offset(, 1).Value = Format(Target.Value, "dddd")
    Application.EnableEvents = True
    Target.NumberFormat = "dd/mm/yyyy"
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/12/2011, 10h40   #11
Invité de passage
 
Homme Michel BENTOUMI
Responsable d'exploitation informatique
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme Michel BENTOUMI
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 2
Points : 2
Bonjour Daniel.C,
Pour le jour en colonne C celà fonctionne impéccable. Merci encore.
J'ai tjrs ce Pb de format de date, mais je ne désespère pas.
Merci encore pour toutes vos contributions
MBen69
MBen69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 11h32   #12
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,
Ceci, peut-être :

Code :
1
2
3
4
5
6
7
8
9
10
11
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, [B7:B20]) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    On Error Resume Next
    Target.Value = Application.Substitute(Target.Value, ".", "/")
    Target.Value = CDate(Target.Value)
    Target.Offset(, 1).Value = Format(Target.Value, "dddd")
    Application.EnableEvents = True
    Target.NumberFormat = "dd/mm/yyyy"
    On Error GoTo 0
End Sub
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 12h20   #13
Invité de passage
 
Homme Michel BENTOUMI
Responsable d'exploitation informatique
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme Michel BENTOUMI
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 2
Points : 2
Par défaut Pb format de date

Daniel.C
Désolé mais cela ne fonctionne toujours pas et en plus le jour "dddd" ne s'affiche pas dans la colonne C
Merci pour ton temps
MBen69
MBen69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 12h48   #14
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Pourquoi tu t’embêtes, si j'ai bien compris le nombre de lignes est fixe?
Dans ce cas dans la colonne B, tu mets =cellule colonne A
exemple
pour la ligne 1, dans la cellule B2, tu mets
Puis tu vas dans le format de ta cellule et tu choisis "Personnalisée" et tu met "jjjj" comme format (sans les " ").

Ensuite tu étires la cellule B2 jusqu'en bas de ton tableau et le tour est joué.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/12/2011, 12h59   #15
Invité de passage
 
Homme Michel BENTOUMI
Responsable d'exploitation informatique
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme Michel BENTOUMI
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 2
Points : 2
Par défaut Format de date

Bonjour Qwazerty,
Merci, cela fonctionne : J'ai encore appris qque chose aujourd'hui.
J'avais fini par mettre : =SI($B8="";"";TEXTE($B8;"jjjj")).
Cela revient au même mais sympa ta soluce.
J'ai activé l'enregistreur de macro, Nickel
merci encore
MBen69
MBen69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 13h24   #16
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Ca ne revient pas tout a fait au même, lorsque tu changes uniquement le format de la cellule comme je te l'ai indiqué, le contenu "interne" de la cellule ne change pas (on a toujours la date au format numérique), seul le contenu "visible" est modifié.
Il faut donc faire attention si tu utilises le contenu d'une des cellule de la colonne B pour assembler avec une autre chaîne de caractère.
Exemple
tu veux afficher en colonne C mardi Matin (j'ai pris mardi au pif).
Si tu mets en colonne C
tu vas te retrouver avec "32561 Matin", 32561 représentant la date stocké en interne...
Dans ce cas la il faudra faire
Code :
= TEXTE(C5;"jjjj") & " Matin"
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 13h44   #17
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Citation:
Désolé mais cela ne fonctionne toujours pas et en plus le jour "dddd" ne s'affiche pas dans la colonne C
On régresse, alors, puisque ça fonctionnait ce matin pour le jour en colonne C.


Dans quel cas est-ce que ça ne fonctionne pas ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 14h54   #18
Invité de passage
 
Homme Michel BENTOUMI
Responsable d'exploitation informatique
Inscription : décembre 2011
Messages : 9
Détails du profil
Informations personnelles :
Nom : Homme Michel BENTOUMI
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Santé

Informations forums :
Inscription : décembre 2011
Messages : 9
Points : 2
Points : 2
Daniel.C,
C'est de ma faute. Celà n'a jamais fonctionné mais en colonne C j'avais laissé une formule de conversion texte="jjjj".
désolé
MBen69

Merci Qwaz, j'en tiendrais compte
MBen69
MBen69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 16h31   #19
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Citation:
Daniel.C,
C'est de ma faute. Celà n'a jamais fonctionné
Qu'est-ce que tu saisis et qui ne fonctionne pas ?
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2011, 20h52   #20
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut heu

bonjour a tous

j'interviens un peu tard mais pour les points servant de separateurs tu peut utiliser la fonction (replace)

Code :
target=replace(target,".","/")
et metre les propriétés des cellules au format texte

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h50.


 
 
 
 
Partenaires

Hébergement Web