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 :

Multiplication d'une cellule par 5 [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut Multiplication d'une cellule par 5
    Bonjour,

    Je débute en VBA et souhaiterais multiplier par 5 une cellule si elle est égale à 5 sinon arrêter la macro. J'aimerais utiliser la fonction Do while...Loop.

    J'ai utilisé le code suivant mais il ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macroperso ()
     
    Dim x as Long
    x = x + 1
     
    Do While (Cells (x,1) = 5 ) 
        Cells (x,1) = Cells (x,1) * 5
     
    Loop
     
    End Sub


    Le code marche uniquement pour la première cellule (en A1) alors que le chiffre 5 est écrit en A1, A2, A3, la boucle n'est donc pas effective

    Si quelqu'un à une solution je suis preneur

    Merci d'avance, bonne journée

    Rogue

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ai pas bien compris ce que tu veux. Tu dis vouloir multiplier par 1000 une cellule si elle vaut 5 or tu la multiplies par 5 ?
    ET il est normal que la boucle se termine après la première multiplication puisqu'au moment où la cellule prend la valeur 25 elle n'est plus égal à 5 qui est ce que tu as écrit dans ton code Do While (Cells (x,1) = 5 ) soit Faire Tant que Cells(x, 1) = 5 25 n'est donc pas égal à 5.
    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

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Merci pour ta réponse Philippe,

    Je souhaite multiplier une cellule par 5 si elle contient le chiffre 5.

    Exemple : si A1 = 5 alors je veux que A1 soit égal à 5 * 5 = 25
    Si A2 = 5 idem j'aimerais que A2 soit égal à 5 * 5 = 25
    En revanche si A3 = 2 j'aimerais qu'il ne se passe rien et que la boucle s'arrête.

    J'ai tenté de modifier ma formule en fonction de ta réponse ne multipliant par 5 le contenu de la cellule A1 en A2 afin que la boucle puisse fonctionner mais la problème persiste, pire encore Excel plante

    J'ai écrit le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macroperso()
    Dim x As Long
    x = x + 1
    Do While (Cells(x , 1) = 5 )
         Cells (x, 2) = Cells (x, 1) * 5
    Loop
    End Sub

    La formule fonctionne uniquement pour A1 (la valeur de la cellule A1 est égale à 5) puisque j'ai bien la valeur 25 en A2 puis la macro plante (excel load infiniment).

    Aurais-tu une idée?

    Cordialement

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu ne sembles pas avoir lu ce que je t'ai écrit.
    La procédure ne se plante absolument pas. La boucle s'arrête tout simplement parce-que la valeur de la cellule A1 n'est pas égale à 5 mais à 25.
    Donc pour obte,ir ce que tu veux, tu utilises par exemple la boucle For To Next
    Par exemple de la cellule A1 à A25
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub t()
     Dim r As Long
     For r = 1 To 25
       If Cells(r, 1) = 5 Then Cells(r, 1) = Cells(r, 1) * 5
     Next
    End Sub
    Mais il est préférable pour éviter d'écrire sur une feuille active non désirée de préciser sur quel classeur et quelle feuille l'écriture doit ce faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
     Dim r As Long
     For r = 1 To 25
      With ThisWorkbook.Worksheets("Feuil1")
       If .Cells(r, 1) = 5 Then .Cells(r, 1) = .Cells(r, 1) * 5
      End With
     Next
    End Sub
    Et finalement si c'est toujours pour multiplier par 5 ce qui est égal à 5 évidemment c'est plus court d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Cells(r, 1) = 5 Then .Cells(r, 1) = 25
    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

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Merci pour l'astuce avec For...To ça marche parfaitement.

    Cependant, le problème avec For...To est que la boucle ne s'arrête pas si une cellule n'est pas égale à 5... d'où mon besoin d'utiliser une boucle avec une possibilité d'exit.

    En effet, si A1, A2 et A3 sont égales à 5, j'aurais 25, 25 et 25 en B1, B2 et B3, or si j'ai le chiffre 7 en A4, j'aimerais que la boucle s'arrête et que même si j'ai 5 en A5, la multiplication par 5 ne se fasse pas.

    Concernant Do....Loop, j'ai bien lu ce que tu as écrit, c'est pour cela que j'ai codé la formule différemment afin de faire apparaître ma multiplication 5*5 en A2 et non en A1.



    Je verrai donc bien quelque chose dans ce style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t ()
    Dim r As Long
    r = r + 1
    Do While Cells (r , 1) = 5 
        Cells (r, 2) = Cells (r, 1) * 5  (la macro commence à s'exécuter avec r = 0 + 1 = 1, nous avons 5*5= 25 en A2 car A1 est bien égal à 5. )
    
    Loop (avec Loop, je souhaite que la formule recommence avec r = 1 + 1 = 2 et ainsi de suite)
    End Sub
    Merci encore pour ton aide !

  6. #6
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 219
    Billets dans le blog
    2
    Par défaut
    Bonjour xp4rogue, Bonjour Philippe,

    Pour boucler sur toutes les valeurs (jusqu'au cas de sortie) il faut augmenter ta valeur de ligne dans ta boucle

    un truc comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t () 
    Dim r As Long 
    r = 1 
    Do While Cells (r , 1) = 5
          Cells (r, 2) = Cells (r, 1) * 5  '(la macro commence à s'exécuter avec r = 0 + 1 = 1, nous avons 5*5= 25 en A2 car A1 est bien égal à 5. )  
          r=r+1
    Loop '(avec Loop, je souhaite que la formule recommence avec r = 1 + 1 = 2 et ainsi de suite) 
    End Sub

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

Discussions similaires

  1. [POI] Appeler une cellule par son nom
    Par Galak extra dans le forum Documents
    Réponses: 9
    Dernier message: 17/06/2008, 14h33
  2. Réponses: 2
    Dernier message: 03/05/2007, 13h38
  3. Réponses: 2
    Dernier message: 06/04/2007, 12h17
  4. Chois d'une cellule par clic
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/07/2006, 16h07
  5. [VBA]Affectation d'une valeur à une cellule par une fonction
    Par lallougri dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/02/2006, 14h24

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