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 :

Répétition de fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 44
    Par défaut Répétition de fonction
    Bonjour,

    j'ai un code de KIOUANE qui fonctionne très bien. C'est un double tri avec pour valeur 12, 23, 34, 45,... toujours incrémenté de +11.

    Je souhaiterais incrémenté 36 fois.

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    Sub tri()
    Application.ScreenUpdating = False
     
    Dim a, b As Integer
    n = Range("A" & Rows.Count).End(xlUp).Row
     
    Sheets("TRI").Select
    Range("A3:E" & n).Sort Key1:=Range("B3"), Order1:=xlDescending, Header:= _
            xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortTextAsNumbers
     
     
    For j = 1 To 100
       For i = n - 1 To 3 Step -1
     
         If Cells(i, 1).Value = 12 Then
           For y = 1 To n - i
             If Cells(i + y, 1).Value < 12 Then
               a = Cells(i, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i, 1).Value = Cells(i + y, 1).Value
               Cells(i, 1).Offset(0, 1).Resize(, 5).Value = Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i + y, 1).Value = 12
               Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value = a
               Exit For
              End If
            Next
     
         End If
     
      Next
     
     Next
     
     For j = 3 To 100
       For i = n - 1 To 3 Step -1
     
         If Cells(i, 1).Value = 23 Then
           For y = 1 To n - i
             If Cells(i + y, 1).Value < 23 Then
               a = Cells(i, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i, 1).Value = Cells(i + y, 1).Value
               Cells(i, 1).Offset(0, 1).Resize(, 5).Value = Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i + y, 1).Value = 23
               Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value = a
               Exit For
              End If
            Next
     
         End If
     
      Next
     
     Next
     
     For j = 3 To 100
       For i = n - 1 To 3 Step -1
     
         If Cells(i, 1).Value = 34 Then
           For y = 1 To n - i
             If Cells(i + y, 1).Value < 34 Then
               a = Cells(i, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i, 1).Value = Cells(i + y, 1).Value
               Cells(i, 1).Offset(0, 1).Resize(, 5).Value = Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i + y, 1).Value = 34
               Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value = a
               Exit For
              End If
            Next
     
         End If
     
      Next
     
     Next
     
    End sub
    Il y a t'il une possibilité pour réduire le code, et faire uniquement valeur=n+11 par exemple.

    Merci pour votre aide

  2. #2
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Oui tu peux en plaçant par exemple un For h = 12 to 408 step 11

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 44
    Par défaut
    comme cela?

    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
     
    Sub tri()
    Application.ScreenUpdating = False
     
    Dim a, b As Integer
    n = Range("A" & Rows.Count).End(xlUp).Row
     
    Sheets("TRI").Select
    Range("A3:E" & n).Sort Key1:=Range("B3"), Order1:=xlDescending, Header:= _
            xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortTextAsNumbers
     
    For h = 12 To 408 Step 11
        For j = 1 To 100
         For i = n - 1 To 3 Step -1
     
         If Cells(i, 1).Value = 12 Then
           For y = 1 To n - i
             If Cells(i + y, 1).Value < 12 Then
               a = Cells(i, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i, 1).Value = Cells(i + y, 1).Value
               Cells(i, 1).Offset(0, 1).Resize(, 5).Value = Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i + y, 1).Value = 12
               Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value = a
               Exit For
              End If
            Next
     
         End If
     
      Next h
     
     Next
     
    End Sub

  4. #4
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Oui normalement, et remplace là où il y a un 12 avec h et le next h met le en dernier.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 44
    Par défaut
    TROP BIEN!! Merci beaucoup.

    Voici le code de KIOUANE

    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
     
    Sub tri()
    Application.ScreenUpdating = False
     
    Dim a, b As Integer
    n = Range("A" & Rows.Count).End(xlUp).Row
     
    Sheets("TRI").Select
    Range("A3:E" & n).Sort Key1:=Range("B3"), Order1:=xlDescending, Header:= _
            xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortTextAsNumbers
     
     For h = 12 To 408 Step 11
       For j = 1 To 100
         For i = n - 1 To 3 Step -1
     
     
         If Cells(i, 1).Value = h Then
           For y = 1 To n - i
             If Cells(i + y, 1).Value < h Then
               a = Cells(i, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i, 1).Value = Cells(i + y, 1).Value
               Cells(i, 1).Offset(0, 1).Resize(, 5).Value = Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value
               Cells(i + y, 1).Value = h
               Cells(i + y, 1).Offset(0, 1).Resize(, 5).Value = a
               Exit For
              End If
            Next
     
         End If
     
      Next
     
     Next
     
    Next h
     
    End Sub

  6. #6
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Romain, après réflexion, j'ai optimisé la macro pour que le tri spécial s'étend sur toute la ligne, peu importe le nombre de colonne.

    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
    Sub x()
     
    Dim a, b As Integer
    n = Range("A" & Rows.Count).End(xlUp).Row
     
     
     Range("A3:B" & n).Sort Key1:=Range("B3"), Order1:=xlDescending, Header:= _
            xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortTextAsNumbers
     
    For v = 12 To 408 Step 11
      For j = 1 To 100
        For i = n - 1 To 3 Step -1
     
         If Cells(i, 1).Value = v Then
           For y = 1 To n - i
             If Cells(i + y, 1).Value < v Then
                Application.CutCopyMode = False
                Cells(i, 1).EntireRow.Cut
                Cells(i + y + 1, 1).Select
                Selection.Insert Shift:=xlDown
     
     
              Exit For
              End If
            Next
     
         End If
     
      Next
     
     Next
    Next
     
     
    End Sub

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    n = Range("A" & Rows.Count).End(xlUp).Row
     
    Sheets("TRI").Select
    ......
    et si au moment de l'exécution, tu n'es pas sur la bonne feuille, tu vas te planter, autan se passer des "Select" et utiliser "With"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With Sheets("TRI")
      n = .Range("A" & .Rows.Count).End(xlUp).Row
      .Range("A3:E" & n).Sort Key1:=.Range("B3"), Order1:=xlDescending, Header:= _
            xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortTextAsNumber
    'et un "." devant "Cells"
    '.......
    '.....
    End With
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2016
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 44
    Par défaut
    Merci pour vos réponses, ça m'a bien aidé.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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