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 :

fonction do While loop


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 34
    Points : 10
    Points
    10
    Par défaut fonction do While loop
    Bonsoir à tous
    j'ai un petit problème et je n'arrive pas à le résoudre. Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Macro1()
     
    ' Macro1 Macro
    '
    'Sub tant_que()
    Range(A1).Select
     Do While ActiveCell.Offset(-1, 0) <> 10
     ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1
     * ActiveCell.Offset(1, 0).Selct
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Vous sélectionnez la cellule A1 en première ligne de votre code, puis vous demandez à tester si la cellule de la ligne au-dessus de la ligne 1 est <> de 10, ce qui génère forcément une erreur. Il faudrait commencer à la ligne 2.

    Mais si vous expliquiez le but recherché, votre code pourrait être écrit autrement.

    Cdlt

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.
    • Comme souvent, pas besoin de vba au départ. Ajouter 1 à la valeur de la cellule précédente est l'affaire d'Excel.
    • En VBA, on évite les SELECT.
    • Si on utilise une boucle, on la ferme (la boucle) avec un Loop.
    • Si A1 est plus grand que 10 au départ de la macro, tu va remplir toute la colonne A (1048576 lignes) puis planter => toujours veiller à placer une condition de sortie qui sera VRAI à un moment donné



    Ca ressemble fort à un exercice, car je ne vois pas la finalité de la chose. En modifiant l'opérateur de comparaison, tu pourrais utiliser ceci, sans aucun SELECT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
      Dim r As Range
     
      Set r = Range("a1")
      Do While r.Value < 10
        r(2).Value = r.Value + 1
        Set r = r(2)
      Loop
    End Sub

    Sur de grands traitements (+/- à partir de 10000 lignes) et dans la mesure où l'on peut formuler la progression des valeurs, on pourrait se passer de la boucle qui est lente, par exemle avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test1()
      Dim r As Range
      Dim Value As Long
     
      If Range("a1") < 10 Then
        Value = 10000 - Range("a1").Value
        Set r = Range("a2").Resize(Value)
        r.Formula = "=a1+1"
        r.Copy
        r.PasteSpecial xlPasteValues
        Application.CutCopyMode = False
      End If
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 34
    Points : 10
    Points
    10
    Par défaut
    bonjour
    effectivement c'est un exemple que j'ai trouvé sur internet et j' ai voulu le testé
    comme ça fonctionne pas j'ai voulu savoir pourquoi

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Je doute que le code que tu nous as donné ait été repris tel quel du net, car il y a une erreur sur chaque ligne. Qui plus est, la logique ne tient pas la route puisque l'on ne sait pas démarrer de A0, il n'est donc pas possible d'obtenir la valeur de A0 pour lui ajouter 1. Qui plus est, à cause des Select inutiles, ce code est d'une ineptie totale.

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Macro1()
     
    ' Macro1 Macro
    '
    'Sub tant_que()
    Range(A1).Select ' Il manque les guillemets pour entourer l'adresse A1
     Do While ActiveCell.Offset(-1, 0) <> 10 ' Ca ne peut que planter car impossible de remonter d'une ligne à partir de la ligne 1
     ActiveCell.Value = ActiveCell.Offset(-1, 0).Value + 1 ' Impossible puisque l'on part de A1
     * ActiveCell.Offset(1, 0).Selct ' Ligne forcément en rouge à cause de l'astérisque, et .Selct n'existe pas
    ' Absence de loop pour boucler, mais comme on ne sait pas lancer la macro à cause des autres erreurs, on n'arrive pas au message explicite s'il n'y avait que cette erreur
     
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Juillet 2017
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 34
    Points : 10
    Points
    10
    Par défaut
    Bonsoir
    c'etait une curiosité de ma part
    ce n'est pas grave je vous remercie
    ça prouve mon niveau en excel
    j'ai reussi avec for next
    encore merci

Discussions similaires

  1. [XL-2007] Structure Do While loop
    Par carlux3 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/11/2010, 12h26
  2. [QThread] Fonction contenant while freeze
    Par Serialk dans le forum Multithreading
    Réponses: 5
    Dernier message: 16/12/2009, 01h53
  3. [MySQL] ORDER BY en fonction du while
    Par kevinf dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/07/2008, 10h28
  4. boucle while loop trop lente et pennible
    Par jm_force dans le forum Access
    Réponses: 3
    Dernier message: 10/08/2006, 17h36
  5. Réponses: 13
    Dernier message: 20/03/2006, 16h26

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