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 :

[E 02] Boucles imbriquées


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut [E 02] Boucles imbriquées
    Bonjour!

    Comme mon titre l'indique, j'ai des boucles imbriquées, et j'arrive pas à m'en sortir. Déjà, je suis pas sûre d'utiliser les bonnes boucles par rapport à mon problème (For/next ou Do while), et en plus, j'ai du mal à me dépatouiller de mes variables.

    Au départ, j'ai un classeur contenant un nombre d'onglets variable.
    Je veux récupérer chaque nom d'onglet (=variable activité), et dans chaque onglet le nom d'un paramètre (contenu dans les cellules de la 1ere colonne, à partir de la ligne 3 et jusqu'à un numero de ligne variable).
    Pour chacun de ces paramètres, je dois pouvoir associer un certain nombre de valeurs (variable en fonction du paramètre). Ce nombre est également à récupérer (sur une autre page), les valeurs elles-même seront par la suite saisies dans ma 2eme colonne de tableau de sortie.

    En sortie, je cherche à créer une feuille en dernière position qui va me permettre de récupérer mes infos sous cette forme (en 1ere colonne):
    L1 : Titre
    L2 : Nom du 1er onglet (=Activité 1)
    L3 : paramètre 1 (contenu dans la 1ere cellule du 1er onglet, qui peut prendre un certain nb de valeurs, d'où les lignes vides qui suivent)
    L4 :
    L5 :
    L6 : paramètre 2 (contenu dans la 2ere cellule du 1er onglet, qui peut prendre un certain nb de valeurs, d'où les lignes vides qui suivent)
    L7 :
    L8 :
    L9 :
    L10 : paramètre 3
    ...
    ...
    L(i-1) : ligne vide correspondant à la derniere valeur possible du dernier paramètre du 1er onglet
    L(i) : Nom du 2eme onglet (=Activité 2)
    L(i+1) : Paramètre 1 (contenu dans la 1ere cellule du 2eme onglet)
    ...
    ...
    L(n) : ligne vide correspondant à la derniere valeur possible du dernier paramètre du dernier onglet


    Jusqu'à l'étape récupérer le nom de l'onglet et le balancer dans ma nouvelle feuille, ça va. Ce que je n'arrive pas à faire, c'est récupérer mes paramètres contenus dans les cellules de la 1ere colonne de chaque onglet.
    Je pense qu'il y a un pb au niveau de ma numérotation de lignes dans ma feuille, et peut être dans l'utilisation / réinitialisation de mes variables.

    Voilà mon début de code, si vous avez des suggestions pour m'aider à arriver à mon résultat:

    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
    Private Sub Tintin()
    
    'Déclaration des variables
      Dim NouvelleFeuille As Worksheet
    
      ' Variables pour recherche de ligne vide pour arrêter la boucle des critères
      Dim Activite As String  '-> variable activité = nom des onglets
      Dim j As Integer '-> comptage des onglets
      Dim NumeroLigne As Integer '-> numero de ligne dans les onglet "activité"
      Dim Nbaspects As Integer '-> nb de paramètres dans chaque onglet "activité"
    
      ' Variables pour numérotations des colonnes dans la boucle des critères
      Dim k As Integer '-> numero ligne dans la nouvelle feuille
      Dim Notes As String '-> nb de valeurs possibles pour chaque paramètre
      
      
    'Insère une feuille de calcul avant la dernière feuille du classeur
      Set NouvelleFeuille = ThisWorkbook.Worksheets.Add(After:=Worksheets("parametrage"))
        
        'Titre de la 1ere cellule
            NouvelleFeuille.Cells(1, 1) = "ACTIVITES /" + Chr(10) + "Aspects environnementaux"
     
    k = 1
                
    For j = 1 To Sheets.Count - 2 '-> compte le nb d'onglets
    'moins celle qu'on vient de créer et moins celle de parametrage 
    
      'Commencer à remplir le tableau à partir de la ligne 2 en rentrant le nom du 1er onglet (=Activité)
          ' NouvelleFeuille.Cells(k, 1) = Sheets(j).Name 
     
        'Formats : Hauteur des lignes
            With NouvelleFeuille.Rows(k)
                .RowHeight = 35 '-> hauteur de ligne
            End With
    
        'Boucle de récupération des paramètres => c'est là que ça ne va pas. Il ne se passe rien
            For Nbaspects = 3 To Sheets(j).Lines.Count '-> compte le nb de lignes par onglet
            NouvelleFeuille.Cells(k, 1) = Sheets(j).Cells(Nbaspects, 1) '->  saisie du titre de colonne
            Next
            
       'passer à la ligne suivante :
    '        NumeroLigne = NumeroLigne + 1
    '        k = k + Nbaspects 
        
    
    Next '-> va chercher la prochaine page
    
    
    'Renomme la nouvelle feuille 
            ActiveSheet.Name = "Seuils de notation"
    
    End Sub

    Merci d'avance !

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour miss Karaté,
    je pense que l'instruction suivante n'est pas bonne, car testée ici, elle donne 0 pour le count
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For Nbaspects = 3 To Sheets(j).Lines.Count '-> compte le nb de lignes par onglet
    Essaie plutôt ceci, qui suppose qu'on considère la colonne A:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For Nbaspects = 3 To Sheets(j).Range("A65535").End(xlUp).Row '-> compte le nb de lignes par onglet

  3. #3
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Bonjour,

    Pour compter le nombre de ligne dans la boucle, utilise plustôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(j).Range("A65535").End(xlUp).Row
    Regarde ce que ça donne et donnes nous en des nouvelles.

    Edit : Et bien, je me suis fait dépassé! J'ai fait le bouton ajouter une réponse et j'ai du quitter quelques minutes et j'ai poster en revenant, mais... tu es trop rapide G@dz!!!

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Edit : Et bien, je me suis fait dépassé! J'ai fait le bouton ajouter une réponse et j'ai du quitter quelques minutes et j'ai poster en revenant, mais... tu es trop rapide G@dz!!!
    2 lapinous pour le prix d'1.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 57
    Par défaut
    Bonjour et merci de votre aide, les lapinous

    Alors déjà, j'avais un initialisation de paramètre (k) qui était placée dans, et pas avant la 1ere boucle, ce qui faisait que j'étais obligée de numéroter mes lignes en fonction des numéros d'onglets. Du coup, je ne pouvais pas gérer ma 2eme boucle correctement. Je vais rectifier le code dans mon 1er message

    Sinon, j'ai teste ce code, et effectivement, j'ai un meilleur résultat, mais qui reste à retravailler :
    - il ne me colle que le dernier paramètre de chaque onglet, juste en dessous du nom de mon onglet. Ca doit être un pb de réinitialisation de variable, je vais regarder.
    - il m'insère entre mes 2 activités (noms d'onglets) le nb de lignes correspondant au nb de lignes total de chaque onglet, sauf qu'il devrait pas compter les deux 1eres lignes.

    Tout ça a l'air d'être de mon ressort, je vais étudier la question et je reviens vers le forum si je continue à galérer


    PS : Vous serait-il possible de m'expliquer la nuance entre ma ligne de code (fausse) et la votre (qui marche) ? C'est à partir du .End que je décroche...

  6. #6
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Le problème, c'est que le K n'est pas incrémenté ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            For Nbaspects = 3 To Sheets(j).Range("A65535").End(xlUp).Row  '-> compte le nb de lignes par onglet
            NouvelleFeuille.Cells(k, 1) = Sheets(j).Cells(Nbaspects, 1) '->  saisie du titre de colonne
            Next
    Il remplace sur la même cellule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       'passer à la ligne suivante :
    '        NumeroLigne = NumeroLigne + 1
    '        k = k + Nbaspects
    Je crois que tu devrais faire quelque chose (tu as déjà un commentaire avec un changement de ligne)

    Et remplace la ligne pour compter les lignes comme proposé plus haut.


    PS. Pour réponde à ta question, ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(j).Range("A65535").End(xlUp).Row
    correspond à :
    La feuille J, en partant du range A65535 (dernière ligne de la colonne A) faire un .End (équivalent de Ctrl+Flèche de haut sur le clavier) et te donne la dernière ligne remplise. Pour une autre colonne Range("B65535")!

  7. #7
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Ici lapinou 2, le premier m'ayant émulé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Sheets(j).Range("A65535").End(xlUp).Row
    Cette ligne signifie, mets toi à la cellule A65535 et remonte jusqu'à la dernière cellule utilisée de la plage. Ce que tu cherches en fait, car c'est la dernière ligne.

    Edit
    ------------------
    Et ici, est-ce nomal que la ligne 2 soit en commentaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'Commencer à remplir le tableau à partir de la ligne 2 en rentrant le nom du 1er onglet (=Activité)
          ' NouvelleFeuille.Cells(k, 1) = Sheets(j).Name
    NB : pauvre de toi: une femme avec 2 lapins..... T'as pas de bol.

  8. #8
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Cette fois, C'est MOI! le plus rapide!!!

    Hey Hey.

  9. #9
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Cette fois, C'est MOI! le plus rapide!!!
    Oui, mais tu avais oublié le xlup et l'a rajouté après.
    Je n'ai aucune chance contre un EDIT.

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

Discussions similaires

  1. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  2. boucle imbriquée
    Par zhoom dans le forum C
    Réponses: 4
    Dernier message: 07/11/2005, 13h10
  3. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  4. Boucles imbriquées
    Par Immobilis dans le forum ASP
    Réponses: 28
    Dernier message: 14/01/2005, 13h17
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

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