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 :

Ou est l'erreur dans ce petit programme?


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Ou est l'erreur dans ce petit programme?
    bonjour à tous ! =)

    Voila j'ai un petit probleme, j'aimerais faire un programme qui me fasse un tableau comme suit :

    1 3 6 10 15
    2 5 9 14
    4 8 13
    7 12
    11

    Dans la première partie du programme, je lui demande de faire une boucle pour me créer la première colonne. Tout se passe pour le mieux.

    Ensuite je fais une boucle qui fait les colonne, à l'intérieur de laquelle une fait les lignes. Par exemple à la fin de la première partie du programme, je lui demande de passer à la colonne 2. Une fois a la colonne deux, je lui demande de prendre la première cellule, d'y mettre la première cellule de la colonne 1 + A, A étant une variable qui s'initialise en temps valeur de la colonne traitée, et qui s'incrémente de 1 à chaque fois que la boucle se reproduit.

    Les variables :
    CMAX : nombre de colonnes max (pour moi j'aimerais le faire pour 5 mais si ça peut s'adapter ensuite au nombre que je veux c'est très bien)
    LMAX nombre de lignes max (5 dans cet exemple)
    L : la ligne traitée
    C : La colonne traitée
    VALEUR : la valeur de la cellule de excel que j'active
    AL : una variable qui me permet de dire que chaque fois qu'on passe a une colonne suivante, on enleve une Ligne (Pour obtenir une matrice diagonale supérieure)

    Voila .. quand je lance, la première colonne ne pause pas de problemes, mais la suivante : calcul de valeurs de 2 à 35.000 sur la colonne 2, et qui attaque ligne 6 .. comprend pas !

    Quelqu'un a t il repéré quelle est mon erreur? Je suis débutant donc j'ai utilisé les codes que je connais, me proposer une autre solution pour résoudre ce probleme ne m'aidera donc peut etre pas si c'est d'un niveau plus avancé que le mien. Par contre m'expliquer pourquoi ça ne marche pas et comment je peux rectifier avec mes connaissances serait génial !

    Merci d'avance ! =)

    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
    Sub PROG()
     
    Dim LMAX As Integer
    Dim CMAX As Integer
    Dim A As Integer
    Dim AL As Integer
    Dim L As Integer
    Dim C As Integer
    Dim VALEUR As Integer
     
    LMAX = InputBox("Lignes")
    CMAX = InputBox("Colonnes")
     
    A = 0
    L = 1
    C = 1
    AL = 0
     
    Sheets("Feuil1").Cells(1, 1) = 1
     
    While L <> LMAX - AL + 1
            If L = 1 And C = 1 Then
                Sheets("Feuil1").Cells(L, C) = 1
            Else
                Sheets("Feuil1").Cells(L - 1, C).Activate
                VALEUR = Selection.Value
                Sheets("Feuil1").Cells(L, C) = VALEUR + A
            End If
        L = L + 1
        A = A + 1
    Wend
     
    C = C + 1
    AL = AL + 1
    A = C
     
    While C <= CMAX
            While L <> LMAX - AL + 1
                Sheets("Feuil1").Cells(L, C - 1).Activate
                VALEUR = Selection.Value
                Sheets("Feuil1").Cells(L, C) = VALEUR + A
                L = L + 1
                A = A + 1
            Wend
    C = C + 1
    AL = AL + 1
    A = C
    Wend
    End If
     
    End Sub

  2. #2
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Le problème principal provient de l'incrémentation de la variable L donnant la ligne d'écriture.
    L = L+ 1
    Si après les lignes de code donnant l'écriture d'une colonne, on n'a pas la ligne
    L = 1 , on ne peut pas recommencer la colonne suivante à la ligne 1.
    Autre remarque : Il y a deux lignes End If dans le programme pour une seule ligne débutant par If.

    Le code ci-dessous inspiré du code initial semble fonctionner
    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
    Sub PROG()
     
    ' Déclaration des variables
    Dim LMAX As Integer
    Dim CMAX As Integer
    Dim L As Integer
    Dim C As Integer
    Dim Depart As Integer
    Dim Delta As Integer
     
    ' Initialisation des variables
    LMAX = InputBox("Lignes")
    CMAX = InputBox("Colonnes")
    Depart = 1
    Delta = 0
     
        ' Ecriture de la matrice
        For C = 1 To CMAX
        ' Détermination  de la première valeur d'une colonne
            If C = 1 Then
                Depart = 1
            Else
                Depart = Cells(1, C - 1).Value + C
            End If
     
            ' Ecriture d'une colonne
            For L = 1 To LMAX
                If L = 1 Then
                    Cells(L, C).Value = Depart
                Else
                    Cells(L, C).Value = Cells(L - 1, C).Value + Delta
                End If
                Delta = Delta + 1   ' Incrémentation de l'augmentation
            Next L
     
            Delta = C       ' Incrémentation de l'augmentation sur la ligne 1
            LMAX = LMAX - 1 ' Diminution du nombre de lignes au changement de colonne
        Next C
     
    End Sub
    Cordialement
    Claude

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup Claude, je me suis inspiré de tes modifications pour modifier mon programme qui fonctionne maintenant !

    Je n'ai pas encore vu la fonction For .. To, donc meme si je la comprend, j'ai préféré rester sur mes simples boucles (meme si effectivement ça semble etre la solution la plus adaptée !

    donc mon résultat est le suivant :


    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
    Sub PROJET()
     
    Dim LMAX As Integer
    Dim CMAX As Integer
    Dim A As Integer
    Dim L As Integer
    Dim C As Integer
    Dim VALEUR As Integer
     
    LMAX = InputBox("Lignes")
    CMAX = InputBox("Colonnes")
     
    A = 0
    L = 1
    C = 1
     
     
    Cells(1, 1).Value = 1
     
    While L <> LMAX - AL + 1
            If L = 1 And C = 1 Then
                Cells(L, C).Value = 1
            Else
                Cells(L, C).Value = Cells(L - 1, C) + A
            End If
        L = L + 1
        A = A + 1
    Wend
     
    C = C + 1
    LMAX = LMAX - 1
     
     
    While C <= CMAX
    A = C
    L = 1
            While L <> LMAX + 1
                Cells(L, C).Value = Cells(L, C - 1).Value + A
                L = L + 1
                A = A + 1
            Wend
     
    C = C + 1
    LMAX = LMAX - 1
    Wend
     
    End Sub
    Il ne me reste plus qu'à faire le bas de ma matrice, mais je pense que ça devrait aller maintenant que j'ai compris le probleme =) Si ce n'est pas le cas, je posterais un petit message,

    En attendant de mettre probleme résolu, une bonne après midi !!

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

Discussions similaires

  1. Je ne trouve pas ou est l'erreur dans mon programme
    Par stich51 dans le forum Général Python
    Réponses: 3
    Dernier message: 02/05/2014, 16h36
  2. [PHP-JS] où est l'erreur dans ce code php
    Par jsdar dans le forum Langage
    Réponses: 1
    Dernier message: 06/04/2007, 19h17
  3. [XHTML] Où est l'erreur dans mon submit ?
    Par unreal2me dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 22/03/2007, 16h47
  4. évènement non prévu dans un petit programme
    Par flamant dans le forum C++
    Réponses: 3
    Dernier message: 18/01/2007, 21h56
  5. Réponses: 5
    Dernier message: 14/05/2006, 22h41

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