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 :

un compteur non incrémenté


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Par défaut un compteur non incrémenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Appli_Rajouter_Click()
    For j = 5 To 14
    compteur = 1
    For i = 3 To 86
    k = 2
    If Worksheets("calculs").Cells(i, j).Value > 0 Then
    compteur = compteur + 1
    Cells(compteur + 1, j - k - 1) = Worksheets("calculs").Cells(i, j - k - 2).Value
    k = k + 1
    End If
    Next i
    Next j
    End Sub
    Bonjour à vous amis Vébéistes,

    Mon problème dans ce programme est que le K ne s'incrémente pas et reste fixé à 4 (k=2+2) , j'ai beau le bouger, rien ne change. Vous pouvez m'aider ?

    Merci !

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    bonjour,

    regarde où tu as mis l'initialisation de ta variable k .... et révise le fonctionnement d'une boucle FOR

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Par défaut
    bon ben je n'arrive pas hélas, j'ai un cerveau pas adapté à la prog! Quelqu'un a une solution? C'est pour mon taf. Merci

  4. #4
    Membre éclairé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Par défaut
    Bonjour,

    k va se remettre à 2 à chaque bouclage de ta boucle for sur j.
    Donc il ne peut augmenter.

    Pour que cela ne se produise plus il faut remonter la ligne
    avant la boucle for.

    PS : tu va surement rencontrer le même problème avec compteur.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Par défaut
    Merci, c'est comme si tu venais d'ouvrir une porte dans mon esprit car je comprends désormais !

    Ha oui, même si je l'ai noté résolu, j'ai une question subsidiaire: est-ce que le k+1 est bien place. Si je mets le k+1 après l'incrémentation du j, cela veut dire que dès qu'on a un j supplémentaire on a une incrémentation de 1 sur k ? Et si je mets le k+1 après le i, c'est dès que i augmente de 1 ?
    Merci encore à toi (à vous?)

  6. #6
    Membre éclairé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Par défaut
    Bonjour,

    Dans la partie de code qui est dans la discussion, le k ne n'incrémente que si ta condition est vrai (vu que l'incrémentation est entre le if et le endif).

    par contre si tu le sort du if en le laissant dans le for, il s'incrémentera autant que j.

    pour voir ce qui se passe quand tu execute ton code fait une execution en pas à pas.
    Debuggage >> pas à pas détaillé puis F8 pour passer d'une ligne à l'autre.
    en passant ta souris sur les variable de ton code tu aura leur valeur à un instant T.

  7. #7
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Appli_Rajouter_Click()
    k = 2
    For j = 5 To 14
    compteur = 1
     For i = 3 To 86
      If Worksheets("calculs").Cells(i, j).Value > 0 Then
      compteur = compteur + 1
      Cells(compteur + 1, j - k - 1) = Worksheets("calculs").Cells(i, j - k).Value
      End If
     Next i
    k = k + 1
    Next j
    End Sub
    Resalut,

    Pour moi le code correct est celui-là, avec k incrémenté à chaque j, qui fait que pour chaque j on a les i qui sont défilés, k augmente de un, et on décale le tout d'une colonne. Sauf que j'ai tout qui s'écrit dans une seule colonne, et je ne vois pas pourquoi.

    Quand je fais le pas à pas détaillé, le jaune ne va pas au-delà du next i, la boucle j est comme rendue muette. une histoire d'avopir appuyé sur Entrée ?

    Désolé de vous déranger encore pour des choses si simples...

  8. #8
    Membre éclairé Avatar de zandru
    Homme Profil pro
    Ingénieur conception mécanique
    Inscrit en
    Mars 2008
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur conception mécanique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2008
    Messages : 507
    Par défaut
    Citation Envoyé par NulenVBA Voir le message
    Désolé de vous déranger encore pour des choses si simples...
    C'est en comprenant les choses simples que l'on peut faire des choses compliquées.

    Pour ton problème il est normal que ce soit toujours dans la même colonne, vu que j et k sont incrémenté en même temps, donc j-k-1 donne toujours le même résultat (2 si je ne me trompe).
    Dans cette configuration k est inutile, et j-k-1 peut être remplacé par j-3.

    Pour réaliser ton code, pose toi bien la question de ce que tu veux avoir par rapport à ce que tu a et la réponse devrait venir d'elle-même.
    (Je peux difficilement t'aider pour trouver la bonne formule qui te donne la colonne vu que je ne sais pas ce que tu as en entré et ce que tu veux en sortie )

  9. #9
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 28
    Par défaut
    Ha oui bonne méthode, je vais poser les choses à plat façon CP, ça a marché and ... i made it!!!, merci, je me sens trop fier de moi d'avoir trouvé la solution, avec ton aide, mais sans que tu la fournisses en entier :-)

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

Discussions similaires

  1. Gérer les compteurs Auto Incrémentés sous firebird
    Par the watcher dans le forum Bases de données
    Réponses: 32
    Dernier message: 26/12/2009, 23h42
  2. Passer un champ autoincrémenté en non incrémenté
    Par soazig dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/07/2009, 20h34
  3. [release] version du parent non incrémentée
    Par herbien dans le forum Maven
    Réponses: 11
    Dernier message: 30/06/2008, 20h27
  4. Importer des données et compteur auto incrémenté
    Par lutecefalco dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/04/2007, 11h27
  5. [XSLT] non incrémenté sur selection
    Par sdrouins dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/01/2007, 19h56

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