Boucle while + incrément

Résolu
manu6788 -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

étant novice en macro, j'essaye d'un crée une permettant d'incrémenter une cellule (C49) de +10 en + 10 jusqu'à ce qu'une autre (K49) afficher "yes" ou que la valleur atteigne un certain nombre (présent dans C48)

par la suite je voudrais afficher un message indiquant qu'aucune solution 'a été trouvée (si C49 dépasse C48 sans qu'un YES ne se soit affiché).

J'ai créé cette macro qui semble ne pas fonctionner dès la conditions K49 différente de YES

While Range("k49") <> YES Or Range("c49") <= Range("C48")

Range("c49") = Range("c49") + 10

Wend

If Range("c49") > Range("c48") And Range("k49") <> "YES" Then MsgBox "No solution found", , "problem"

ps : je ne souhaite pas attribuer un nom à chaque cellule puisqu'un calcul doit se refaire à chaque incrément.

Merci d'avancepour vos conseils

6 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour
    While Range("k49") <> "YES"

    manquait les guillemets
    0
  2. manu6788
     
    Merci mais j'ai également essayé avec les guillemets et le résultat est le même

    en essayant d'enlever cette partie "Range("k49") <> YES Or " ça fonctionne donc je pense que l'erreur vient de cette partie...

    (le msgbox ne fonctionne pas non plus)
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Salut Michel,
    Peut être un problème de casse...
    Essaye ce test :

    Sub test()
    If Range("K49") = "YES" Then
        MsgBox "majuscule"
    ElseIf Range("K49") = "yes" Then
        MsgBox "minuscule"
    Else
        MsgBox "Pas Yes"
    End If
    If UCase(Range("K49")) = "YES" Then
        MsgBox "Même en minuscule ça fonctionne avec UCase()"
    End If
    End Sub
    0
  4. manu6788
     
    erreur sur la première ligne...

    If Range("K49") = "YES" Then
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      N'aurais tu pas, par hasard, en K49 une formule, laquelle renverrait actuellement une erreur genre #Div/0 ou #NA ou #J'ensaisrien...?
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Combien as tu de caractères dans K49 ?
      test à faire avec =NBCAR(K49)
      0
    3. manu6788
       
      > pijaku

      si en effet K49 ets bien une formule qui peut être #NA !
      0
    4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Excuse moi de te déranger avec mes réponses manu
      mais tu n'as pas besoin de boucle pour traiter ce oroblème (hormis K49)

      Range("C49") = Range("C49") - (Range("C49") - Range("C48")) Mod 10
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Quand tu testes en VBA le résultat d'une formule contenue dans une cellule, il faut que tu penses à gérer les erreurs possibles.
      Tu as deux choix pour cela :
      1- tu gères l'erreur dans la formule directement.
      Exemple : en A1 : 10, en A2 : rien ou 1 en A3, la formule =A1/A2
      Quand A2 n'est pas remplie, A1/A2 renvoie l'erreur #DIV/0!
      Pour y remédier, un test SI suffit. La formule en A3 devient donc :
      =SI(ESTERREUR(A1/A2);"";A1/A2)
      2- tu gères l'erreur par VBA
      par exemple :
      If IsError(Range("A3")) Then
          'Ici le traitement à effectuer si Erreur
      Else
          'Ici le traitement à effectuer si pas d'erreur
      End If


      Ensuite, je parlais de casse tout à l'heure. Si en K49 tu écris "Yes" (sans guillemets) et que tu testes comme ceci : If Range("K49") = "YES" Or Range("K49") = "yes", ça renverra toujours NON! Pour contourner ce problème on test sur la "transformation virtuelle" de K49 en majuscule : If UCase(Range("K49")) = "YES". Là tu obtiendras ce que tu souhaites.

      C'est tout bon maintenant?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. manu6788
     
    Le problème provient bien du résultat #NA dans ma cellule K49

    comment faire pour qu'un résultats #NA ne lui pose pas problème et qu'il continue tout de même?
    0
  7. manu6788
     
    J'ai finalement contourné le problème en intégrant la fonction "ESTNA()" pour avoir un résultat réel ;)

    Merci à vous deux
    0