[Problème]Macro

Bonjour tout le monde,

Je vous rejoins sur ce forum afin de vous faire part d'un problème lié au codage d'une macro.

Je dispose d'un classeur excel comportant 4303 lignes et plus d'une dizaines de colones.

Dans ce classeur on peut retrouver divers contacteurs dont on étudie la consommation électrique, en séparant la valeur maximale de la valeur opérationnelle.

On s'est aperçu que certaines valeurs opérationnelles étaient supérieures à la valeur maximale.

Du coup j'essaie de faire une macro pour colorer les lignes pour lesquelles il y a un problème.

Pour résumer : pour une colonne donnée je dois scanner 2 lignes successives et vérifier que la ligne du haut est supérieure ou égale à la ligne du bas.

Sub verification_des_maxi_operationnels()

'Cette macro a pour but de colorer en rouge les lignes pour lesquelles la valeur opérationnelle est supérieure à la valeur maxi'

Dim a As Integer ' Déclare la variable liée au nombre de lignes '

Dim b As Integer ' Déclare la variable liée à la colonne '

Dim c As Integer ' Déclare la variable liée à la ligne '

b = 14 'Numéro de la colonne'

c = 2 'Numéro de la ligne'

a = InputBox(" Entrez le nombre maximum de lignes ", " Nombre de lignes ")

' La variable reçoit la valeur rentrée dans l'Input Box'

For b = 14 To b = 29 ' boucle permettant de scanner toutes les colonnes'

For c = 2 To c = a ' boucle permettant de scanner toutes les lignes'

If Cells(c, b) >= Cells(c + 1, b) Then

Rows(c, c + 1).Interior.Color = RGB(255, 0, 0) ' fonction permettant de colorer les lignes pour lesquelles la valeur opérationnelle est supérieure à celle maximale '

Else

c = c + 2 ' incrémentation de la variable pour changer de ligne '

End If

Next

If c = a Then

c = 2

b = b + 1 'incrémentation de la variable pour changer de colonne'

End If

Next

End Sub

Pouvez-vous m'indiquer où pourrait se situer le problème ?

Quand je lance la macro, j'ai bien la fenetre qui me demande le nombre de lignes maximum, mais ensuite rien ne se passe... pas de coloration (alors que je sais qu'il y a des bugs dans le documents).

Merci d'avance !

Edit : Notamment je ne sais pas si je peux nommer une colonne par un numéro ou si je dois intégrer directement les lettres. Et si c'est bien le cas comment incrémente-t'on de colonne ?

Bonjour,

Mets :

For b = 14 To  29 
For c = 2 To  a 

et tu n'incrémentes pas la variable b : C'est la boucle for...Next qui se charge de l'incrémentation

C'est un peu la même chose pour c sauf que visiblement tu veux sauter une ligne sur 2

Dans ce cas c'est :

For c = 2 To  a Step 2

et tu n'incrémentes pas la variable c : C'est la boucle for...Next qui se charge de l'incrémentation

A+

D'accord merci de la précision !

Maintenant quand je lance, j'ai une erreur 1004 : " erreur définie par l'application ou par l'objet" :/

Il n'existe pas un moyen de débugger la macro (comme quand on code sur C ?) ou faire du pas à pas ?

Edit : j'ai une erreur 400 quand j'essaie de lancer la macro à partir d'excel (et non à partir du code)

Bonjour,

Sans fichier joint je ne peux pas tester ce que tu fais...

Tu peux tester ta macro en mode pas à pas à partir du code avec F8 et débuguer en lisant tes variables au survol ou par debug.print

1004 et 400 sont des erreurs systèmes grossières : Tu codes bien dans Module1 ou dans un module de feuille ?

A+

Je vais préparer un fichier factice..

Je suis désolé je n'ai pas le droit de transmettre le classeur sur lequel je suis entrain de travailler.

Après avoir tester avec F8, c'est la fonction pour colorer toute une ligne qui bloque

Tu connaitrais une fonction type ?

Sinon je code sur la feuille2 d'un classeur, je travaille donc sur le code de cette feuille.

Merci

Réserve feuil2 pour les macros évènementielles : code sur un module additionnel. Mais ce n'est pas cela qui coince.

Après avoir tester avec F8, c'est la fonction pour colorer toute une ligne qui bloque

Normal :

Rows(c, c + 1).Interior.Color = RGB(255, 0, 0)

Rows n'attend qu'un argument : l'index

Rows(c).Interior.Color = RGB(255, 0, 0)

ou

Rows(c+1)...

Entre les deux il faut choisir !

A+

Bonjour,

je pense qu'on peut colorer les deux lignes en utilisant la fonction suivante

Rows(c & ":" & c + 1).Interior.Color = RGB(255, 0, 0)

A valider !

oui, oui

Bonjour à tous !

Effectivement le problème provenait de la fonction colorer.

Je n'ai pas eu le temps de revenir pour vous avertir et je m'en excuse..

Aujourd'hui j'ai pas mal bossé sur cette macro, qui automatise un traitement assez long

Par contre savez-vous quoi rajouter dans cette formule Pour que cette fenêtre ne soit plus prioritaire par rapport à la feuille ?

a = InputBox(" Entrez le nombre maximum de lignes ", " Nombre de lignes ")

La feuille contient beaucoup de lignes donc l'utilisateur devrait pouvoir se déplacer vers le bas pour lire le nombre de ligne.

Bonjour,

Ce n'est pas possible à moins de créer un UserForm spécifique en mode non modal.

Mais c'est un marteau pilon pour écraser une mouche !

Pourqoi demander à l'utilisateur de déterminer le nombre de lignes au lieu de demander à la macro de le déterminer ? ce n'est pas bien difficile.

A+

Rechercher des sujets similaires à "probleme macro"