formatage données dans une cellule
#1
Régulier XLPages

Inscription: 24/08/2011

Messages: 54

Système d'exploitation:
PC
Version Excel utilisée:
OFFICE EXCEL 2007
Posté le : 09-07-2012 13h19
 Bonjour,

Encore une question bête, désolé ???

Pour rajouter un text au moment de la définition d'une cellule
Exemple dans D11 on a une valeur numérique de 1 à 31:

 If IsEmpty(Range("D11")) Then
           MsgBox "Il faut saisir le jour d'incident"
           Range("D11").Select
           Else
' dans la cellule J6 il doit y avoir la valeur de D11(par exemple 25
' et la chaine de ' caracteres "/07/2012 "  donc 25/07/2012 
           J6 = (D11&'/07/2012')
' C'est la syntaxe de cette ligne qui me pose un problème, EXCEL me dit
' qu'il me faut une fin d'instruction.

' aprés si possible je replace D11 par J6
           Range("D11").Select
           D11 = ("J6")
           Exit Sub
    End If
 




Edité par ramarc le 10/07/2012 10:54:32
Hors Ligne
Rapport   Haut 

Re: formatage données dans une cellule
#2
Accro XLPages

Inscription: 23/05/2008
De La Varenne Saint-Hilaire

Messages: 356

Système d'exploitation:
PC
Version Excel utilisée:
2010
Posté le : 10-07-2012 12h21
Bonjour ramarc, bonjour le forum,

Si j'ai bien interprété ta demande, je crois qu'il n'est pas nécessaire de passer par une cellule intermédiaire en J6.
Ci-dessous un exemple avec une macro évènementielle travaillant sur la cellule D11, j'ai imaginé qu'il y avait une date quelque part dans la feuille (ici en A1) permettant de connaître le mois et l'année:

Private Sub Worksheet_Change(ByVal Target As Range)
'Vérifie l'adresse de la cellule de saisie, test si saisie et du texte
If Target.Address = "$D$11" And TypeName(Target.Value) = "String" Then
    MsgBox "date invalide"
    'désactive temporairement les évènements
    Application.EnableEvents = False
    'efface la saisie erronée
    Target.ClearContents
    'réactive les évènements
    Application.EnableEvents = True
    Exit Sub
End If

'Teste adresse da cellule et si cellule <> de vide
If Target.Address = "$D$11" And Not (IsEmpty(Target.Value)) Then
    'note la date saisie en A1 (par exemple)
    myDate = ActiveSheet.Range("A1")
    'calcule sous forme de date le premier jour du mois pour cette date
    myMini = DateSerial(Year(myDate), Month(myDate), 1)
    'calcule le dernier jour du mois pour cette date
    myMaxi = Day(DateAdd("m", 1, myMini) - 1)
   
    'teste si le jour est compris entre le 1er et le dernier jour du mois
    If CInt(Target.Value) >= 1 And CInt(Target.Value) <= myMaxi Then
        Application.EnableEvents = False
        'met la date correspondante dans la cellule
        Target.Value = DateSerial(Year(myDate), Month(myDate), CInt(Target.Value))
        Application.EnableEvents = True
    Else
        'message et efface la saisie si invalide
        MsgBox "date invalide"
        Target.ClearContents
    End If
End If
End Sub

 

On doit pouvoir faire bien mieux mais vois si cette piste peut t'aider en attendant d'autres suggestions.

Bien à toi,

mth

Hors Ligne
Rapport   Haut 

Re: formatage données dans une cellule
#3
Régulier XLPages

Inscription: 24/08/2011

Messages: 54

Système d'exploitation:
PC
Version Excel utilisée:
OFFICE EXCEL 2007
Posté le : 10-07-2012 15h58
Bonjour,

Merci c'est ça qui faut, ca me va c'est trés bien.

Encore un grand merci à toutes et tous.

Cordialement.
Hors Ligne
Rapport   Haut 

Re: formatage données dans une cellule
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 10-07-2012 22h51
Bonsoir ramarc, Mth,

Pour le fun, je propose une tentative un peu différente :

Private Sub Worksheet_Change(ByVal Target As Range)
Static EnCours As Boolean
Dim J As Long, Jmax As Byte
    If EnCours Then Exit Sub
    If Not Application.Intersect(Target, Range("D11")) Is Nothing Then
        J = Val(Target(1).Value2)
        Jmax = Day(DateSerial(Year(Date), Month(Date) + 1, 1) - 1)
        EnCours = True
       
        Select Case J
        Case 1 To Jmax
            Target.Value = DateValue(J & Format(Date, "/mm/yyyy"))
        Case Else
            If Not IsEmpty(Target) Then
                MsgBox "Saisie invalide"
                Application.Undo
            End If
        End Select
       
        EnCours = False
    End If
End Sub
Je suis parti du principe que le mois et l'année en cours étaient les références à appliquer.

J'ai tout d'abord contourné le recours à la propriété Application.EnableEvents (qu'il est toujours préférable d'éviter compte tenu des problèmes qu'elle peut occasionner) par l'utilisation d'une variable déclarée en Static toujours très utile dans ce type de situation.

Par ailleurs, on peut noter aussi l'utilisation de la propriété Value2 très méconnue (voire carrément inconnue pour beaucoup), qui rend pourtant de bons services et c'est le cas ici . Dans la présente macro, l'utilisation de la propriété Value (bien plus connue !) en lieu et place ne fonctionnera pas !

Application.Undo permet, quant à lui, d'annuler une saisie utilisateur considérée comme invalide.

Cordialement,



Edité par myDearFriend! le 10/07/2012 23:31:14

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes