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 :

Incrémenter décrémenter simultanément dans une boucle [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de eliniel
    Femme Profil pro
    Ingénieure Essais et validation
    Inscrit en
    Septembre 2014
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieure Essais et validation
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 115
    Par défaut Incrémenter décrémenter simultanément dans une boucle
    Bonjour,
    Je suis actuellement en train d'optimiser mon programme et je rencontre une difficultée: dans une même boucle, je dois pouvoir agmenter une variable h de 1 et en même temps décrémenter de 1 la variable j.
    Pour le moment, vu que je n'arrive qu'à faire une boucle for avec une seule variable, j'ai ma boucle for qui répète 12 fois (h=1 to 12) le contenu de la boucle mais comme je n'arrive pas à décrémenter de 1 en même temps, j'ai 12x fois le même contenu avec juste le numéro de cellule qui change.

    Pour le moment, j'ai cette boucle qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
       For h = 0 To NbSheets
     
            'Copie des valeurs par Intervalle
            Sheets("resultats").Select
            Range(Cells(2 + (5 * h), 10), Cells(5 + (5 * h), 43)).Select 'Incrémente la plage d'intervalle
            Selection.NumberFormat = "0.000"
            Application.CutCopyMode = False
            Selection.Copy
            Sheets(h + 3).Select   'Car (1) est la troisième feuille du classeur
            Range("C12").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=True
            Selection.NumberFormat = "0.000"   'affiche le nombre  avec 3 décimales
    Les valeurs se copient bien sur chaque page mais lorsque je cherche à indiquer en plus le nombre de valeur sur la même page, je n'arrive pas.
    Du coup j'ai juste recopié la partie du code en adaptant le numéro...

    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
     'Nb valeurs/intervalle
        Sheets("resultats").Select
        Cells(3, 7).Select
        Selection.Copy
        Sheets(Sheets.Count - 11).Select
        Range("C11").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
        Sheets("resultats").Select
        Cells(8, 7).Select
        Selection.Copy
        Sheets(Sheets.Count - 10).Select
        Range("C11").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

    Peut-on avoir une boucle for avec deux variables?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    dans ton code, je ne voie pas la variable j.

    en attendant ta réponse, déjà une première optimisation!
    Code première fenêtre de code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     For h = 0 To NbSheets
     
            'Copie des valeurs par Intervalle
            Sheets("resultats").Range(Cells(2 + (5 * h), 10), Cells(5 + (5 * h), 43)).NumberFormat = "0.000"
            Sheets(h + 3).Range("C12").NumberFormat = "0.000"
            l = Sheets("resultats").Range(Cells(2 + (5 * h), 10), Cells(5 + (5 * h), 43)).Rows.Count - 1
            c = Sheets("resultats").Range(Cells(2 + (5 * h), 10), Cells(5 + (5 * h), 43)).Columns.Count - 1
            Sheets(h + 3).Range( Sheets("resultats").Range("C12"), Sheets("resultats").Range("C12").Offset(c, l)) = Application.Transpose(Sheets("resultats").Range(Cells(2 + (5 * h), 10), Cells(5 + (5 * h), 43)))
    Code deuxième : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets(Sheets.Count - 11).Range("C11") = Sheets("resultats").Cells(3, 7)
    Sheets(Sheets.Count - 10).Range("C11") = Sheets("resultats").Cells(8, 7)
    Dernière modification par Invité ; 30/10/2014 à 09h28.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Citation Envoyé par Altalya Voir le message
    Incrémenter décrémenter simultanément dans une boucle
    Est-ce que cette exemple correspond à ce que tu recherche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Test()
        Dim i As Long, j As Long
        For i = 0 To 10
            j = 10 - i
            Debug.Print i, j
        Next
    End Sub

  4. #4
    Membre éclairé Avatar de eliniel
    Femme Profil pro
    Ingénieure Essais et validation
    Inscrit en
    Septembre 2014
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieure Essais et validation
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 115
    Par défaut
    En effet, en fait, j'avais dans l'idée de réunir les deux programmes en 1 vu qu'ils traitent les mêmes feuilles.
    Donc quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For h=0 to NbSheets and j=12 to 0 step-1
    ce qui aurait donné quelque chose du genre
    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
     
     For h = 0 To NbSheets and j=12 to 0 step -1
     'Copie des valeurs par Intervalle
            Sheets("resultats").Select
            Range(Cells(2 + (5 * h), 10), Cells(5 + (5 * h), 43)).Select 'Incrémente la plage d'intervalle
            Selection.NumberFormat = "0.000"
            Application.CutCopyMode = False
            Selection.Copy
            Sheets(h + 3).Select   'Car (1) est la troisième feuille du classeur
            Range("C12").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=True
            Selection.NumberFormat = "0.000"   'affiche le nombre  avec 3 décimales
     
    Sheets("resultats").Select
        Cells(3+(5*h), 7).Select
        Selection.Copy
        Sheets(Sheets.Count - j.Select
        Range("C11").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

  5. #5
    Invité
    Invité(e)
    Par défaut
    Pas mieux!
    Citation Envoyé par Nouveau2 Voir le message
    Salut,


    Est-ce que cette exemple correspond à ce que tu recherche ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Test()
        Dim i As Long, j As Long
        For i = 0 To 10
            j = 10 - i
            Debug.Print i, j
        Next
    End Sub

  6. #6
    Membre éclairé Avatar de eliniel
    Femme Profil pro
    Ingénieure Essais et validation
    Inscrit en
    Septembre 2014
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieure Essais et validation
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 115
    Par défaut
    Alors je suis en train de tester:
    Donc le programme ressemble à ceci :
    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
    Sub Copie_Calc()
        Application.ScreenUpdating = False
        NbSheets = Sheets("resultats").Range("A11")
        Application.CutCopyMode = False
        Dim j As Integer
            h = h + 1
        'For h = 0 To NbSheets
        For h = 0 To 12
            j = 11 - h
            Debug.Print h, j
     
            'Copie des valeurs par Intervalle
            Sheets("resultats").Select
            Range(Cells(2 + (5 * h), 10), Cells(5 + (5 * h), 43)).Select 'Incrémente la plage d'intervalle
            Selection.NumberFormat = "0.000"
            Application.CutCopyMode = False
            Selection.Copy
            Sheets(h + 3).Select   'Car (1) est la troisième feuille du classeur
            Range("C12").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=True
            Selection.NumberFormat = "0.000"   'affiche le nombre  avec 3 décimales
     
     'Nb valeurs/intervalle
        Sheets("resultats").Select
        Cells(3 + (h * 5), 7).Select
        Selection.Copy
        Sheets(Sheets.Count - j).Select
        Range("C11").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    J'ai donc ma feuille "donnees" avec les valeurs brutes plus la feuille utilisateur "resultats" et les autres feuilles (1 à 12).

    Les valeurs des deux programmes se copient bien ^^
    mais il m'indique quand même à la fin que "l'indice n'appartient pas à la sélection" sur cette ligne là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(h + 3).Select   'Car (1) est la troisième feuille du classeur

  7. #7
    Membre éclairé Avatar de eliniel
    Femme Profil pro
    Ingénieure Essais et validation
    Inscrit en
    Septembre 2014
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieure Essais et validation
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 115
    Par défaut
    J'ai trouvé.
    Merci encore à vous.
    Je n'ai juste pas compris à quoi servait la fonction:

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

Discussions similaires

  1. [Débutant] Deux incréments dans une boucle for simultanément
    Par lFantasyz dans le forum MATLAB
    Réponses: 2
    Dernier message: 11/04/2014, 16h19
  2. Incrémentation d'index dans une boucle for
    Par Invité dans le forum Langage
    Réponses: 12
    Dernier message: 15/02/2013, 15h51
  3. [TPW] Incrémentation du compteur dans une boucle for
    Par sukhoimk dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 15/07/2011, 17h58
  4. Réponses: 10
    Dernier message: 07/01/2007, 12h03
  5. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05

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