Comparaison avec ActiveCell.Value

Résolu/Fermé
mcou - 15 mai 2012 à 14:27
ccm81 Messages postés 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 - 16 mai 2012 à 18:37
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 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
16 mai 2012 à 09:53
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
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 mercredi 7 janvier 2009 Statut Membre Dernière intervention 31 mars 2016 12
15 mai 2012 à 14:54
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
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 mercredi 7 janvier 2009 Statut Membre Dernière intervention 31 mars 2016 12
15 mai 2012 à 16:21
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
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 mercredi 7 janvier 2009 Statut Membre Dernière intervention 31 mars 2016 12
15 mai 2012 à 16:47
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
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 10851 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 16 avril 2024 2 404
15 mai 2012 à 16:08
bonjour

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

bonne suite
0
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
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
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 mercredi 7 janvier 2009 Statut Membre Dernière intervention 31 mars 2016 12
16 mai 2012 à 13:57
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
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 mercredi 7 janvier 2009 Statut Membre Dernière intervention 31 mars 2016 12
16 mai 2012 à 14:46
Et un While dans le If? Tu répètes l'opération tant que la saisie n'est pas bonne.
0
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