Comparaison entre 2 feuilles

Résolu
cs_aloevera Messages postés 3 Date d'inscription dimanche 1 janvier 2006 Statut Membre Dernière intervention 2 janvier 2006 - 1 janv. 2006 à 16:37
cs_aloevera Messages postés 3 Date d'inscription dimanche 1 janvier 2006 Statut Membre Dernière intervention 2 janvier 2006 - 2 janv. 2006 à 19:16
Bonjour à tous,



Débutante programmation, voici mon programme (en simplifié) que je dois coder.

Je dois comparer le nom d'une société que l'utilisateur entrera sur une
feuille Excel dans une cellule A1 avec celle qui figure déjà sur une 2e
feuille d'un même classeur. Si cela est égale au nom de la société donc
correct, je colorie cette cellule en vert sinon elle doit être en
rouge.

Ensuite je compare les mois, puis l'année inscrite sur chacune des 2
feuilles dans une cellule B2 (exemple : 2005) et voir si elles sont
identiques avant de recommencer avec les lignes suivantes avec une
boucle while.

Si les valeurs ne sont pas identiques, j'indique ko dans la première cellule vide de la colonne.

Qu'est-ce qui ne fonctionne pas ?

D'autre part parfois la commande "Compiler VBAProject "est en grisé
quand j'en ai besoin, pourquoi ? J'espère avoir été clair dans mes
explications. Merci d'avance pour votre aide !



Dim I 'ligne

Dim J 'colonne

Dim v_societe As String

Dim flag_ko As Boolean

I = 1

J = 1

v_societe = ActiveSheet.Cells(J, 1)

flag_ko = False

Dim n 'compteur colonne

n = 1



While (ActiveSheet.Cells(I, 1).Value <> "")

I = I + 1



'comparaison de societe

While v_societe = ActiveSheet.Cells(I, J).Value

'comparaison des mois en lettres

If
Worksheets("Feuil2").Cells(I, J).Value = Worksheets("Feuil1").Cells(I,
J).Value Then

Selection.Interior.ColorIndex = xlNone

With Selection.Interior

.ColorIndex = 4

.Pattern = xlSolid

End With

Cells(I, J).Select

Else

flag_ko True And Selection.Interior.ColorIndex xlNone


With Selection.Interior


.ColorIndex = 3


.Pattern = xlSolid


End With


Cells(I, J).Select

End If



'comparaison des annees sur 4 chiffres

If Worksheets("Feuil2").Cells(I, J).Value = Worksheets("Feuil1").Cells(I, J).Value Then


Selection.Interior.ColorIndex = xlNone

With Selection.Interior

.ColorIndex = 4

.Pattern = xlSolid

End With

Cells(I, J).Select

Else

flag_ko True And Selection.Interior.ColorIndex xlNone


With Selection.Interior


.ColorIndex = 3


.Pattern = xlSolid


End With


Cells(I, J).Select

End If



'message ko dans la premiere cellule vide de la colonne

If flag_ko = False Then

I = I + 1

J = J + 1

Set ActiveSheet.Cells.Value = "KO"




End If






Wend



'colorier en rouge le nom de la societe pour les mois erronnés

If J <> 13 Then

For n = J - I To J


Selection.Interior.ColorIndex = xlNone


With Selection.Interior


.ColorIndex = 3


.Pattern = xlSolid


End With


Cells(J, 1).Select


Next n

End If



Wend

End Sub

3 réponses

kalobit Messages postés 169 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 7 avril 2008 2
2 janv. 2006 à 16:58
Salut,

Pour ce qui est de la commande compiler, elle est grisée lorsque ton code est en cours d'execution. Il faut donc arrêter le code pour recompiler le projet.

Ensuite, il y a une erreur quand tu inscrit KO

"Set ActiveSheet.Cells.Value = "KO""

l'instruction set n'a pas lieu d'être ici. il ne s'agit pas d'attribuer un objet à cells mais une valeur.
De plus, l'objet cells est une collection qui contient toute les cellules de la feuille. en gros, tu inscrit "KO" dans toutes les cellules !!!

pour continuer, tu utilises souvent l'instruction AND qui sert à ajouter des conditions et non non à effectuer plusieurs instructions.

Utilisation de and :
If mavaleur>5 and mavaleur<10 then msgbox "OK"

il s'agit bien de deux conditions
pour deux instruction : mavaleur 10 : tavaleur 5
ou
mavaleur = 10
tavaleur = 5

On continue

Visiblement, tu as utilisé l'enregistreur de macro, ton code peut être éclairci.
remplace simplement
Selection.Interior.ColorIndex = xlNone
With Selection.Interior
.ColorIndex = 4
.Pattern = xlSolid
End With
par
Selection.Interior.ColorIndex = 4
ça suffira

lorsque tu colorie un cellule, selectionne là juste avant pour éviter les erreurs
cells(I,J).select
selection.interior.colorindex = 3

Voilà pour ce qui est de la syntaxe.
Maintenant, il faut s'attaquer à l'algorythme.
Et là, je dois avouer que j'ai pas franchement tout compris.
Visiblement, tu connais les instruction de base du VBA alors je te propose la méthode suivante.

Tu vas écrire en frnçais ce que tu veux faire en utilisant la grammaire de la programmation. Ce sera l'architecture de ton code. Ensuite, tu remplacera les objet par leur nom en vb ainsi que leur propriété.

Ca donne un truc du genre

Société saisie = cellule a1 de la feuille1
mois saisi = cellule a2 de la feuile1
....

mois à comparer = cellule a1 de la feuille 2
....

si société saisie = société à comparer alors
la couleur de la cellule a1 de la feuille1 est vert

sinon
la couleur de la cellule a1 de la feuille 1 est rouge
fin de si

....

ensuite, tu pourras coder en vba.

Lorsque tu sera plus a l'aise avec la programmation, tu te passeras de cette étape mais pour l'instant, elle semble encore indispensable.

je te conseil de commencer à coder pour une ligne complète afin d'avoir un code propre pour le traitement des lignes.

ensuite tu places ton code dans la boucle et tu rajoute les variables qui vont bien pour incrémenter les lignes.

test au fur et à mesure et compare le resultat obtenu par chaque ligne de code à celui que tu attends. l'exécution pas à pas est très utile pour repérer tes erreurs. Tu peux aussi afficher les valeurs des variables dans le fenêtre d'execution pour éviter de jongler entre VBA et Excel place des espions sur tes numeros de ligne et de colonne pour savoir sur quelle cellule tu travaille et utilise les noms de code des feuilles au lieu des noms ( Feuil1.cells(i,j) au lieu de worksheets("Feuille 1").cells(I,J) ) et n'oublie pas que tu peux modifier la propriété codename de chaque feuille pour que ce soit plus lisible.

Voilà pour commencer et n'hésites pas à demander.

Bon travail
3
cs_aloevera Messages postés 3 Date d'inscription dimanche 1 janvier 2006 Statut Membre Dernière intervention 2 janvier 2006
2 janv. 2006 à 19:13
Merci MP pour ta réponse ! Je vais pouvoir avancer dans mon projet maintenant !

Je vais sûrement avoir d'autres questions à te poser plus tard.
0
cs_aloevera Messages postés 3 Date d'inscription dimanche 1 janvier 2006 Statut Membre Dernière intervention 2 janvier 2006
2 janv. 2006 à 19:16
Excuse-moi je me suis trompée dans ton pseudo kalobit !
0
Rejoignez-nous