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 :

Est ce possible de simplifier ce code ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut Est ce possible de simplifier ce code ?
    bonjour le forum

    Voila j'ai des données qui s'enregistre dans une feuille de calcule nommée TCOOLANT avec des texte box et des option button que j'ai renommé pour mes besoins

    les textbox = VDM1 etc
    les optionbutton = OPM1 etc

    je cherche si c'est possible de simplifier mon code que voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sheets("TCOOLANT").Range("A65536").End(xlUp).Offset(1, 0).Value = CStr(VDM1)
     
        Sheets("TCOOLANT").Range("B65536").End(xlUp).Offset(1, 0).Value = CStr(VDM2)
           Sheets("TCOOLANT").Range("C65536").End(xlUp).Offset(1, 0).Value = CStr(VDM3)
            Sheets("TCOOLANT").Range("D65536").End(xlUp).Offset(1, 0).Value = CStr(VDM4)
     
        Sheets("TCOOLANT").Range("E65536").End(xlUp).Offset(1, 0).Value = IIf(OPM1, "Liège", "")
        Sheets("TCOOLANT").Range("E65536").End(xlUp).Offset(1, 0).Value = IIf(OPM2, "Jemeppe", "")
           Sheets("TCOOLANT").Range("F65536").End(xlUp).Offset(1, 0).Value = IIf(OPM3, "Liège", "")
        Sheets("TCOOLANT").Range("F65536").End(xlUp).Offset(1, 0).Value = IIf(OPM4, "Jemeppe", "")
    et ainsi de suite pour mes autres textbox et option buttons

    d'avance merci pour votre aide

  2. #2
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Pourrai tu préciser un peu.
    Tu pourrai essayer d'ecrire ça sous forme de boucle, mais avec ce que tu as donné je suis pas sur que ça vaille le coup. Combien de ligne as tu?

    Tu peux déja faire set Sh=sheets("ta feuille") si tu veux l'appeler souvent ça évite que ce soit long

    sinon en faisant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with Sheet("ta feuille")
    .range...
    .range...
    ...
    end with
    Si la feuille en question est active alors tu pêux même enlever le Sheet("").

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut
    merci pour ta réponse

    j'ai plus ou moin 40 textbox et la meme chose avec des option button

    actuelement je l'ai fait comme cité plus haut
    mais mon application plante tout le temp
    merci

  4. #4
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    En gros tu as 40 colonnes avec des textbox en bas de la colonne et en fonction de ce qu'il y a dans les textbox de la colonne tu veux ecrire un truc dans la case en dessous?

    pour la boucle tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i=1 to i=n° de la dernière colonne
    Sheets("TCOOLANT").column(i).End(xlUp).Offset(1, 0).Value = CStr(VDM & i)
    next i
    même chose pour les opm

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut
    Citation Envoyé par diude54 Voir le message
    En gros tu as 40 colonnes avec des textbox en bas de la colonne et en fonction de ce qu'il y a dans les textbox de la colonne tu veux ecrire un truc dans la case en dessous?
    sorry j'ai pas été asser clair

    j'ai un userform multi page

    avec des textbox et des option buton dont je doit recuperer les valeurs pour aller les mettre sur une feuille en collonne en fonction de la date du jour
    donc aujourdh'ui pour commencer ma premire textbox sera en A2 la deuixieme en B2 et ainsi de suite pour les autres et demain la meme chose mais dessous donc A3, B3 etc

  6. #6
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Même idée que précedemment mais remplace le numéro de la dernière colonne par le numero de la dernière textbox.

    tu devrais aussi essayer de mettre au lieu

    plutôt

    Aussi je voit pas l'intéret de faire Cstr, si tu utilise juste

    ce que tu as saisi dans la textbox sera inscrit dans la cellule

    Tu devrais aussi pouvoir lister les textbox de ton userform et faire un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim txt as Oleobject.textbox
     
    For each txt in userform1
    ton code
    next txt
    mais je ne sais plus comment on declare une textbox.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut
    Citation Envoyé par diude54 Voir le message
    tu devrais aussi essayer de mettre au lieu

    Aussi je voit pas l'intéret de faire Cstr, si tu utilise juste

    ce que tu as saisi dans la textbox sera inscrit dans la cellule
    j'ai mis le Cdtr car dans mes textbox c'est un nombre comme valeur et j'en ai besoin car c'est recopier dans la cellule sous forme de texte

    Citation Envoyé par diude54 Voir le message
    pour la boucle tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i=1 to i=n° de la dernière colonne
    Sheets("TCOOLANT").column(i).End(xlUp).Offset(1, 0).Value = CStr(VDM & i)
    next i
    même chose pour les opm
    ton code ne marche pas j'ai une erreur 438
    méthode non gérée par l'objet

  8. #8
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Salut,

    Essaie comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("TCOOLANT").column(i).End(xlUp).Offset(1, 0).Value = CStr(Controls("VDM" & i))
    ++
    Minick

  9. #9
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    exact ça ne fonctionne pas. On ne ppeut pas mettre de variable pour le nom d'un objet.
    C'est le VDM & i qui ne fonctionne pas.
    Tout de suite je ne vois pas comment contourner ça.
    Cherche plutot du coté de for each textbox in userform

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut
    Citation Envoyé par Minick Voir le message
    Salut,

    Essaie comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("TCOOLANT").column(i).End(xlUp).Offset(1, 0).Value = CStr(Controls("VDM" & i))
    ++
    Minick
    meme message d'erreur

    voila mon fichier que j'aimerai simplifier

    http://www.megaupload.com/?d=5XWFV1V3

  11. #11
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Bizarre ca fonctionne tres bien chez moi...

    ++

    Tu dis avoir renommé tes controls, mais dans le fichier joint cen'est pas le cas.
    Donc forcement ca ne marchera pas...

    ++

    Je viens de m'apercevoir d'une petite coquille.
    Il manque 1 's' a columns(i)

    EDIT:
    Si tu as un fichier ou tu as teste avec des controls renommés essaie deja ca.
    Ensuite il te faudra modifier ton fichier.
    Bon courage, et pense a lister les noms d'origines et les nouveaux noms
    parce que tu vas devoir corriger tout ca ensuite dans le code...

    ++

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut
    Citation Envoyé par Minick Voir le message
    Je viens de m'apercevoir d'une petite coquille.
    Il manque 1 's' a columns(i)

    EDIT:
    Si tu as un fichier ou tu as teste avec des controls renommés essaie deja ca.
    Ensuite il te faudra modifier ton fichier.
    Bon courage, et pense a lister les noms d'origines et les nouveaux noms
    parce que tu vas devoir corriger tout ca ensuite dans le code...

    ++
    ok merci cela fonctionne pour les textbox merci beaucoup
    en ce qui concernent les optionbutton c'est la même chose ? tout en sachant que par exemple le option button 1 et 2 doivent s'inscrire dans la meme collone et pas une a la suite de l'autre
    merci

    J'ai quand meme un probleme , à chaque encodage cela remplace ma ligne précédente . moi je souhaiterai qu'elle se mettent en dessous

    merci

  13. #13
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Essaie en remplacant le columns par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...cells(65536, i).End(xlup...
    ++

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut
    thanks

    Peux tu m'expliquer pour les option buttons si cela est possible aussi
    merci

  15. #15
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    c'est chaud vu que utilise un texte (et pas l'etat)
    organiser pour savoir quel texte marquer.

    J'essaierai de te faire un exemple demain pour te montrer comme je ferais.
    J'ai un peu de mal a trouver une facon simple de l'expliquer

    ++
    Minick

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut
    j'ai un autre probleme
    j'utilise ce code pour faire apparraitre un bouton lorsque toute mes texbox sont remplie

    code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Dim M() As New soir, x As Byte, ctrl As Control
    Private Sub UserForm_Initialize()
    For Each ctrl In Controls
    If TypeOf ctrl Is MSForms.TextBox Then
    x = x + 1
    ReDim Preserve M(1 To x): Set M(x).txt = ctrl
    End If: Next
    End Sub
    et le module de classe suivanr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
    Public WithEvents txt As MSForms.TextBox, x As Byte, ctrl As Control
    Private Sub txt_Change()
    For Each ctrl In UserForm2.Controls
    If TypeOf ctrl Is MSForms.TextBox Then
    If ctrl <> "" Then x = x + 1
     End If: Next ctrl
    If x = 28 Then 'ne pas oublier de modifier
    UserForm2.CommandButton1.Visible = True
    Else
    UserForm2.CommandButton1.Visible = False
    End If: x = 0
    End Sub
    lorsque j utilise le code ci dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click() 'bouton valider
    For p = 1 To 10 ' =n° de la dernière colonne
    Sheets("soir").Cells(65536, p).End(xlUp).Offset(1, 0).Value = CStr(Controls("VDS" & p))
    Next p
    End Sub
    j'ai le message d'erreur suivant

    erreur de compilation
    variable non définie
    d"apres l aide on me dit que c'est parce que j utilise une option explicite
    et je sais pas comment définir ma variable

    merci pour votre aide

  17. #17
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Est ce que VDS1 à VDS10 existent et sont bien nommés comme tels?
    Pour moi si tu peux cliquer sur ton commandbuttton1 cela signifie que tes macros précedant fonctionne sinon il serait caché.

    Citation Envoyé par revemane Voir le message

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Dim M() As New soir, x As Byte, ctrl As Control
    Private Sub UserForm_Initialize()
    For Each ctrl In Controls
    If TypeOf ctrl Is MSForms.TextBox Then
    x = x + 1
    ReDim Preserve M(1 To x): Set M(x).txt = ctrl
    End If: Next
    End Sub
    Tu avais la solution quand je te disais de chercher du coté de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For each textbox in userform

  18. #18
    Membre chevronné
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click() 'bouton valider
    For p = 1 To 10 ' =n° de la dernière colonne
    Sheets("soir").Cells(65536, p).End(xlUp).Offset(1, 0).Value = CStr(Controls("VDS" & p))
    Next p
    End Sub
    Declare p en byte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click() 'bouton valider
    dim p as Byte
     
    For p = 1 To 10 ' =n° de la dernière colonne
    Sheets("soir").Cells(65536, p).End(xlUp).Offset(1, 0).Value = CStr(Controls("VDS" & p))
    Next p
    End Sub
    ++
    Minick

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 173
    Par défaut
    merci pour l'info


    dit je pensait plutot que de mettre des optionbutton je faisait ca avec des combobox

    est ce que ce serait plus facile

    et aussi comment intégrer ces combobox renomée en CB1, etc pour le besoin

    dans le code de visibilité du bouton et dans le code pour enregistrer les données

    d'avance merci

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Chaque jour de nouvelles données à ajouter en fin de colonnes, ça j'ai compris.
    Une question : Ces données sont-elles placées sur la même ligne pour un jour donné ?


    Une remarque : Dans ton code, tu places déjà deux fois tes données dans la même cellules
    Sheets("TCOOLANT").Range("F65536").End(xlUp).Offset(1, 0).Value = IIf(OPM3, "Liège", "")
    Sheets("TCOOLANT").Range("F65536").End(xlUp).Offset(1, 0).Value = IIf(OPM4, "Jemeppe", "")
    Ce n'est pas forcément une erreur, c'est toi qui vois
    Mais réponds à ma question

    Edit
    Si ce n'est pas une erreur, j'imbriquerais plutôt les deux IIF pour une question de lisibilité pour un tiers qui ne connaît pas ton code (ici, le tiers c'est moi )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           Sheets("TCOOLANT").Range("F65536").End(xlUp).Offset(1, 0).Value = IIf(OPM3, "Liège", IIf(OPM4, "Jemeppe", ""))
    Mais attention, la condition n'est pas exactement la même (si OPM3 = "Liège" et OPM4= "Jemeppe", c'est la première condition qui sera remplie)

Discussions similaires

  1. Réponses: 15
    Dernier message: 09/05/2008, 17h11
  2. [PHP-JS] Est il possible d'intégrer du code PHP dans du code javacript ?
    Par bilou95 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/07/2007, 09h05
  3. Réponses: 2
    Dernier message: 12/07/2007, 15h07
  4. Réponses: 6
    Dernier message: 07/08/2006, 11h26
  5. Réponses: 4
    Dernier message: 03/02/2006, 10h08

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