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 :

Boucle sur une cellule #DIV/0! [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut Boucle sur une cellule #DIV/0!
    Bonsoir à tous,

    Pouvez vous me dire l instruction que je dois mettre dans une boucle FOR EACH
    pour que la procédure ne s arrête pas et avec un message d erreur quand elle tombe sur une cellule avec la valeur #DIV/0! ?

    mais critère sont <= 1 and >= 3 et apparament la valeur de #DIV/0! est Erreur 2007 !!!

    d avance merci pour vos réponse

    Alex

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    pas clair comme explication de ton problème mais essaie d'approfondir par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'code
    on error resume next
    'code
    si tu mettais ton code avec des indications...
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    mes critères sont :
    <= 1 and >= 3
    et apparament la valeur de #DIV/0! est Erreur 2007 !!!

    Comment voulez-vous qu'une valeur soit en même temps inférieure ou égale à 1 et supérieure ou égale à 3 ?

    On pourrait comprendre, à priori :
    <= 1 or >= 3
    ce qui reviendrait à écrire :
    <> 2
    Mais même dans ce cas, cela veut dire que la valeur 0 est validée et si vous l'utilisez pour une division, il est évident que cela ne peut que provoquer une erreur.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    en faite je boucle sur une colonne et toute les valeur comprise entre 1 et 3,
    je copie cette ligne et la colle dans une autre feuille.

    mais dans mon tableau excel et dans la collone ou je boucle il y a des divison par 0 donc excel mais dans la cellulu #DIV/0! car toute les donné ne sont pas remplie et ne le sera peut etre jamais

    et quand la macro tombe cette cellule elle stop la procédure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      For Each CelSourceTest In WStarifs.Range(CelSourceDeTri)
     
     
                    If (CelSourceTest.Value) >= 1 And (CelSourceTest) <= 3 Then
    '
                    Set CelDestination = WSdestination.Range("a65536").End(xlUp).Offset(1, 0)
     
    '                WStarifs.Range("f" & CelSourceTest.Row & ";p" & CelSourceTest.Row & ":q" & CelSourceTest.Row).Copy
                     WStarifs.Range("f" & CelSourceTest.Row & ":q" & CelSourceTest.Row).Copy
                    CelDestination.PasteSpecial (xlPasteValuesAndNumberFormats)
                    Else

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    #DIV/0!
    ne peut que provenir d'un calcul (formule ou autre) que l'on ne voit pas dans ton code ! (aucune division n'y est visible).

    Et nous avons tous perdu notre boule de cristal...
    A toi de nous apporter, dans ce cas, les précisions nécessaires et inévitables sur ce que tu as fait ou codé dans ce sens...

    Commence par voir (tout premier pas à faire ... on verra ensuite en fonction de ...) si une des cellules où apparaît ce #DIV/0! contient ou non une formule (et laquelle)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (CelSourceTest.Value) >= 1 And (CelSourceTest) <= 3 Then
    Bien sûr c'est déjà différent, vous aviez écrit à l'origine :
    et maintenant c'est :
    Vous voyez la différence.

    Cela revient également à écrire :
    si je ne me trompe pas ?

    Pour le problème de : #DIV/0!

    Ucfoutu vous a adressé une réponse.

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    proposition à adapter avec filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Columns(1).AutoFilter field:=1, Criteria1:=">=2", Operator:=xlAnd, Criteria2:="<=3"
    Cells.SpecialCells(xlVisible).Copy Sheets("Feuil3").Range("A1")
    Columns(1).AutoFilter
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pour Jean jacques, les valeurs ne sont pas forcément des entiers
    et même 1 et 3 font partie du segment
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    Effectivement la valeur #DIV/0! viens d une formule dans une cellule,
    mais je suis obligé de boucler dessus car c est la division d prix d achat par un prix de vente ( coef.) mais actuellement je n ai pas le prix d achat Donc elle divise rien !

    pour ce qui est entre 1 et 3 je sais que c est 2 mais aussi toute les décimale qui vont avec.

    j ai un peut de mal a expliquer plus clairement le problème

    mais si il y avait une instruction pour lui dire que lorsque la valeur de la cellule est #DIV/0! ( en l occurence en vba il traduit ca par "Erreur 2007") elle l ignore

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par alex santus Voir le message
    mais si il y avait une instruction pour lui dire que lorsque la valeur de la cellule est #DIV/0! ( en l occurence en vba il traduit ca par "Erreur 2007") elle l ignore
    Non... (c'est trop tard !)...
    On ne cherche jamais à travailler à partir de l'effet ! On supprime la cause
    (te viendrait-il à l'idée de soigner un furoncle et non la furonculose ? ===>> non ! et c'est ici pareil !)
    Si je comprends bien, cette erreur n'était pas là et n'apparait qu'en exécution de tes instructions (j'espère ...)
    Or, que modifient-elles ces instructions ?

    === > une destination
    et comment ? ===>>> par un paste (coller)

    Remède : ne pas exécuter ce paste si valeur à coller nulle ...

    Reste que je pense que toute ton appli est dans ce cas à revoir (son architecture)
    reste également que nous ne savons pas, en plus, ce que contient ta clause Else.

    Voilà ! J'estime personnellement que tu es maintenant guidé et que le reste relève de ta seule volonté de bien faire.

    EDIT :
    Reste enfin que tu ne nous a pas dit quelle était cette formule.... et c'est dommage, car elle pourrait être affublée d'une clause conditionnelle d'application ...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    Le message d erreur exite belle et bien dans mon tableau excel et ce meme avant de lancer la macro, car

    dans la collone A j ai mes article
    dans la B le prix d achat
    dans la C le prix de vente
    ET dans la D une formule qui divise la C par la B

    vu qui il a des article dont je n ai pas encore le prix, lors de la division il est normal qui me renvoie #DIV/0!, ca c est pour ce qui est d excel

    Pour VBA : j ai fais une macro des plus simple qui boucle sur la colonne D, SI <=1 et >=3 ( donc un coeficient entre 1 et 3 ) il me copie la ligne dans une autre feuille, jusque la tout fonctionne.

    Mais lorsque vba tombe sur #DIV/0! qui je sais n est pas entre 1 et 3 au lieu de passer au dessus il bloque.

    maintenant peut etre qu ont ne sais pas passer au dessus et voire la chose autrement.

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Si tu ne veux pas passer par le filtre (qui est direct)
    ceci à adapter à ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Cel As Range, i As Long
    i = 2
    For Each Cel In Range("A2:A15")
        If Not IsError(Cel) Then
            If Cel.Value >= 2 And Cel.Value <= 3 Then
                Cel.EntireRow.Copy Sheets("Feuil3").Range("A" & i)
                i = i + 1
            End If
        End If
    Next Cel
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par alex santus Voir le message
    Le message d erreur exite belle et bien dans mon tableau excel et ce meme avant de lancer la macro, car
    Il est grand temps () de nous en parler !
    Il aura fallu que j'écrive ceci plus haut :

    Citation Envoyé par ucfoutu Voir le message
    Si je comprends bien, cette erreur n'était pas là et n'apparait qu'en exécution de tes instructions (j'espère ...)
    Pour que tu nous dévoiles ce "pot aux roses" ... !

    Et tu attends que ta macro répare ou gère quoi , dans cette affaire ? ===>> elle serait littéralement impuissante à y parvenir, c'est évident !

    Relis donc ce que j'ai dit plus haut à propos de la conception/architecture de ton appli ! C'est tout-à-fait d'actualité ...

    Et on attend encore (toujours pas montrée) la formule "cause" de cette erreur ...
    Je n'y crois pas trop, mais on se sait jamais ... elle pourrait peut-être être affublée d'une expression conditionnelle opportune ...
    Alors : cette formule ?

    EDIT :

    Maintenant (on ne peut le deviner) : dans ton code : mets donc un commentaire là où tu pointes vers une cellule contenant cette erreur...
    on va voir si l'on peut tout simplement alors - mais en parfaite connaissance de cause, utiliser une syntaxe du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsError(.(ta cellule)....)
    Mais nous avons besoin de ta plus grande précision sur ce que je te demande ici (tes commentaires dans ton code).

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    CA MARCHE !!

    Mercatog : ton bout de code a marché merveille et fais ce que j attendai copié les ligne avec un coef entre 1 et 3 , je suposse que c est le If not IsError qui a solutionné tous ca, merci je vais pouvoir continué

    MERCI aussi a tous les autres.

    si quelqu un a encore le temps il peut m expliquer quelle est la fonction de ce
    IsError ?

  15. #15
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par alex santus Voir le message
    si quelqu un a encore le temps il peut m expliquer quelle est la fonction de ce
    IsError ?
    Peut-être en ouvrant ton aide en ligne sur ce mot, non ?
    IsError(toto) = True lorsque la variable toto est en erreur (dur ?)
    Reste que, très franchement, tu devrais reprendre l'architecture de ton appli et ses données, car tu vas ainsi aller assez vite au "casse-pipe" ...
    Excel est un tableur et un tableur ne peut qu'être bancale si les données le sont.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Points : 30
    Points
    30
    Par défaut
    Merci de tout ces conseille ucfoutu,

    mais c est juste une appli pour voir si les prix de vente tiens la route,
    donc si dans une cellule il me met un mesage d erreur c est normal et pas grave
    excel ne calculera pas plus mal pour autant,

    maintenant c est vrai que si jamais mis une condition genre =si(a1<1;" " ;......
    je n aurrai jamais eu tous c est problème.

    encore merci pour ta science

    @+

  17. #17
    Invité
    Invité(e)
    Par défaut
    Juste pour faire mon mea-culpa :

    comment ai-je pu être convaincu qu'il s'agissait obligatoirement de nombres entiers ???

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

Discussions similaires

  1. Boucle sur chaque cellule non vide d'une ligne
    Par janigrel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/02/2015, 15h46
  2. Réponses: 7
    Dernier message: 26/10/2014, 16h47
  3. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  4. Focus sur une cellule spécifique d'un DBGrid
    Par danbern dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/11/2004, 19h04
  5. capter l'evenement clic sur une cellule d'un string grid
    Par lasconic dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2003, 10h51

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