Comparaison avec ActiveCell.Value

Résolu
mcou -  
ccm81 Messages postés 11033 Statut Membre -
Bonjour,

Dans l'écriture d'une macro, je cherche à comparer la valeur de deux cellules d'une même ligne.
Mon problème c'est que ma première cellule se définit nécessairement par ActiveCell.Value (elle provient d'un activeCell.Offset et se retrouve dans ma colonne Q). Ma seconde cellule (cellule2)se définit par la colonne G et par la ligne correspondant à la ligne de la cellule déjà sélectionnée (activeCell).

Pour info, je cherche à établir cette comparaison pour effectuer un
Do while ActiveCell.Value com<> Cellule2
MsgBox ...
ActiveCell = InputBox(...)
Loop

Je ne sais pas si je suis très précise. Merci d'avance.

5 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    si je comprends bien, tu n'as que la ligne de activecell à tester
    essaies ceci

    Option Explicit
    
    Const cofixee = "A"
    Const covarie = "D"
    Const coul = 8
    
    Public Sub verif()
    Dim li As Long
    Dim ms, vf
    With ActiveSheet
      li = ActiveCell.Row
      .Rows(li).Select
      vf = .Range(cofixee & li).Value
      If vf <> .Range(covarie & li).Value Then
         .Range(cofixee & li).Interior.ColorIndex = coul
         .Range(covarie & li).Interior.ColorIndex = coul
          ms = "données ligne " & li & " différentes, voulez vous rectifier ?"
          If MsgBox(ms, vbYesNo) = vbYes Then
            ms = InputBox("données ligne " & li & " différentes", , vf)
            .Range(covarie & li).Value = ms
          End If
        End If
    End With
    End Sub

    bonne suite
    1
    1. mcou
       
      ta macro marche et est bien adaptable. Entre temps, j'ai trouvé une autre solution qui me convient parfaitement puisque je voulais un do while (nécessaire car tant que ce n'est pas bon, on ne peut pas poursuivre - ce qui n'était pas intégré dans ta macro). Merci beaucoup ! :)

      Au passage, voici ma solution :
      Sub amount()

      ActiveCell.Offset(0, 1).Select

      Dim I As Long
      I = ActiveCell.Row
      Do While ActiveCell.Value <> Cells(I, 7).Value 'Si la valeur en Gi est différente de la valeur en Qi, avec 7 correspond à la colonne G et 17 à la colonne Q
      MsgBox "Le montant Cegid (colonne Q) est différent du montant saisi initialement (colonne G).", vbCritical
      ActiveCell = InputBox("Veuillez saisir de nouveau le montant Cegid (colonne Q)")
      Loop

      End Sub
      0
  2. linkcr15 Messages postés 423 Statut Membre 12
     
    Je n'ai pas tout compris mais je vais essayé de t'aider. Tu as deux cellules par ligne et tu veux effectuer un opération tant que les deux cellules sont différentes?
    Ce que je n'ai pas compris c'est pourquoi tu utilises les valeurs des cellules de la case sélectionnée?
    0
    1. mcou
       
      Par ligne, j'ai plein de cellules. Mais je souhaite faire une comparaison sur deux d'entre elle.
      Ces deux cellules contiennent des montants. Et je souhaite réaliser vérifier par une macro que ces deux montants sont bien identiques.
      De ce fait, je chercher à exprimer un do while et faire une comparaison " <>" et si tel est le cas, j'ouvrirais une inputbox pour remodifier le montant de l'activecell
      0
    2. linkcr15 Messages postés 423 Statut Membre 12
       
      Et le but est de refaire cette opération pour chaque ligne utilisée?
      Car je ne comprends pas pourquoi faire un Do While sur une ActiveCell, pourquoi ne pas utiliser Cells simplement?
      0
    3. mcou
       
      en fait, je programme une macro complète pour vérifier l'ensemble de ma saisie (saisie sur une ligne).
      je fais plusieurs macro et une seule qui combine le tout.
      la macro que je cherche à faire est une composante : d'où l'activeCell puisqu'elle vient après une première macro. je ne sais pas si je suis très compréhensible :s

      mon fichier est un fichier de suivi de gestion de commande. dans une première partie du tableau, il y a plusieurs colonnes à remplir par commande (une ligne = une commande) sur les différents points suivant par eg : qui commande, fournisseur, codecomptable, quand, montant (ma colonne G) etc...
      dans une seconde partie de mon tableau, elle sert de rapprochement entre les commandes reçues et en cours. je retrouve dans cette partie une autre colonne montant (colonne Q).

      Ma macro cherche donc à vérifier sur une seule ligne (une vérification par ligne puisque les vérif se font au fur et à mesure qu'une commande est reçue) si le montant de la colonne Q est bien égal au montant de la colonne G. Si tel n'est pas le cas, je redemande à saisir de le montant une nouvelle fois.

      Je ne connais pas la fonction Cells. Pouvez-vous m'en dire d'avantage ?
      Je ne peux vous joindre mon fichier, étant donné qu'il est interne à l'entreprise.

      Merci beaucoup.
      0
    4. linkcr15 Messages postés 423 Statut Membre 12
       
      Je n'ai pas ton programme sous les yeux, donc je ne peux faire que des suppositions. Mais dans ton cas, je ne me préoccuperais pas de l'ActiveCell, je vérifierais simplement que, pour chaque ligne, les valeurs correspondent. Ainsi, voici le code auquel je pense :
      i=1
      Sheets("nom de ta feuille").activate
      while cells(i,1).value<>"" 'Tant que ta ligne n'est pas vide
      if cells(i, 7).value<>cells(i, 17).value then 'Si la valeur en Gi est différente de la valeur en Qi, avec 7 correspond à la colonne G et 17 à la colonne Q
      ....
      else
      ....
      end if
      wend
      0
    5. mcou
       
      Bonjour,
      Je viens de reprendre votre macro telle que :
      Sub adapt2()
      i = 1
      Sheets("Feuil3").Activate
      While Cells(i, 1).Value <> "" 'Tant que ta ligne n'est pas vide
      If Cells(i, 7).Value <> Cells(i, 17).Value Then 'Si la valeur en Gi est différente de la valeur en Qi, avec 7 correspond à la colonne G et 17 à la colonne Q
      MsgBox "les montants sont différents, vbcritical"
      Cells(i, 17) = InputBox("veuillez saisir de nouveau le montant de la commande colonne Q")
      End If
      Wend
      End Sub

      Cependant, elle ne peut s'executer. Un message d'erreur m'apparait me disant que la variable i n'est pas définie. :/
      Merci de votre aide
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    une proposition à adapter, si du moins, j'ai compris ton problème
    https://www.cjoint.com/?0EpqhFWE4Gq

    bonne suite
    0
    1. mcou
       
      Bonjour,

      Votre macro fonctionne bien. Je vais tenter de la comprendre et de la réadapter à mon cas puisqu'elle semble résoudre mon problème. Je vous remercie et vous tiens au courant ;)
      0
    2. mcou
       
      Bonjour,

      Je n'arrive pas à modifier la macro de façon à ce qu'elle ne traite qu'une ligne (je ne veux pas qu'elle vérifie tout le tableau), mais ma ligne en cours de vérification. pour plus d'explications, cf ma réponse à linkcr15.
      0
  4. mcou
     
    La solution a été trouvée !!

    Sub amount()

    ActiveCell.Offset(0, 1).Select

    Dim I As Long
    I = ActiveCell.Row
    Do While ActiveCell.Value <> Cells(I, 7).Value 'Si la valeur en Gi est différente de la valeur en Qi, avec 7 correspond à la colonne G et 17 à la colonne Q
    MsgBox "Le montant Cegid (colonne Q) est différent du montant saisi initialement (colonne G).", vbCritical
    ActiveCell = InputBox("Veuillez saisir de nouveau le montant Cegid (colonne Q)")
    Loop

    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. linkcr15 Messages postés 423 Statut Membre 12
     
    C'est le Do While que je ne comprends pas, pourquoi est-ce qu'un simple
    If ActiveCell.Value <> Cells(i, 7) then
    ...
    End If

    ne suffit pas?
    0
    1. mcou
       
      parce que le if n'oblige pas la saisie... alors que le "do while" qui signifie "tant que" me permet d'obliger la saisie
      0
    2. linkcr15 Messages postés 423 Statut Membre 12
       
      Et un While dans le If? Tu répètes l'opération tant que la saisie n'est pas bonne.
      0
    3. mcou
       
      je pourrais tester cette possibilité pour améliorer la macro, dès que j'ai le temps. pour le moment j'avance sur mon projet avec ma première solution puisqu'elle fonctionne.
      Merci beaucoup de tes propositions !
      0