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 :

Amélioration d'un code [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut Amélioration d'un code
    Bonsoir,

    J'ai le code suivant:
    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
     
    Private Sub CommandButton3_Click()
    Dim num As Integer
     
    num = Range("AX2").Value
        If num < 6 Then
            GoTo suivant2
        Else
            Range("aq2").Value = 0
            If num > 6 Then
                Range("AR2").Value = 0
            Else
                GoTo suivant2
                If num > 7 Then
                    Range("AS2").Value = 0
                Else
                    GoTo suivant2
                    If num > 8 Then
                        Range("AT2").Value = 0
                    Else
                        GoTo suivant2
                        If num > 9 Then
                            Range("AU2").Value = 0
                            GoTo suivant2
                        End If
                    End If
                End If
            End If
        End If
     
    suivant2:
    num = Range("AX3").Value
        If num < 6 Then
            GoTo suivant3
        Else
            Range("AQ3").Value = 0
            If num > 6 Then
                Range("AR3").Value = 0
            Else
                GoTo suivant3
                If num > 7 Then
                    Range("AS3").Value = 0
                Else
                    GoTo suivant3
                    If num > 8 Then
                        Range("AT3").Value = 0
                    Else
                        GoTo suivant3
                        If num > 9 Then
                            Range("AU3").Value = 0
                            GoTo suivant3
                        End If
                    End If
                End If
            End If
        End If
    Que je dois répéter 70 fois.
    J'ai essayé d'effectuer une boucle, et ça plante à chaque fois.

    Merci d'avance de votre aide

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Points : 617
    Points
    617
    Par défaut
    Citation Envoyé par rch05 Voir le message
    Bonsoir,

    J'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .........
    ........
    Que je dois répéter 70 fois.
    J'ai essayé d'effectuer une boucle, et ça plante à chaque fois.
    une boucle sur quoi ?

  3. #3
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    Bonsoir babaothe,

    Merci de m'avoir répondu.
    J'aimerai trouver comment effectuer une boucle pour ne pas répéter le même code.

    Avant, j'incrémente de 1 la plage AQ2:AW77

    Puis, j' effectue le test sur la même colonne et en decendant chaque fois d'une ligne(AX2, AX3, AX4 etc...)
    Selon la valeur de la cellule AX.., je remets à zéro les cellules de la plage AQ2:AW77.
    Exemple:
    Si AX2 = 8, les celulles AQ2,AR2 et AS2 sont remis à 0, puis je decends d'une cellule. Si AX3 = 6, la cellule AQ3 est remis à 0 et cela jusqu'a la ligne 77.

    j'espère que mon explication est compréhensive.

    Merci d'avance de ton aide

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Il y a des incohérences dans ce code
    si num < 6 --> suivant2
    si num >= 6 --> Range("aq2").Value = 0
    si num > 6 --> Range("AR2").Value = 0
    sinon --> suivant2
    Le reste du code ne sert à rien
    Revoir la logique du résultat souhaité

  5. #5
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    je comprends pas.

    Dans le code, il y a:
    Si AX2 est < à 6, je vais à suivant2 (Donc je decends d'une cellule AX3)
    Sinon, je remets à 0 le cellule AQ2
    Puis, si AX2 est > 6, je remets à 0 la cellule AR2, sinon je vais à suivant2 puisque AX2 n'est pas > à 6, donc il est = à 6
    Et ansi de suite, jusqu'a la fin du test de la cellule AX2
    Quand le test est terminé, je decends à la cellule suivante AX3, et je recommence le même test sur cette ligne (AQ3....), et cela jusqu'a la cellule AX77.

    j'épère que l'on se comprend?

    Merci

    Bonjour,

    Voici une image du tableau, afin d'avoir urn meilleur compréhension de ce que je recherche.

    Merci d'avance de votre aide
    Cldt

  6. #6
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    Bonjour Hela,

    Effectivement tu as raison.
    Je n'allais pas plus loin que le 7. L'imbrication des IF, ce n'était pas ça
    J'ai modifié le code pour que cela fonctionne
    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
     
    Private Sub CommandButton1_Click()
    Dim num As Integer
     
    num = Range("AX2").Value
        If num < 6 Then
            GoTo suivant2
        Else
            Range("aq2").Value = 0
        End If
        If num >= 7 Then
            Range("AR2").Value = 0
        Else
            GoTo suivant2
        End If
        If num >= 8 Then
            Range("AS2").Value = 0
        Else
            GoTo suivant2
        End If
        If num >= 9 Then
            Range("AT2").Value = 0
        Else
            GoTo suivant2
        End If
        If num >= 10 Then
            Range("AU2").Value = 0
        End If
     
     
    suivant2:
    num = Range("AX3").Value
        If num < 6 Then
            GoTo suivant3
        Else
            Range("AQ3").Value = 0
        End If
        If num >= 7 Then
            Range("AR3").Value = 0
        Else
            GoTo suivant3
        End If
        If num >= 8 Then
            Range("AS3").Value = 0
        Else
            GoTo suivant3
        End If
        If num >= 9 Then
            Range("AT3").Value = 0
        Else
            GoTo suivant3
        End If
        If num >= 10 Then
            Range("AU3").Value = 0
        End If
     
    suivant3:
    End Sub
    je vais voir pour imbriquer des IF.... en espérant que j'y arrive.
    Mais ne peut on pas effectuer une boucle, afin d'éviter la répétition du code.
    C'est là que ça coince.

    Merci d'avance
    Cldt

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une proposition si j'ai bien compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim i As Integer, Num As Integer
     
    For i = 2 To 77
        Num = Range("AX" & i).Value
        If Num >= 6 Then Range("AQ" & i).Value = 0
        If Num >= 7 Then Range("AR" & i).Value = 0
        If Num >= 8 Then Range("AS" & i).Value = 0
        If Num >= 9 Then Range("AT" & i).Value = 0
        If Num >= 10 Then Range("AU" & i).Value = 0
    Next i
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 313
    Points : 151
    Points
    151
    Par défaut
    Merci mercatog
    C'est ce que je voulais réaliser et que je ne suis pas arrivé à effectuer.
    Super!

    Bon WE et encore merci

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Le résultat escompté est trouvé, améliorons donc le code
    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
    Dim i As Integer, Num As Integer
     
    For i = 2 To 77
        Num = Range("AX" & i).Value
        If Num >= 6 Then
            Range("AQ" & i).Value = 0
            If Num >= 7 Then
                Range("AR" & i).Value = 0
                If Num >= 8 Then
                    Range("AS" & i).Value = 0
                    If Num >= 9 Then
                        Range("AT" & i).Value = 0
                        If Num >= 10 Then Range("AU" & i).Value = 0
                    End If
                End If
            End If
        End If
    Next i
    Ou bien une autre proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Integer, Num As Integer, j As Integer
     
    For i = 2 To 77
        Num = Range("AX" & i).Value
        If Num >= 6 Then
            For j = 10 To 6 Step -1
                If (Num \ j) >= 1 Then Exit For
            Next j
            Range(Cells(i, 43), Cells(i, 37 + j)).Value = 0
        End If
    Next i
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. amélioration d'un code "parcourir"
    Par rob1son76 dans le forum VBA Access
    Réponses: 2
    Dernier message: 29/08/2011, 14h04
  2. [MySQL] Optimisation et amélioration d'un code utilisant Artichow
    Par heretik25 dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 05/08/2011, 21h53
  3. Amélioration d'un code VBA
    Par Jerome25 dans le forum VBA Access
    Réponses: 7
    Dernier message: 02/08/2011, 15h43
  4. Réponses: 3
    Dernier message: 29/01/2011, 20h17
  5. Problème d'amélioration d'un code source
    Par w1Re1337 dans le forum Réseau
    Réponses: 2
    Dernier message: 28/01/2010, 14h49

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