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 :

[VBA-E] Comparer des valeurs dans des cellules


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Par défaut [VBA-E] Comparer des valeurs dans des cellules
    Salut à tous,

    je suis nouvel utilisateur de VBA et je dois dire que je galère pas mal. Généralement, même si je mets beaucoup de temps, j'arrive à créer qq macros mais là j'ai un bug sur qq chose qui doit pas être difficile pourtant.

    En fait, je souhaite créer une macro qui permet de comparer toutes les cellules d'une plage de données avec un chiffre et de renvoyer automatique un message d'alerte quand une des cellules varie plus que le chiffre.
    (par exemple de A1 à A10, comparer tous les chiffres de cette plage de données avec le chiffre 1 en valeur absolue et renvoyer un message si une des cellules a un chiffre non compris entre -1 et 1)

    merci à tous pour toute aide, je vais continuer à lire les faq.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut
    Bonjour,

    Je propose cette solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i= 1 TO 10
    IF abs(Range("A" & i).Value)  <  1 THEN
    Msgbox "Valeur comprise entre -1 et 1"
    End if
    Next i
    Je n'ai pas testé le code mais ça me parait pas trop mal

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Janvier 2006
    Messages : 103
    Par défaut
    bon, j'ai rien dit

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    Bonjour
    pour reprendre ton exemple peut être qq chose comme ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub comparer()
    Dim i As Integer
    Dim a As Variant
     
    a = 1
    For i = 1 To 10
        If Abs(Worksheets("nom de ta feuille").cells(i, 1).Value) > a Then
        MsgBox ("Attention la valeur entrée est n'est pas comprise entre -" & a & "et " & a)
        End If
     
    Next i
     
    End Sub
    après si tu veux empêcher qu'une valeur autre soit écrite, je te conseille d'utiliser un While plutot qu'un if avec un inputbox
    dis moi si ca va
    rémi

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Par défaut
    salut à vous 2 et merci pour vos réponses.
    En regardant vos réponses, je me dis que je me suis peut être mal exprimé ou alors que j'ai vraiment du mal avec vba...lol
    je ne pense pas que vos réponses soient ce que je recherche mais je peux me tromper.

    je vous réitère ma question avec plus de précisions et si vous me dites que c le meme prog applicable alors j'arrete vba :p

    dans mon fichier excel, j'ai sélectionné une plage de cellule allant de D2 à D20 et je l'ai intitulé "tab". Cela ressemble à ça:

    0.16
    0.2
    0.5
    0.4
    -0.3
    -0.4
    0.7
    -0.8
    0.26

    truc dans ce genre.

    ce que je souhaite, c qu'un message apparaisse si une de ces cellules a un chiffre non compris entre -0.5 et 0.5. Dans cet exemple, ce serait les 2 chiffres en gras qui sont supérieurs à la variation max.
    COmment faire pour comparer ma plage de cellule avec un chiffre et afficher qu'on doit effectuer des changements sur ces cellules (ici dans l'exemple, les 2 chiffres en gras).

    Je galère vraiment, 2 jours que j'essaie, et en plus l'aide de microsoft est vraiment trop compliqué avec des columnDifference (comparison: ) etc...

    bref merci par avance pour votre aide

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut
    Le code que l'on t'a donné s'applique dans ton cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i= 1 TO 20
    IF abs(Range("D" & i).Value)  <  0.5 THEN
    Msgbox "Merci de modifier la valeur de la cellule D" & i
    End if
    Next i
    Pour les colonnes D1 à D20, on prend la valeur absolue et on compare à la valeur 0,5. Si elle est inférieure, on affiche un message.

    Après tu peux voir pour généraliser un peu plus le code.

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    comme dis orangebox
    nos codes sont valables
    ce qu'il font:
    ils parcourent cellule par cellule et regarde à chaque fois si le nombre contenu dans la cellule est plus grand en valeur absolue que le nombre prédéfini donc regarde si le nombre est bien compris entre par ex -0.5 et +0.5
    si le nombre est plus grand il y a un msg d'erreur qui apparait
    voili voila
    mais non n'arrete pas la vba! ca supprime bcp de tache super relou qd mm
    rémi

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    apres si ton pb c'est que tu veux travailler sur une plage
    j'imagine que qd tu la sélectionne tu défini bien une ligne de début, de fin et une colonne
    stocke ces lignes pour les utiliser avec ces codes

  9. #9
    Membre confirmé Avatar de Currahee
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 157
    Par défaut
    Citation Envoyé par gruget
    comme dis orangebox
    nos codes sont valables
    ce qu'il font:
    ils parcourent cellule par cellule et regarde à chaque fois si le nombre contenu dans la cellule est plus grand en valeur absolue que le nombre prédéfini donc regarde si le nombre est bien compris entre par ex -0.5 et +0.5
    si le nombre est plus grand il y a un msg d'erreur qui apparait
    voili voila
    mais non n'arrete pas la vba! ca supprime bcp de tache super relou qd mm
    rémi
    Dans une grande boite, meme enorme que je ne citerai pas par bonté..., pas mal de prog de suivi de prod sont codés en VBA pour Excel et Access...

    Je vais pas me plaindre, ça me permet de débuter en tant que développeur de commencer doucement

    Bref oui le vba ça permet de faire pas mal de choses
    Mais pas les groupes de contrôles

  10. #10
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    pour ta plage tu peux donc fair ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub comparer()
    Dim a As Variant
    Dim tabl As Range
     
    Set tabl = Range(Worksheets("nom de ta feuille").cells(1, 1), Worksheets("nom de ta feuille").cells(20, 1))
    a = 1
    For Each cell In tabl 
        If Abs(cell.Value) > a Then
        MsgBox ("Attention la valeur entrée est n'est pas comprise entre -" & a & "et " & a)
        End If
    Next cell
    end sub
    attention de ne pas utiliser le mot tab qui a une signification dans VBA
    rémi

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Par défaut
    ok ok merci à tous.

    je viens de tester la macro et en plus je viens de comprendre.
    Toujours plus intéressant de comprendre.
    j'ai utilisé le dernier code, à savoir celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub comparer()
    Dim a As Variant
    Dim tabl As Range
     
    Set tabl = Range(Worksheets("nom de ta feuille").cells(2, 12), Worksheets("nom de ta feuille").cells(24, 12)) 
    'car ça commence à la ligne 2 jusqu'à 24 dans la colonne L'
    a = 0.3
    For Each cell In tabl 
        If Abs(cell.Value) > a Then
        MsgBox ("Attention la valeur entrée est n'est pas comprise entre -" & a & "et " & a)
        End If
    Next cell
    end sub
    Par contre, j'ai un souci même si j'ai vérifié que la macro mache bien sur une autre plage de cellule.
    Mon problème est que les cellules de "tabl" contiennent une formule que j'ai faite, qui est surement fausse et qui est la suivante:
    =SI(RechercheV(A3,Feuil1!$A$2:$b$26,2,faux),RechercheV(A3,Feuil1!$A$2:$b$26,2,faux)-I3),("non trouvé"))

    vu vos niveaux, vous la comprenez facilement, mon problème est que lorsque la valeur cherchée n'est pas trouvée, au lieu de renvoyer "Non trouvé", cela renvoie #N/A# et du coup la macro bug lorsqu'il s'agit la cellule contient #N/A# , enfin c ce que j'ai supposé puisque lorsque j'ai remplacé N/A par un chiffre, ça ne buggait plus.

    ma formule est elle fausse ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 15
    Par défaut
    dsl pour tout à l'heure, je ne voulais pas dire que vos codes étaient faux mais plus que je m'étais mal exprimé :p
    Et gruget, cool ta réponse, écrit en français au lieu de la programmation, ça m'a vachement aidé.
    J'essaie de voir comment corriger ma formule mais j'ai encore des questions:
    avec cette macro, quand il y a une valeur qui varie plus que le chiffre voulu, il y a le msg inscrit dans msgbox qui apparait...jusqu'à là je suis.
    Mais comment faire pour que le message qui apparait indique où sur quelle cellule est la variation. Avec peu de ligne, c facile à chercher mais si je veux appliquer cette macro à un grande nbre de ligne, comment faire à part regarder ligne par ligne.
    Serait ce possible qu'il y ait une alerte, genre une fleche rouge qui s'affiche en face de la cellule concernée et que ça se fasse automatiquement sans avoir besoin de cliquer sur le bouton inséré dans excel ???

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 567
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 567
    Par défaut
    salut
    j'ai pas tout suivi mais pour ta formule, utilise un si est erreur pour dédouaner
    ==SI(ESTERREUR(SI(RechercheV(A3,Feuil1!$A$2:$b$26,2,faux),RechercheV(A3,Feuil1!$A$2:$b$26,2,faux)-I3),("non trouvé"));"*";SI(RechercheV(A3,Feuil1!$A$2:$b$26,2,faux),RechercheV(A3,Feuil1!$A$2:$b$26,2,faux)-I3),("non trouvé"))
    *là, tu place ce que tu veux au cas ou la valeur soit na, je propose 0 mais tu peux aussi faire vide "", mais pas de truc genre texte, sinon, c'est pas bon

  14. #14
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    alors
    pour ta fonction rechercheV (que je ne connaissais pas avant) j'ai regardé dans l'aide Excel vu l'argument Faux que tu utilises, si la fonction ne trouve pas la valeur, elle va renvoyer #N/A
    plusieurs solutions sont possibles:
    déja mettre des tests si comme le propose alsimbad (jai pas trop regardé ce qu'il ta mis mais ca semble pas mal)
    regarde l'exemple 3 de l'aide ou il ya une formule qui correspond à ca:
    =SI(ESTNA(RECHERCHEV(5;A2:E7;2;FAUX)) = VRAI; "Employé introuvable"; RECHERCHEV(5;A2:E7;2;FAUX))
    Si un employé avec l'ID 5 existe, affiche le nom de l'employé ; sinon, affiche le message « Employé introuvable ». (Buchanan)
    La fonction ESTNA renvoie une valeur VRAI lorsque la fonction RECHERCHEV renvoie la valeur d'erreur #NA
    ou bien rajouter des fonctions de test dans ta macro
    du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If Isnumeric(cell.value)=true then
        If Abs(cell.Value) > a Then
        MsgBox ("Attention la valeur entrée est n'est pas comprise entre -" & a & "et " & a)
        End If
    end if
    en fait le pb venant du fait que la fonction abs ne fonction que si ta cellule contient un nombre, j'ai rajouté une fonction qui teste que ta valeur est bien numérique avant de lancer le deuxième test


    Ensuite pour l'histoire des cellules déja tu peux remplacer la msgbox par celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        MsgBox ("Attention la valeur entrée dans la cellule " & cell.Address & " n'est pas comprise entre -" & a & "et " & a)
    ensuite si tu veux en rajouter encore tu peux genre colorier ta cellule en rouge en rajoutant cette ligne apres la msgbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell.Interior.ColorIndex = 3
    voili voila
    rémi

Discussions similaires

  1. Excel - Mettre des valeurs dans les cellules
    Par shuya dans le forum Débuter
    Réponses: 1
    Dernier message: 10/02/2009, 09h45
  2. [WD11] Insérer des valeurs dans des cellules de Table
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 8
    Dernier message: 29/09/2008, 12h55
  3. DataGridView et format des valeurs dans les cellules
    Par saultapt dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/06/2008, 16h55
  4. [OleExcel]Entrer des valeurs dans des cellules
    Par Masmeta dans le forum C++Builder
    Réponses: 21
    Dernier message: 06/12/2006, 08h39
  5. Inserer des valeurs dans une cellule
    Par azerty53 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/09/2006, 16h27

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