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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    juillet 2017
    Messages
    29
    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 : 29
    Points : 8
    Points
    8

    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
    Membre émérite
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    juillet 2016
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 257
    Points : 2 250
    Points
    2 250

    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

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    14 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 14 173
    Points : 38 747
    Points
    38 747
    Billets dans le blog
    48

    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 remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    juillet 2017
    Messages
    29
    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 : 29
    Points : 8
    Points
    8

    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

    Avatar de Pierre Fauconnier
    Homme Profil pro
    Formateur et développeur informatique indépendant
    Inscrit en
    novembre 2003
    Messages
    14 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur informatique indépendant
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 14 173
    Points : 38 747
    Points
    38 747
    Billets dans le blog
    48

    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 remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Vous souhaitez rédiger pour DVP? Contactez-moi
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Futur Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    juillet 2017
    Messages
    29
    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 : 29
    Points : 8
    Points
    8

    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. ORDER BY en fonction du while
    Par kevinf dans le forum PHP & MySQL
    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