cs_aloevera
Messages postés3Date d'inscriptiondimanche 1 janvier 2006StatutMembreDernière intervention 2 janvier 2006
-
1 janv. 2006 à 16:37
cs_aloevera
Messages postés3Date d'inscriptiondimanche 1 janvier 2006StatutMembreDerniè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
kalobit
Messages postés169Date d'inscriptionmardi 15 juillet 2003StatutMembreDernière intervention 7 avril 20082 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.