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 :

Simplification de 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 habitué
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut Simplification de code
    Bonjour,

    je souhaiterais réduire mon code.
    quelle fonction me permettrait de taper moins de ligne "identiques" ?
    voici un petit bout de mon code.
    j'ai une 30ène de lignes identiques à saisir et vérifier à chaque mise à jour.

    merci d'avance

    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
        If Sheets("Supports").Cells(27, 7).Value / Sheets("Supports").Cells(26, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If
        If Sheets("Supports").Cells(29, 7).Value / Sheets("Supports").Cells(28, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If
        If Sheets("Supports").Cells(45, 7).Value / Sheets("Supports").Cells(44, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If
        If Sheets("Supports").Cells(47, 7).Value / Sheets("Supports").Cells(46, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    afin de vérifier que les suites sont parfaitement logiques ... et comprendre le but de ton Goto, peux-tu poster l'intégralité de la procédure ?

    en l'état actuel de ce que tu fournis, un simple Array {27,29,45,47} à parcourir pour boucler sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets("Supports").Cells(Variable, 7).Value / Sheets("Supports").Cells(Variable - 1, 7).Value < 1.04 Then
    Variable etant l'élément parcouru dans ton array

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    il manquait juste les 3 premières lignes

    en gros :
    - hgc est la hauteur d'une poutre
    - j'impose une valeur à hgc
    - je calcul la flèche de la poutre et sa contrainte sur ma feuille "Supports"
    - les lignes IF.... servent à vérifier que la flèche et la contrainte sont en dessous de valeurs admissibles : valeur admissible / valeur réelle < 1.04
    - si c'est faux, je boucle pour augmenter la hauteur hgc de 5 mm

    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
     
    hgc = 100
    testgcb:
        Range("Q18").FormulaR1C1 = hgc
        If Sheets("Supports").Cells(27, 7).Value / Sheets("Supports").Cells(26, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If
        If Sheets("Supports").Cells(29, 7).Value / Sheets("Supports").Cells(28, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If
        If Sheets("Supports").Cells(45, 7).Value / Sheets("Supports").Cells(44, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If
        If Sheets("Supports").Cells(47, 7).Value / Sheets("Supports").Cells(46, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Déjà : utiliser la propriété FormulaR1C1 pour définir la valeur ) donner à une cellule est plus qu'abusif

    Je ne comprends par ailleurs pas la logique (voire la finalité) de lignes de code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    testgcb:
        Range("Q18").FormulaR1C1 = hgc
        If Sheets("Supports").Cells(27, 7).Value / Sheets("Supports").Cells(26, 7).Value < 1.04 Then
            hgc = hgc + 5
            GoTo testgcb
        End If
    qui ne peuvent que tourner en boucle pour toujours agir sur la valeur de toujours la même cellule
    Qu'est-ce que c'est, que le "secret" d'un tel mécanisme type "Louis XVI" (où le dernier qui parle est celui qui a raison) ?

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 9
    Par défaut
    Citation Envoyé par unparia Voir le message
    Déjà : utiliser la propriété FormulaR1C1 pour définir la valeur ) donner à une cellule est plus qu'abusif
    je n'en connais pas d'autre. je débute

    Citation Envoyé par unparia Voir le message
    Je ne comprends par ailleurs pas la logique (voire la finalité) de lignes de code du genre (...)
    qui ne peuvent que tourner en boucle pour toujours agir sur la valeur de toujours la même cellule
    c'est un peu le but ici

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    je n'en connais pas d'autre. je débute
    Je comprends que l'on débute. Mais lorsque l'on débute, il faut commencer par le début. C'est d'ailleurs ainsi (et pas autrement) que j'ai moi-même débuté.
    Veux-tu donc s'il te plait commencer par consulter ton aide interne VBA pour y apprendre ce qu'est un objet Range et quels en sont les membres et propriétés et leur définition ?
    Merci de le faire.

    EDIT :
    c'est un peu le but ici
    Ah bon ?
    Dans ce cas (puisque l'on est dans la posture à la "Louis XVI"), parcours donc ta plage de bas en haut et arrête-toi au 1er trouvé ! Il sera forcément celui que tu trouve en dernier en parcourant de haut en bas

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

Discussions similaires

  1. Simplification de code
    Par lodan dans le forum Langage
    Réponses: 4
    Dernier message: 20/09/2006, 19h28
  2. Simplification de code
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2006, 21h51
  3. Simplification de code (suite)
    Par Jeffboj dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 22h34
  4. simplification de code
    Par Jeffboj dans le forum Access
    Réponses: 11
    Dernier message: 11/04/2006, 15h09
  5. [c#] Simplification de code
    Par Revan012 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/02/2006, 16h44

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