Comparaison avec ActiveCell.Value

Résolu
mcou -  
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   -
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

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
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
linkcr15 Messages postés 362 Date d'inscription   Statut Membre Dernière intervention   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
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
linkcr15 Messages postés 362 Date d'inscription   Statut Membre Dernière intervention   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
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
linkcr15 Messages postés 362 Date d'inscription   Statut Membre Dernière intervention   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
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
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
bonjour

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

bonne suite
0
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
linkcr15 Messages postés 362 Date d'inscription   Statut Membre Dernière intervention   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
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
linkcr15 Messages postés 362 Date d'inscription   Statut Membre Dernière intervention   12
 
Et un While dans le If? Tu répètes l'opération tant que la saisie n'est pas bonne.
0
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