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 :

Comment condenser ce code? [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut Comment condenser ce code?
    Bonjour le forum,

    Je viens vers vous car je pense qu'il est possible de raccourcir ce code, pourriez-vous me donner un coup de main?,

    Peut-être en créant une boucle?

    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
    Private Sub TextBox11_Change()
    Range("A2") = Val(TextBox11)
    End Sub
     
    Private Sub TextBox12_Change()
    Range("B2") = Val(TextBox12)
    End Sub
    Private Sub TextBox13_Change()
    Range("C2") = Val(TextBox13)
    End Sub
    Private Sub TextBox14_Change()
    Range("D2") = Val(TextBox14)
    End Sub
    Private Sub TextBox15_Change()
    Range("E2") = Val(TextBox15)
    End Sub
    Private Sub TextBox16_Change()
    Range("F2") = Val(TextBox16)
    End Sub
    Private Sub TextBox17_Change()
    Range("G2") = Val(TextBox17)
    End Sub
    Private Sub TextBox18_Change()
    Range("H2") = Val(TextBox18)
    End Sub
    Private Sub TextBox19_Change()
    Range("I2") = Val(TextBox19)
    End Sub
    Private Sub TextBox20_Change()
    Range("J2") = Val(TextBox20)
    End Sub
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Effectivement c'est possible, et il y a plusieurs solutions mais avant tout
    Est-ce qu'il est nécessaire que dès le changement de valeurs de tes textbox il faille tout de suite les mettre à jour dans ta feuille Excel ou est-ce que cela peut attendre que tu aies tout saisi et mettre à jour tout en seule fois ?

    tu dis

    A+

  3. #3
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Bonjour Igloobel et deedolith,

    Et merci d'avance,

    #Igloobel
    Voilà, j'ai un userform, avec 30 textbox (dans le code ci-dessus il y en n'a que 10), je dois remplir, évidemment 30 cellules.
    A partir de c 30 cellules, un calcul est fait pour compter le nombre de fois qu'un numéro est présent (le code n'est pas encore réalisé car je cherche encore).

    Pour cela je remplis chaque textbox, en sachant qu'il y a 3 groupes de textbox avec 10 textbox dans chaque (donc 30 textbox).

    Un numéro ne peux être plusieurs fois dans le même groupe, ce qui fait qu'un numéro ne peut être comptabilisé que 3 fois maximum, par contre plusieurs numéros peuvent être cités 3x ou 2x ou 1x.

    A la suite de ce calcul, un autre groupe de 10 textbox, doit afficher le résultat dans l'ordre d'apparition 3x-2x-1x.

    A chaque fin de calcul, le feuille doit être vidée soit par fermeture du l'userform, soit par bouton "RAZ"

    Je joins le fichier avec lequel je commence à travailler, pour l'instant il n'y a pas grand chose

    #Deedolith

    Je ne comprend pas ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox11_Change()
        '//Range("A2") = Val(TextBox11)
        Call CopyVal("A2", TextBox11)
    End Sub
     
    Private sub CopyVal(ByVal strAddress as String, ByRef ctrlSrc as Control)
        Range(strAddress).Value = Val(ctrlSrc.Value)
    End Sub
    Pourrai-tu me l'expliquer?

    Pièce jointe 166992Merci pour votre aide

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Au lieu d'écrire: Range("C2") = Val(TextBox13) dans chaque gestionnaire d'événement, je te propose d'écrire: Call CopyVal("A2", TextBox11), c'est plus court.

    La procédure CopyVal fait exactement ce que tu as écrit précédemment, elle écrit dans une cellule la valeur du contrôle textbox.
    L'adresse de la cellule et le contrôle sont passé en paramètres à la procédure.

    PS: le mot clef Call est optionnel, tu peux aussi bien écrire: CopyVal "A2", TextBox11

  5. #5
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Re,
    #deedolith

    Merci pour cette explication, mais ce bout de code correspond à quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private sub CopyVal(ByVal strAddress as String, ByRef ctrlSrc as Control)
        Range(strAddress).Value = Val(ctrlSrc.Value)
    End Sub
    Merci encore

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par Sebphyto Voir le message
    Re,
    #deedolith

    Merci pour cette explication, mais ce bout de code correspond à quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private sub CopyVal(ByVal strAddress as String, ByRef ctrlSrc as Control)
        Range(strAddress).Value = Val(ctrlSrc.Value)
    End Sub
    Merci encore
    C'est la procédure CopyVal, comme ce n'est pas une instruction native VBA, et que je ne la sort pas de mon chapeau, il faut bien l'écrire quelque part, sinon elle ne sera pas trouvée.

  7. #7
    Invité
    Invité(e)
    Par défaut
    tu as 30 contrôles; tu scan tes contrôle TextBox1 à TextBox30 pour i de 1 à 30
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I = 1 To 30
        Range("A2").Offset(0,i-1).Value = Val(Me.Controls("TextBox" & I))
    Next

  8. #8
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Re Rdurupt,

    Ok pour le contrôle des textbox, mais ici cela ne s'applique que pour la cellule A2???

    J'ai 3 groupes de 10 textbox qui doivent s'inscrire comme cela en feuil2:
    1er groupe de A1 à J1
    2eme groupe de A2 à J2
    3eme groupe de A3 à J3.

    Voici le fichier
    Pièce jointe 166999

    Merci

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Si le but est d'ecrire moin de code, vu que l'on a affaire a plusieurs gestionnaires d'evennement différents, je ne voit pas vraiment de solution pour raccourcir.

    Par contre, tu peux factoriser avec une procédure, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox11_Change()
        '//Range("A2") = Val(TextBox11)
        Call CopyVal("A2", TextBox11)
    End Sub
     
    Private sub CopyVal(ByVal strAddress as String, ByRef ctrlSrc as Control)
        Range(strAddress).Value = Val(ctrlSrc.Value)
    End Sub

  10. #10
    Invité
    Invité(e)
    Par défaut
    rajoute un bouton pour valider ton formulaire!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click()
    'Le code Asci 65= [A] -> i=11-> 54+i=65-> Chr(54 + I)=[A]
    Dim I As Integer
    For I = 11 To 20
        Range(Chr(54 + I) & "2").Value = Val(Me.Controls("TextBox" & I))
    Next
    End Sub

  11. #11
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Bonjour rdurupt,

    Merci de t'intéresser,

    Pourrais-tu m'expliquer la raison?

    Désolé je débute, et rentre en formation Excel VBA en Février

    Citation Envoyé par rdurupt Voir le message
    rajoute un bouton pour valider ton formulaire!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click()
    'Le code Asci 65= [A] -> i=11-> 54+i=65-> Chr(54 + I)=[A]
    Dim I As Integer
    For I = 11 To 20
        Range(Chr(54 + I) & "2").Value = Val(Me.Controls("TextBox" & I))
    Next
    End Sub

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

Discussions similaires

  1. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    Réponses: 13
    Dernier message: 11/08/2005, 13h04
  2. [C#] Comment générer le code à partir du WSDL ?
    Par Piolet dans le forum Services Web
    Réponses: 2
    Dernier message: 27/08/2004, 13h30
  3. [Juridique] Comment réutiliser le code source d'une classe ?
    Par mathieu dans le forum Général Java
    Réponses: 8
    Dernier message: 17/05/2004, 13h40
  4. [VB.NET] Comment ecrire du code entre <title>
    Par ykane dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/05/2004, 16h58
  5. [debutant] comment appliquer le code d'un bouton
    Par philippejuju dans le forum MFC
    Réponses: 3
    Dernier message: 20/01/2004, 10h56

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