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 :

Positionner une boucle for next sans exclure ma variable i


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
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut Positionner une boucle for next sans exclure ma variable i
    Bonjour à tous,
    je travaille actuellement sur un fichier Excel codé en VBA. Je cherche à créer un planning (pj n°1) en fonction d'un en-cours d'atelier (pj n°2).

    Le problème est que mon planning écrit les mêmes dossiers de fabrication en boucle (voir pj n°1). Je pense que mon problème est dû à ma boucle j qui ne prends pas en compte ma variable i mais je ne vois pas comment faire.

    Voilà la fonction initiale avec ma variable i :
    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
    Public Sub MAJplanning()
     
    Dim i As Single, finPage As Single
     
    Sheets("MECA").Activate
     
    finPage = Sheets("MECA").Cells(Rows.Count, 2).End(xlUp).Row
     
    For i = 2 To finPage
     
        If Sheets("MECA").Cells(i, 7).Value <> "" Then
            Call Fraisage(i)
        ElseIf Sheets("MECA").Cells(i, 8).Value <> "" Then
            Call Tournage
        ElseIf Sheets("MECA").Cells(i, 9).Value <> "" Then
            Call Percage
        ElseIf Sheets("MECA").Cells(i, 10).Value <> "" Then
            Call Clavetage
        ElseIf Sheets("MECA").Cells(i, 11).Value <> "" Then
            Call Alpha
        ElseIf Sheets("MECA").Cells(i, 12).Value <> "" Then
            Call CTX
        ElseIf Sheets("MECA").Cells(i, 13).Value <> "" Then
            Call CU
        End If
    Next
     
    End Sub
    et ma fonction "fraisage" avec ma variable j :
    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
     
    Public Sub Fraisage(i As Single)
     
    Dim j As Single
     
    Sheets("Planning").Activate
     
    For j = 0 To 81 Step 3
     
        If Sheets("Planning").Cells(2, 2 + j).Value = "" Then
            With Sheets("MECA")
            .Range("B" & i).Copy
            Sheets("Planning").Cells(2, 2 + j).PasteSpecial
            .Range("D" & i).Copy
            Sheets("Planning").Cells(2, 3 + j).PasteSpecial
            .Range("G" & i).Copy
            Sheets("Planning").Cells(2, 4 + j).PasteSpecial
            End With
        ElseIf Sheets("Planning").Cells(3, 2 + j).Value = "" Then
            With Sheets("MECA")
            .Range("B" & i).Copy
            Sheets("Planning").Cells(3, 2 + j).PasteSpecial
            .Range("D" & i).Copy
            Sheets("Planning").Cells(3, 3 + j).PasteSpecial
            .Range("G" & i).Copy
            Sheets("Planning").Cells(3, 4 + j).PasteSpecial
            End With
        ElseIf Sheets("Planning").Cells(4, 2 + j).Value = "" Then
            With Sheets("MECA")
            .Range("B" & i).Copy
            Sheets("Planning").Cells(4, 2 + j).PasteSpecial
            .Range("D" & i).Copy
            Sheets("Planning").Cells(4, 3 + j).PasteSpecial
            .Range("G" & i).Copy
            Sheets("Planning").Cells(4, 4 + j).PasteSpecial
            End With
        ElseIf Sheets("Planning").Cells(5, 2 + j).Value = "" Then
            With Sheets("MECA")
            .Range("B" & i).Copy
            Sheets("Planning").Cells(5, 2 + j).PasteSpecial
            .Range("D" & i).Copy
            Sheets("Planning").Cells(5, 3 + j).PasteSpecial
            .Range("G" & i).Copy
            Sheets("Planning").Cells(5, 4 + j).PasteSpecial
            End With
        End If
     
    Next
    End Sub
    Merci d'avance pour votre aide Nom : pj n°1.JPG
