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] Encore des boucles


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] Encore des boucles
    Bonjour à tous!

    Alors comme d'hab, j'ai une boucle qui marche pas. J'ai essayé plusieurs solutions, mais aucune ne me permet d'obtenir le résultat escompté. Rhâââ!
    A court d'idées, je me tourne vers vous

    J'ai des infos dans un onglet (parametrage) qui doivent me servir à paramétrer un tableau sur une autre page.
    Dans mon tableau de parametrage, j'ai plusieurs lignes (variable NumLigne). Chaque ligne contient un nombre variable de données (1 donnée par colonne).
    Dans mon tableau de sortie, je veux
    - 1ere colonne titre fixe (=> OK)
    - Ensuite, pour chaque ligne de mon tableau d'entrée, je veux affecter [autant de colonnes - 1] que j'ai de données dans le tableau d'entrée. Sur la 1ere ligne, je fusionne les cellules concernées et je mets mon titre (=> OK)
    Sur la 2eme ligne, je veux inscrire un titre constitué par un mot (le même tout le temps) et des numéros, de 1 à [autant de colonnes - 1] => C'est là que ça coince.
    - Rebelote : j'affecte [autant de colonnes - 1] dans mon tableau de sortie que j'ai de données sur la ligne 2 de mon tableau d'entrée
    - etc...

    Vla la partie de code concernée. Là mes boucles n'apparaissent plus parcequ'en général, elles plantent le reste alors que normalement ça marche. Du coup, j'ai tout viré. Avec ce qui reste, j'arrive à obtenir des titres corrects pour ma 2eme ligne, uniquement pour la dernière colonne des n colonnes concernées, les autres colonnes restant déséspérément vide, quelles que soient les ruses employées.


    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
    Private Sub Tournesol()
    
    'Déclaration des variables
      Dim NouvelleFeuille As Worksheet
      Dim NumLigne As Integer '-> ligne dans onglet "parametrage" (tableau d'entrée) 
      Dim NumCol As Integer '-> Variable pour chercher le nb de colonnes dans lesquelles sont saisies des notes
      ' Variables pour numérotations des colonnes dans la boucle des critères
      Dim i As Integer '-> colonne critère
      Dim ToutesNotes As String '-> variable contenant l'ensemble des notes possibles
      Dim Nbseuils As Integer '-> nb de seuils
      Dim NbS As String '-> variable permettant d'afficher le nb de seuils
    
    
    '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 et fusion
            NouvelleFeuille.Cells(1, 1) = "ACTIVITES /" + Chr(10) + "Aspects environnementaux"
            With NouvelleFeuille
                .Range(.Cells(1, 1), .Cells(2, 1)).Merge '-> fusion des cellules
            End With
    
    'Boucle sur les lignes du tableau d'entrée
        'Determination du numero de la 1ere ligne à considerer dans la boucle
            NumLigne = 2
            
        'Numero de la premiere colonne à remplir ds tableau de sortie
            i = 1 
            
        Do While Worksheets("Parametrage").Cells(NumLigne, 1) <> "" And Worksheets("Parametrage").Cells(NumLigne, 2) <> ""
        
    'Détermination de la 1ere case à considérer pour récupérer les notes de chaque critère
            NumCol = 2
         
        'récupération d'infos dans l'onglet paramétrage => OK
            Do While [...Création de la variable ToutesNotes utilisée + loin...] Loop
           
        'comptage du nb de colonnes utilisées dans l'onglet parametrage 
           Nbseuils = Worksheets("Parametrage").Cells(NumLigne, 2).End(xlToRight).Column - 2
                   
            'Titres colonnes 2ème ligne => c'est là que ça coince et que j'arrive pas à faire une boucle correcte. 
           NbS =   Nbseuils       
           NouvelleFeuille.Cells(2, i + Nbseuils) = "Seuil " + NbS
    
        'Mise en forme titre ligne 1
            NouvelleFeuille.Cells(1, i + 1) _
            = Worksheets("Parametrage").Cells(NumLigne, 1) + Chr(10) + "(Notes : " + ToutesNotes + ")"
    
            With NouvelleFeuille
                .Range(.Cells(1, i + 1), .Cells(1, i + Nbseuils)).Merge '-> fusion des cellules
            End With
    
            ToutesNotes = "" '-> réinitialisation de la variable avant la prochaine boucle
    
       'passer à la ligne suivante dans le tableau d'entrée :
            NumLigne = NumLigne + 1
            i = i + Nbseuils
    
        'Fin de la boucle
            Loop
        
    
    'Renomme la nouvelle feuille avec le nom de l'activité
            ActiveSheet.Name = "Seuils de notation"
    
    End Sub
    Help !!

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut Karatégirl77 et le forum
    - Ensuite, pour chaque ligne de mon tableau d'entrée, je veux affecter [autant de colonnes - 1] que j'ai de données dans le tableau d'entrée. Sur la 1ere ligne, je fusionne les cellules concernées et je mets mon titre (=> OK)
    Sur la 2eme ligne, je veux inscrire un titre constitué par un mot (le même tout le temps) et des numéros, de 1 à [autant de colonnes - 1] => C'est là que ça coince.
    - Rebelote : j'affecte [autant de colonnes - 1] dans mon tableau de sortie que j'ai de données sur la ligne 2 de mon tableau d'entrée
    Pas sur de tout comprendre :
    Tu as des données de la colonne A à la colonne E sur la feuille F1
    Sur la nouvelle feuille F2 :
    tu Fusionnes F2.(B:E), puis tu y colles les données de F1.(A : D) ?
    sur ligne+1, tu colles en F2.A : "mon préfixe" & F2.(B)areamerge.columns
    Puis tu recommences en ligne+1 pour F1 et Ligne+2 pour F2 ?
    C'est ça ?
    A+
    PS : Pourquoi ne renommer la feuille qu'en dernier ? Vaut mieux le faire jute après sa céation, ça évite des problèmes.
    Utiliser Integer pour déclarer une variable ligne veut dire que tu n'atteindra jamais 32767 lignes => vaut mieux la déclarer en Long.

  3. #3
    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 désolée pour cette réponse tardive,

    Citation Envoyé par Gorfael Voir le message
    Salut Karatégirl77 et le forumPas sur de tout comprendre :
    Tu as des données de la colonne A à la colonne E sur la feuille F1
    Sur la nouvelle feuille F2 :
    tu Fusionnes F2.(B:E), puis tu y colles les données de F1.(A : D) ?
    sur ligne+1, tu colles en F2.A : "mon préfixe" & F2.(B)areamerge.columns
    Puis tu recommences en ligne+1 pour F1 et Ligne+2 pour F2 ?
    C'est ça ?
    A+
    Utiliser Integer pour déclarer une variable ligne veut dire que tu n'atteindra jamais 32767 lignes => vaut mieux la déclarer en Long.
    Si je te suis bien, je cois que c'est pas tout à fait ça. Je vaus teneter de reformuler :
    Feuille F1 (départ) :
    Ligne 1 : colonne A = titre et colonnes B à F = 5 données
    Ligne 2 : colonne A = titre et colonnes B à D = 3 données
    Ligne 3 ....
    => le nombre de lignes à prendre en compte est variable, et chaque ligne peut contenir un nombre variable de données (Nbre de lignes et de données pas trop grands dons a priori la déclaration en integer est suffisante)

    Sur la nouvelle feuille F2 :
    - Colonne A affectée à des titres de lignes
    - Fusion de F2.(B:E), où je colle les données de F1.L1.(A : F) => ça c'est bon, ça fonctionne
    sur ligne+1, je colle en F2.B : "mon préfixe" & 1 ; en F2.C : "mon préfixe" & 2; ... jusqu'à F2.E : "mon préfixe" & 4 (J'ai 5 données en F1.L1 = je veux 4 colonnes en F2)
    - Ensuite, je ne reprend pas à ligne+2, mais je continue avec les colonnes suivantes : Fusion de F2.(F:G), où je colle les données de F1.L2.(A : D)
    sur ligne+1, je colle en F2.F : "mon préfixe" & 1 ; en F2.G : "mon préfixe" & 2(J'ai 3 données en F1.L1 = je veux 2 colonnes en F2)
    - Ainsi de suite...
    Mon problème est que je n'arrive pas à boucler correctement pour écrire la ligne 2 de la F2. Pour ce faire, j'ai créé la variable NbS (= nb de données -1 par ligne en feuille F1)

    J'espère avoir été plus claire


    PS : Pourquoi ne renommer la feuille qu'en dernier ? Vaut mieux le faire jute après sa céation, ça évite des problèmes.
    Oui mais je suis susceptible de la renommer, et avec un nom variable...

Discussions similaires

  1. Encore des problèmes avec le BDE
    Par Flint dans le forum C++Builder
    Réponses: 19
    Dernier message: 01/01/2008, 00h26
  2. encore des menu popup
    Par meli0207 dans le forum MFC
    Réponses: 8
    Dernier message: 03/06/2005, 16h57
  3. Réponses: 8
    Dernier message: 10/08/2004, 12h49
  4. probleme de date (toujours et encore des dates)
    Par Yannesco dans le forum SQL
    Réponses: 3
    Dernier message: 02/02/2004, 20h04

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