Comparaison avec ActiveCell.Value
Résolu
mcou
-
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
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.
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
bonjour
si je comprends bien, tu n'as que la ligne de activecell à tester
essaies ceci
bonne suite
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
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?
Ce que je n'ai pas compris c'est pourquoi tu utilises les valeurs des cellules de la case sélectionnée?
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
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
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.
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.
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
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
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
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
bonjour
une proposition à adapter, si du moins, j'ai compris ton problème
https://www.cjoint.com/?0EpqhFWE4Gq
bonne suite
une proposition à adapter, si du moins, j'ai compris ton problème
https://www.cjoint.com/?0EpqhFWE4Gq
bonne suite
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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