comparaison

DARDI

XLDnaute Nouveau
Bonjour,

j'ai une macro assez conséquente à développer en VBA...

d'un point de vue algorithmique, pas de soucis, je maîtrise (jadis j'ai développé en FORTRAN, PASCAL et C)...

par contre il faut que j'appréhende la syntaxe VBA...

quelqu'un peut-il me traduire ce petit bout d'algorithme en VBA :

ValeurCelluleCourante est affecté de ValeurCelluleA1

tant que ValeurCelluleA51 <> ValeurCelluleCourante
alors ValeurCelluleCourante est incrémenté de 1
sinon mettre une couleur dans la cellule trouvée

pour me mettre dans le bain, j'aimerai avoir l'équivalent en macro VBA...

merci.
 

Pierrot93

XLDnaute Barbatruc
Re : comparaison

Bonjour Dardi

regarde peut être le code ci dessous, si j'ai bien compris :

Code:
Sub test()
Do While ActiveCell.Value <> Range("B1")
    ActiveCell.Value = ActiveCell.Value + 1
    ActiveCell.Interior.ColorIndex = 3
Loop
ActiveCell.Interior.ColorIndex = xlNone
End Sub

bonne journée
@+
 

G.David

XLDnaute Impliqué
Re : comparaison

Je ne comprends pas la finalité si tu incrémente ta cellule courante tant qu'elle est différente de ta cellule A51 si ta cellule courante est inférieur ta boucle s'arrêtera dès que la valeur sera égale donc autant mettre activecell.value=range("a51").value
par contre si elle est supérieur ta boucle tournera sans fin ?
Je pense que la question est peut être mal expliquée ( bon d'un autre coté il n'est pas encore 8 heures et je n'ai bu que deux cafés )
le truc de la boucle doit être un While .... wend mais les problèmes cités ci dessus vont apparaitre
Cordialement
G.David
 

Pierrot93

XLDnaute Barbatruc
Re : comparaison

Re, bonjour David,

tu as raison David, un controle supplémentaire à mettre en place pour éviter la boucle infinie, en cas de valeur supérieure :

Code:
Sub test()
Do While ActiveCell.Value <> Range("B1") And ActiveCell.Value < Range("B1")
    ActiveCell.Value = ActiveCell.Value + 1
    ActiveCell.Interior.ColorIndex = 3
Loop
ActiveCell.Interior.ColorIndex = xlNone
End Sub

@+
 

JNP

XLDnaute Barbatruc
Re : comparaison

Bonjour Dardi :),
Il manque dans ta demande la plage de recherche. D'autre part, dans une boucle While, tu va faire l'action jusquà ce que la condition soit remplie, donc tu n'aura pas de Sinon.
A part cela, ce devrait être de ce type :
Code:
Selection = Cells(1,1)
Do While Cells(51,1) <> Selection
Selection = Selection + 1
Loop
Selection.Interior.ColorIndex = 1 [COLOR=seagreen]' (Numéro de la couleur souhaitée)[/COLOR]
Bon courage :cool:
 
Dernière édition:

G.David

XLDnaute Impliqué
Re : comparaison

finalement cette histoire de plage tournerait plutôt sur l'emploi de Find de façon à cibler toute les cellules ayant la valeur souhaité et une totalisation dans une cellule compteur (enfin ce me semblerait plus logique)
G.David
 

DARDI

XLDnaute Nouveau
Re : comparaison

la mise au bain est dure...

j'ai testé vos bouts de code... désolé, ça ne marche pas...

j'ai certainement mal formulé ma problématique...

j'ai une colonne de chiffres (de A1 à An) et dans une cellule (p.e. C51) un chiffre...

je souhaite parcourir la colonne de chiffres à partir de A1, jusqu'à ce qu'il y est égalité et pour vérifier que le code a bien fonctionné, affecté une couleur à la cellule contenant le même chiffre que la cellule (ici C51)...

tout en sachant que le chiffre recherché est bien dans la colonne.

merci.
 

Pierrot93

XLDnaute Barbatruc
Re : comparaison

Re

dans ce cas, peut être pas nécessaire de faire une boucle, regarde le code ci dessous, fait une recherche dans la colonne A :

Code:
Dim x As Range
Set x = Range("A:A").Find(Range("C51").Value, , xlValues, xlWhole, , , False)
If Not x Is Nothing Then x.Interior.ColorIndex = 3 Else MsgBox "valeur non trouvée"

@+
 

pierrejean

XLDnaute Barbatruc
Re : comparaison

bonjour Dardi

Salut Pierrot :)
Salut David :)
Salut JNP :)

une proposition

Code:
For x = 1 to n
 if Range("A" & x)=Range("C51") then Range("A" & x).interior.colorindex=3
next n