Affichages : 225
Taille : 57,1 KoNom : pj n°2.JPG
Affichages : 242
Taille : 102,5 Ko

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 163
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je pense que mon problème est dû à ma boucle j qui ne prends pas en compte ma variable i mais je ne vois pas comment faire
    Si tu penses que la variable i n'est pas prise en compte par la procédure Fraisage, il est très simple de le savoir.
    Tu places un point d'arrêt à la ligne 4 de cette procédure et tu vérifies la valeur de la variable I. cela s'appelle du débogage.

    A lire éventuellement Le débogage sous Visual Basic 6 & Visual Basic pour Application (1ère partie)

    Pour rendre plus lisible ton programme, je remplacerais les If ElseIf par un Select Case True
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Je m'exprime mal, la variable i est bien prise en compte par la procédure Fraisage mais une fois la boucle j lancée, celle-ci ira jusqu'à j = 81.

    Hors ce n'est pas ce que je souhaite, je veux que la variable i soit mise à jour entre chaque changement de la valeur j et non entre chaque boucle de j.

    Le problème se matérialise par une redite des informations, dans l'image du planning les colonnes B, E, H, K, N, etc sont identiques alors qu'elles ne le devraient pas.

  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
    entre chaque changement de la valeur j et non entre chaque boucle de j.
    Gné ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ta méthode Fraisage a besoin de i pour initialiser j ou pour modifier i en fonction de la racine carré de j?

    quel est le mécanisme qui modifie i? je ne vois pas cette notion dans ton code!

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    Bonjour Dysorthographie,

    Citation Envoyé par dysorthographie Voir le message
    ta méthode Fraisage a besoin de i pour initialiser j ou pour modifier i en fonction de la racine carré de j ?
    Oui je voudrais initialiser j à l'aide de i.

    Citation Envoyé par dysorthographie Voir le message
    quel est le mécanisme qui modifie i ?
    i est modifié dans la procédure MAJplanning au moyen d'une boucle (qui appelle d'ailleurs la procédure "Fraisage").

    Le but de la procédure est de :
    1. Copier la valeur de la cellule "Gi" de la feuille N°1 (i étant la variable).
    2. Coller la valeur dans la cellule B2, B3, B4 ou B5 de la feuille N°2 (si B2 non nul on passe à B3, si B3 non nul on passe à B4 et si B4 non nul on passe à B5).
    3. Si B2,B3,B4,B5 non nul alors on passe à E2,E3,E4 puis E5 et ainsi de suite avec les colonnes H, K, N, ...


    Dites-moi si le but de la procédure ne vous parait pas clair.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2017
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 54
    Par défaut
    J'ai réussi à trouver une solution, je n'avais pas besoin de boucle For ... Next finalement. Je met le code au cas où quelqu'un aurait besoin de ce sujet.

    Procédure MAJ PLANNING :
    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
    Public Sub MAJplanning()
     
    Dim i As Long, finPage As Long, j As Long
     
    Sheets("MECA").Activate
     
    finPage = Sheets("MECA").Cells(Rows.Count, 2).End(xlUp).Row
     
    For i = 2 To finPage
     
        If Sheets("MECA").Cells(i, 7).Value <> "" Then
            Call Fraisage(i, j)
        ElseIf Sheets("MECA").Cells(i, 8).Value <> "" Then
            Call Tournage
        ElseIf Sheets("MECA").Cells(i, 9).Value <> "" Then
            Call Percage
        ElseIf Sheets("MECA").Cells(i, 10).Value <> "" Then
            Call Clavetage
        ElseIf Sheets("MECA").Cells(i, 11).Value <> "" Then
            Call Alpha
        ElseIf Sheets("MECA").Cells(i, 12).Value <> "" Then
            Call CTX
        ElseIf Sheets("MECA").Cells(i, 13).Value <> "" Then
            Call CU
        End If
    Next
     
    End Sub
    Procédure Fraisage :

    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
    Public Sub Fraisage(i As Long, j As Long)
     
    Sheets("Planning").Activate
     
        If Sheets("Planning").Cells(2, 2 + j).Value = "" Then
            With Sheets("MECA")
            .Range("B" & i).Copy
            Sheets("Planning").Cells(2, 2 + j).PasteSpecial
            .Range("D" & i).Copy
            Sheets("Planning").Cells(2, 3 + j).PasteSpecial
            .Range("G" & i).Copy
            Sheets("Planning").Cells(2, 4 + j).PasteSpecial
            End With
        ElseIf Sheets("Planning").Cells(3, 2 + j).Value = "" Then
            With Sheets("MECA")
            .Range("B" & i).Copy
            Sheets("Planning").Cells(3, 2 + j).PasteSpecial
            .Range("D" & i).Copy
            Sheets("Planning").Cells(3, 3 + j).PasteSpecial
            .Range("G" & i).Copy
            Sheets("Planning").Cells(3, 4 + j).PasteSpecial
            End With
        ElseIf Sheets("Planning").Cells(4, 2 + j).Value = "" Then
            With Sheets("MECA")
            .Range("B" & i).Copy
            Sheets("Planning").Cells(4, 2 + j).PasteSpecial
            .Range("D" & i).Copy
            Sheets("Planning").Cells(4, 3 + j).PasteSpecial
            .Range("G" & i).Copy
            Sheets("Planning").Cells(4, 4 + j).PasteSpecial
            End With
        ElseIf Sheets("Planning").Cells(5, 2 + j).Value = "" Then
            With Sheets("MECA")
            .Range("B" & i).Copy
            Sheets("Planning").Cells(5, 2 + j).PasteSpecial
            .Range("D" & i).Copy
            Sheets("Planning").Cells(5, 3 + j).PasteSpecial
            .Range("G" & i).Copy
            Sheets("Planning").Cells(5, 4 + j).PasteSpecial
            End With
        ElseIf Sheets("Planning").Cells(5, 2 + j).Value <> "" Then
            j = j + 3
        End If
    End Sub

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

Discussions similaires

  1. Positionner une boucle for next sans exclure ma variable i
    Par david-lt dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/09/2017, 17h14
  2. Chercher dans les valeurs d'une cellule dans une boucle For Next
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/09/2011, 15h30
  3. Réponses: 2
    Dernier message: 27/04/2010, 22h09
  4. faire une boucle for..next sur des textbox
    Par Actarusdu60 dans le forum VB.NET
    Réponses: 1
    Dernier message: 28/11/2008, 21h51
  5. Réponses: 5
    Dernier message: 27/11/2008, 17h34

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