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 :

Nom variable double change dans une boucle for next


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut Nom variable double change dans une boucle for next
    Bonjour,
    dans le cadre d'un code que je développe, je voudrais faire la différence entre deux cellules, ligne par ligne dans une colonne.

    Pour ce faire, j'ai une boucle For Next qui tourne avec un Compteur.

    Je pensais à chaque Step faire la différence entre mes deux cellules An et Bn en conservant une variable DIFF & Compteur mais Excel bloque sur DIFF & Compteur =.

    Je pense mal m'y prendre.

    Existe t il une solution s'il vous plaît?

    MERCI

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    A la fin du code, je voudrais vérifier que la somme de tous mes DIFF1; DIFF2; DIFF3 = 0

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Il serait préférable de présenter toute la boucle en un seul morceau plutôt que d'en présenter un puzzle.

    faire la différence entre mes deux cellules An et Bn en conservant une variable DIFF & Compteur
    Il faudrait que tu expliques plus clairement ceci.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    En fait la boucle contient d'autres choses qui n'ont rien à voir et porte sur un Range plus large.

    Je mets entre balise mais la logique serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Compteur As Double, RNG As RANGE
     
     
    Set RNG = Range("H1:H30")
    Compteur = 0
     
    For Each c In RNG
     
    Compteur = Compteur + 1
     
    c.Value = 123

    ...

    Et je voudrais faire, à chaque Step, la différence entre la valeur entre c.Value et c.offset(0, -3).Value.

    Et là je ne sais pas coder:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DIFF & Compteur = c.Value - c.offset(0, -3).Value

    Le but à la fin est de faire la somme DIFF1 + DIFF2 + DIFF3 et de vérifier si =0 ou <>0

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Je vois bien qu'il y a 2 problèmes, le nom de la variable DIFF & Compteur (DIFF1; DIFF2; DIFF3) et la variable en elle même et son type: Dim DIFF As Double.

    Je ne sais pas si le nom d'un variable peut être variable lui-même.

    Sinon, je change mon fusil d'épaule mais j'aurais besoin de savoir ce que je peux faire d'autre pour arriver à mon résultat.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 763
    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 : 12 763
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Pour répondre, il faudrait déjà comprendre que vous demandez
    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

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Je voudrais faire la différence DIFFn entre la valeur en Kn et Ln dans une boucle qui me donne Ln avec une formule puis faire la somme de mes DIFFn.

    J'ai des valeur en K1; K2; K3...;
    Une boucle qui me donne L1; L2; L3...

    Je voudrais vérifier s'il y a une différence entre K et L;

    Je voudrais donc calculer la différence entre L1 et K1; L2 et K2; L3 et K3... à chaque boucle puis faire la somme de ces différences, égale à 0 cela veut dire que toute les lignes sont égales, différente de 0 veut dire qu'il y a au moins une ligne pour laquelle Ln <> Kn

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Donc je voulais me servir d'un compteur pour différencier chaque différence à chaque passage de la boucle;
    Le compteur passe de 1 à 2; 3...à chaque Compteur = Compteur + 1
    Et j'aurais calculer ma différence à chaque passage de la boucle puis la somme des différences.
    Je pensais stocker la différence à chaque passage dans une variable différente à chaque passage de la boucle: DIFF1; DIFF2; DIFF3..... mais ça n'a pas l'air possible

    En utilisant une variable tableau?

    J'aurais besoin d'aide pour alimenter mon tableau.

    Est-il possible de sommer les éléments d'un tel tableau?


    Fausse route?

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 763
    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 : 12 763
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Petit exemple rapide à adapter qui affiche l'adresse de la cellule de la première colonne (K) en indiquant la différence si elle existe.
    La plage contrôlée est K2:L8 de la feuille nommée Feuil2 du classeur contenant le code VBA
    Si tu ne sais pas ce qu'est Debug.Print, tu peux le remplacer par MsgBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub t()
      Dim rng As Range
      Dim cell As Range
      Dim Diff As Double
      Set rng = ThisWorkbook.Worksheets("Feuil2").Range("K2:K8")
      For Each cell In rng
        With cell
          Diff = .Value - .Offset(ColumnOffset:=1).Value
          If Diff Then Debug.Print .Address & " <> " & Diff
        End With
      Next
      Set rng = Nothing: Set cell = Nothing
    End Sub
    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

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    OK, à mettre en fin de code, une fois obtenues mes deux colonnes si je comprends bien?

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Impossible d'agir dans la boucle donc?

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set RNG = Range("H1:H30")
     
    For Compteur =  1 To RNG.Count
         Set c = RNG.Cells(Compteur)
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 763
    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 : 12 763
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Impossible d'agir dans la boucle donc?
    Et qu'ai-je fait pour calculer la différence ?
    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

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    C'est une boucle elle-même que je place après ma boucle qui calcule les valeurs de ma colonne K mais je comprends qu'il m'est impossible d'inclure quelque chose dans cette boucle qui me donne ligne par ligne les valeurs des cellules de la colonne K.

    Ton code fonctionne bien dans cette configuration, j'ai pu testé

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 763
    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 : 12 763
    Points : 28 622
    Points
    28 622
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une boucle sert à exécuter des commandes qui se répètent (structure répétitive) donc tu peux bien sûr trier, filtrer, calculer, charger d'autres classeurs, etc. bref faire tout ce que tu souhaites au sein d'une boucle, encore faut-il savoir ce que l'on veut et surtout bien l'exprimer.

    A lire éventuellement La gestion des boucles dans Excel
    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

  16. #16
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Kestion100 Voir le message
    je comprends qu'il m'est impossible d'inclure quelque chose dans cette boucle qui me donne ligne par ligne les valeurs des cellules de la colonne K.
    For Each permet d'enchainer les cellules d'une zone.
    Une fois que tu as la cellule, tu peux connaitre sa ligne par la propriété Row.
    Une fois que tu as la ligne, tu peux obtenir la cellule de n'importe quelle colonne de cette ligne.

    Ou bien tu peux directement utiliser la propriété Offset pour désigner une cellule par rapport à la cellule courante.

    Ou bien tu peux te faciliter la vie en utilisant une boucle For To (sur le numéro de ligne) plutôt que For Each.

    Il y a certainement une demi-douzaine d'autres solutions.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  17. #17
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Nous ne nous sommes pas compris de bout en bout mais ta solution est OK

  18. #18
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Ce que je voulais faire c'était faire autant de variables DIFFn que de step de la boucle for next qui me donne K1; K2.....

    Step1:
    K1 = MACHIN1 + BIDULE1
    DIFF1 = K1 - L1

    Step2:
    K2 = MACHIN2 + BIDULE2
    DIFF2 = K2 - L2

    .....

    Afin de faire, à la fin de la procédure DIFF1 + DIFF2 + ......= X

    Si X = 0 ....
    Si X <> 0 ....

  19. #19
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 020
    Points : 169
    Points
    169
    Par défaut
    Je ne dois pas être clair

  20. #20
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Je te conseille la lecture de ce tuto sur les tableaux en vba: https://silkyroad.developpez.com/vba/tableaux/
    Plutôt que créer n variables pour tes calculs intermédiaires, il suffit de créer un tableau de taille n et d'y affecter tes valeurs dans la boucle.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. récupération du nom d'un champs dans une boucle for
    Par tarmo57 dans le forum Débuter
    Réponses: 1
    Dernier message: 07/09/2012, 07h41
  2. [XL-2007] Problème dans une boucle For..Next
    Par robby98800 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2012, 07h48
  3. Savoir si un String a changé dans une boucle for
    Par mouss4rs dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2012, 15h04
  4. 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
  5. Variables de session dans une boucle for
    Par lavande4 dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2008, 14h33

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