IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Gestion format nombre [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Gestion format nombre
    Bonsoir, meilleurs vœux et bonne année,

    J'extrais des données d'une base pour constituer une feuille de saisie. Mon souci est le format des nombres sur cette feuille.

    Parmi les données extraites, celles d'une colonne sont soient "cellule vide" ou "nombre". Je voudrai que sur la feuille de destination le format des nombres soit "0.00" ou vide (source vide--->destination vide).

    J'ai utilisé l’événement "worksheet_change", pour gérer la saisie des nombres en col E (E8:E30), que du numérique, ajout signe "-" et message dépassement valeur autorisée.
    Par contre je n'ai pas réussi à imposer que des nombres entiers.

    Je voudrai aussi imposer que des entiers positifs pour la colonne F.

    Mon code pour cette dernière n'est pas très orthodoxe, mais il semble bien fonctionner.

    En espérant avoir été clair, je vous remercie par avance.

    Cordialement,
    Dernière modification par SfJ5Rpw8 ; 04/01/2014 à 20h07.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    Citation Envoyé par cathodique Voir le message
    ...Mon code pour cette dernière n'est pas très orthodoxe, mais il semble bien fonctionner...
    poste ton code ici entre balises de [CODE] [/CODE]

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir Bbil,

    Je te remercie pour le retour, comme j'avais joint un fichier je n'ai pas édité le code.

    Code pour extraire données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Sub SaisieNouveau()
    Dim i As Long, j As Long, LastLig As Long
    Dim o As Object, bd As Object
    Dim Tb, RES()
    Dim DerCol As Integer
    Dim Val1 As String
    '-------------------------------------------------------------------------
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Set bd = Sheets("A") 'définit l'onglet bd
    Dl = bd.Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit derlg col1 onglet A
    Set o = Sheets("B")
     
    On Error Resume Next
     
    With bd
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        Tb = .Range("A2:H" & LastLig)
    End With
     
    With o              'Worksheets("A")
    DerCol = o.Range("A7").End(xlToRight).Column
     
         Val1 = .Range("B1")        'N°P
     
        For i = 1 To LastLig - 1
            If Tb(i, 1) = Val1 Then
                j = j + 1
                ReDim Preserve RES(1 To 12, 1 To j)
                RES(1, j) = j
                RES(2, j) = Tb(i, 2)
                RES(3, j) = Tb(i, 3)
     
                'format nombre 0.00 ou vide
     
                If RES(4, j) <> "" Then
                RES(4, j) = Round(Tb(i, 4), 2)  'PK
                Else
                RES(4, j) = Tb(i, 4)
                End If
     
                RES(7, j) = Tb(i, 5)    'DIR
     
            End If
     
        Next i
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        If LastLig > 8 Then .Range("A8:H" & LastLig).Clear
        If j > 0 Then .Range("A8").Resize(j, 12) = Application.Transpose(RES)
     
        .Range("A8").Resize(j, DerCol).Borders.Weight = xlThin
        .Range("A8").Resize(j, DerCol).Font.Name = "calibri"
        .Range("A8").Resize(j, DerCol).Font.Size = 12
        .Range("A8").Resize(j, DerCol).HorizontalAlignment = xlCenter
        .Range("A8").Resize(j, DerCol).VerticalAlignment = xlCenter
        .Range("H8:H" & LastLig).Resize(j, DerCol).HorizontalAlignment = xlLeft
     
        End With
     
    Range("E8").Select
    Application.ScreenUpdating = True
    Application.EnableEvents = True
     
    End Sub
    Code pour gestion format des nombres saisis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Private Sub CommandButton1_Click()
    SaisieNouveau
    End Sub
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    '===================================================================
    'trouver solution pour colonne F, ne doit accepter que des entiers
     
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'gestion valeurs négatives colonne E
    'c'est le code ci-dessous qui semble bien fonctionner
        If Not Intersect(Target, Range("E8:E30")) Is Nothing Then
         Application.EnableEvents = False
         On Error Resume Next
    Application.EnableEvents = False
     
    If IsNumeric(Target) = True Then
    Target.Value = Target.Value * -1
    End If
     
    If Target.Value <= -5000 Then
    MsgBox "Excessif par rapport aux valeurs usuelles!" & Chr(10) & _
    "Erreur de saisie, Vérifier!", vbCritical
    Target.ClearContents
    Target.Select
    End If
     
    If Target.Value > 0 Then
    Target.Interior.ColorIndex = 3
    Target.Font.Bold = True
    Else
    Target.Interior.Pattern = xlNone
    Target.Font.Bold = False
    End If
     
    If Target.Value = 0 Then
    Target.ClearContents
    End If
     
    If Not IsNumeric(Target) = True Then
    MsgBox "Valeur numérique obligatoire!", vbCritical
    Target.ClearContents
    Target.Select
    End If
     
    Application.EnableEvents = True
     
    End If
     
    End Sub
    Merci beaucoup pour ton aide.

    Cordialement,

  4. #4
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut gestion format nombre
    bonjour,

    Dans ta colonne E, tu ne veux que des entiers négatifs ou négatif et positif ?
    il semble que tu accepte les deux si j'en juge par un "if...."

    pour imposer des entiers positifs en colonne F faire :
    [code]
    ' Si tu accepte de transformer les valeurs négatives introduites
    abs(target.value)

    ou sinon tu rejettes les saisies négatives accompagnées d'un message d'erreur.

    Pour le format,peut-être ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    target.NumberFormat = "0.00"
    Cordialement,

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Nibledispo,

    Je te remercie pour le retour.

    Pour la colonne D, j'ai mis ta proposition, les nombres prennent bien le format "0.00", mais c'est quand j'effectue une saisie.
    Alors que, pour cette colonne les nombres sont extraits de la feuille A en utilisant une macro "SaisieNouveau" (Module1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    If Not Application.Intersect(Target, Range("d8:d30")) Is Nothing Then
    Application.EnableEvents = False
         On Error Resume Next
    If IsNumeric(Target.Value) = True Then
    Target.NumberFormat = "0.00"
    End If
    End If
    Dans le code d'extraction j'ai ceci,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RES(4, j) = Round(Tb(i, 4), 2)
    et ainsi le format est bien "0.00", sauf s'il s'agit de nombre entier (ex:0 ou 12). Je voudrai que 0 s'affiche 0,00 et 12 en 12,00.
    J'ai essayé avec format de cellule (sur la feuille), j'obtiens bien le format désiré, mais dès que j’exécute le code le format disparait.

    Pour la colonne E, en effet elle accepte les nombres relatifs, le "if" c'est pour le format de la cellule (si nombre positif, police en gras et fond en rouge).
    Je voudrai qu'elle n’accepte que des entiers.

    Pour la colonne F, je voudrai qu'elle n’accepte que des entiers positifs.

    En vous remerciant beaucoup.

    Cordialement,

  6. #6
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut gestion format nombre
    Bonjour,

    Tu dis avoir joint un fichier, or si je vois bien 2 codes joints, je ne vois en revanche aucun fichier joint.

    Pour les "12:00" qui deviennent "12" malgré le "round" cela vient peut être de ce que ton Excel est configuré pour rejeter les "0" non significatifs.
    Regardes dans les options et modifies si nécessaire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 29/01/2024, 15h32
  2. Gestion des nombres au format BCD
    Par gl dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 16h07
  3. Formater des cellules excel en format nombre
    Par _developpeur_ dans le forum Access
    Réponses: 7
    Dernier message: 09/01/2006, 14h13
  4. gestion de nombre d'utilisateur
    Par progima dans le forum MFC
    Réponses: 1
    Dernier message: 24/10/2005, 15h50
  5. [Format]nombres avec des 0
    Par zozolh2 dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 01/06/2004, 08h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo