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 :

Boucle for pour remplacer les virgules dans un userform


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Points : 25
    Points
    25
    Par défaut Boucle for pour remplacer les virgules dans un userform
    Bonjour à tous,
    J'aimerai faire une boucle For pour que le code ci-dessous puisse s'appliquer à toute les textboxs de mon userform :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Textbox33_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        Select Case KeyAscii
         Case Asc(".")
     
         Case Asc(",")
            KeyAscii = Asc(".") 'Remplace . par virgule
         Case Else
          If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
          End Select
     
    End Sub
    Je suis novice et je ne comprend pas encore tout à fait bien les boucle...
    Merci

  2. #2
    Membre émérite Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Points : 2 439
    Points
    2 439
    Par défaut
    Bonjour floflo50100,

    Je ne comprends pas ta demande car ton code marche alors je te le commente un peu (une simple traduction):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Ctrl As Control 'variable de type controle
     
    For Each Ctrl In UserForm4.Controls 'Pour chaque controle dans la collection des controles de l'uf "UserForm4"
        If TypeName(Ctrl) = "TextBox" Then 'Si le type de controle est un TextBox alors
            Ctrl.Value = Replace(Ctrl.Value, ",", ".") 'On remplace les ',' dans la valeur du controle par '.'
        End If 'fin du Si
    Next 'prochaine controle
    Si tu as trouvé ce code et que tu veux juste l'adapter, vérifie que ton UF s'appel bien UserForm4
    Antony

    Mieux vaut ne rien dire et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.
    Gustave Parking


    Si le post vous est utile un petit fait toujours plaisir et pensez à passer en

    Et surtout -> Balise CODE

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ton code s'applique en l'état au textbox33, DURANT la saisie

    si tu veux généraliser cet évènement à tous les textbox de ton Userform, il y a deux méthodes :

    1) Ecrire cette macro pour chaque textbox, c'est pas pratique mais c'est du niveau débutant
    2) Utiliser un module de classe pour écrire une procédure évènementielle applicable à tous les textbox, mais là c'est plus du tout le même niveau


    après, il est possible d'effectuer le remplacement en une seule fois, en appuyant sur un bouton que tu places dans le userform
    si le bouton s'appelle par exemple CommandButton1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub CommandButton1_Click()
        Dim Ctrl As Control
     
        With Me
            For Each Ctrl In .Controls
                If TypeOf Ctrl Is msforms.TextBox Then
                    Ctrl = Replace(Ctrl, ".", ",")
                End If
            Next Ctrl
        End With
     
    End Sub

    EDIT : oups antonysansh, on s'est croisé avec la même idée

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à lire, assimiler et appliquer : Obliger une saisie numérique dans une TextBox
    à voir également : ceci

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Points : 25
    Points
    25
    Par défaut
    Bonjour,
    Vous avez du voir le mauvais code quand vous avez lu mon post il s'agit de celui ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Textbox33_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        Select Case KeyAscii
         Case Asc(".")
     
         Case Asc(",")
            KeyAscii = Asc(".") 'Remplace . par virgule
         Case Else
          If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
          End Select
     
    End Sub
    Dsl

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonjour.

    La classe événements :


    Dans le Userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim TextB(1 To 2) As New Classe1
     
    Private Sub UserForm_Initialize()
     For i = 1 To 2: Set TextB(i).LesTextbox = Me("TextBox" & i): Next i
    End Sub
    Dans le module de classe Classe1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public WithEvents LesTextbox As MSForms.TextBox
     
    Private Sub LesTextbox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     
        Select Case KeyAscii
         Case Asc(".")
     
         Case Asc(",")
            KeyAscii = Asc(".") 'Remplace . par virgule
         Case Else
          If Not IsNumeric(Chr(KeyAscii)) Then KeyAscii = 0
          End Select
     
    End Sub
    Cordialement

    Docmarti.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2015
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mars 2015
    Messages : 58
    Points : 25
    Points
    25
    Par défaut
    Bonjour,
    Je suis novice en vba, je ne comprends pas trop..
    J'ai mis votre second code dans le module 4, il indique une erreur Public qui précède un private Sub.
    Et dans votre premier code le Dim est avant le private sub ?

  8. #8
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Le module 4, c'est un module standard.
    Il faut un module de classe. Vous devez faire menu Insertion/Module de classe.

    Le premier Dim de mon code doit aller en tête du module Userform avant toute procédure.
    Cordialement

    Docmarti.

Discussions similaires

  1. Réponses: 7
    Dernier message: 22/03/2013, 21h24
  2. [Débutant] Remplacement boucle for pour calcul matriciel
    Par LoicS dans le forum MATLAB
    Réponses: 3
    Dernier message: 26/03/2009, 19h26
  3. If dans un for pour tout les passages
    Par Calvein dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/12/2008, 13h03
  4. boucle for pour trier les doublons
    Par gerald57 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2008, 15h40
  5. Remplacer les virgules dans excel
    Par Jojo6 dans le forum Excel
    Réponses: 14
    Dernier message: 04/04/2008, 11h09

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