ps: n peut etre remplacé par
RAnge("A65536").end(xlup).Row
(derniere cellule non vide de la colonne A
 

G.David

XLDnaute Impliqué
Re : comparaison

Ah ben si les réponses vont ceci ne sert plus a rien
Code:
 Sub recherche()
Dim a As Variant
Dim cel
Dim lg
lg = 1
a = Range("a1:a" & Range("a65535").End(xlUp).Row)
For Each cel In a
If cel = Range("c5").Value Then
Cells(lg, 1).Interior.ColorIndex = 3
End If
lg = lg + 1
Next
End Sub
ps j'ai loupé une partie pause café:D
 
Dernière édition:

DARDI

XLDnaute Nouveau
Re : comparaison

merci Pierro93, ça marche...
si je comprend bien, l'emploi de Find permet de s'affranchir de la boucle...

pierrejean, ça ne marche pas, quand je replace n par une valeur ou par RAnge("A65536").end(xlup).Row...

bonne journée.
 

DARDI

XLDnaute Nouveau
Re : comparaison

merci pour vos réponses...

Pierrot93, peux-tu m'expliquer les arguments de la fonction Find...

Find(Range("C51").Value, , xlValues, xlWhole, , , False)

bon le premier, j'ai compris, la valeur de la cellule C51... mais ensuite???...

ou alors un lien décorticant cette fonction.

merci.
 

pierrejean

XLDnaute Barbatruc
Re : comparaison

bonsoir

Mon ami Pierrot etant momentanement absent ,je prend la plume qu'il m'a prétée

Voici quelques renseignements puisés a une source sure

algorihme de recherche:

Menu Outils -> Macro ->Visual Basic Editor
puis touche F1, Onglet Index
ecrire Find et Cliquer sur rechercher


Find, méthode


Recherche une information spécifique dans une plage et renvoie un objet Range qui représente la première cellule où cette information apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est pas trouvée. N'affecte ni la sélection ni la cellule active.
Pour plus d'informations sur la fonction de feuille de calcul Find de Visual Basic, consultez Utilisation des fonctions de feuille de calcul dans Visual Basic.
Syntaxe
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte)
expression Obligatoire. Expression qui renvoie un objet Range.
What Argument de type Variant obligatoire. L'élément à rechercher. Il peut s'agir d'une chaîne de caractères ou de tout autre type de données Microsoft Excel.
After Argument de type Variant facultatif. La cellule après laquelle vous souhaitez commencer la recherche. Cela correspond à la position de la cellule active lorsqu'une recherche est effectuée à partir de l'interface utilisateur. Notez que l'argument After doit désigner une seule cellule de la plage et que la recherche commence après cette cellule ; la recherche ne porte pas sur la cellule spécifiée avant que la méthode y revienne avoir exploré la totalité de la plage de recherche. Si vous ne spécifiez pas cet argument, la recherche commence après la cellule située dans le coin supérieur gauche de la plage.
LookIn Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlFindLookIn suivantes : xlFormulas, xlValues ou xlComments.
LookAt Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlLookAt suivantes : xlPart ou xlWhole.
SearchOrder Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchOrder suivantes : xlByColumns ou xlByRows.
SearchDirection Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchDirection suivantes : xlNext ou xlPrevious. La constante par défaut est xlNext.
MatchCase Argument de type Variant facultatif. Affectez-lui la valeur True pour que la recherche respecte la casse. La valeur par défaut est False.
MatchByte Argument de type Variant facultatif. Cet argument est utilisé uniquement si vous avez sélectionné ou installé la prise en charge des langues codées sur deux octets. Affectez-lui la valeur True pour que les caractères codés sur deux octets correspondent uniquement à des caractères codés sur deux octets. Affectez-lui la valeur False pour que les caractères codés sur deux octets correspondent à leurs équivalents codés sur un octet.
Remarques
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode. Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.
Les méthodes FindNext et FindPrevious permettent de répéter la recherche.
Lorsque la recherche atteint la fin de la plage de recherche spécifiée, elle revient au début de cette plage. Pour arrêter une recherche lorsqu'elle revient au point de départ, enregistrez l'adresse de la première cellule trouvée, puis comparez l'adresse de chaque cellule ultérieurement trouvée avec l'adresse enregistrée.
Pour effectuer des recherches plus complexes, utilisez une instruction For Each...Next avec l'opérateur Like. Par exemple, l'exemple de code suivant montre comment rechercher toutes les cellules de la plage A1:C5 qui utilisent une police dont le nom commence par les lettres « Cour ». Lorsque Microsoft Excel trouve une cellule correspondante, il lui affecte la police Times New Roman.
For Each c In [A1:C5] If c.Font.Name Like "Cour*" Then c.Font.Name = "Times New Roman" End IfNext
 

Statistiques des forums

Discussions
312 785
Messages
2 092 083
Membres
105 190
dernier inscrit
Didierbdx