Mise en forme conditionnelle sous VBA

pouillette

XLDnaute Nouveau
Bonjour,

Je veux utiliser la mise en forme conditionnelle avec VBA, pour remplir les cellules.
Voici mon code :

Dim Ncol as long

Ncol = 10

If Cells(Nlig, 3) = "" Then Cells(5, Ncol) = ""
If Cells(5, Ncol) >= Cells(Nlig, 3) And Cells(5, Ncol) <= Cells(Nlig, 5) Then
Cells(5, Ncol) = "x"
Else
Cells(5, Ncol) = ""
End If

J'ai un message comme quoi il y a une erreur de definition de l'application ou de l'objet.
Nlig est deja defini et fonctionne.

Dans la ligne en bleue, Ncol = 0.

Pouvez vous m'aider s'il vous plait.

Pouillette
 

KenDev

XLDnaute Impliqué
Re : Mise en forme conditionnelle sous VBA

Bonjour Pouillette, bonjour le fil,

pierrot93 à dit:
le numéro de colonne doit être à minima 1, qui représente la colonne A... Il n'y a pas de colonne 0...

pierrejean à dit:
Y-a-t-il quelque chose entre Ncol=10 et la ligne bleue ?

Et aussi tu déclares bien et affecte une valeur à NCol mais on ne voit pas la même chose pour Nlig.

Cordialement.
 

pouillette

XLDnaute Nouveau
Re : Mise en forme conditionnelle sous VBA

Bonjour,

Desole je me suis mal expliquee, quand je lance la macro et que le bug s'affiche, la ligne en bleue et surligner en jaune. Quand je me place sur le Ncol, une petite fenetre m'affiche que Ncol = 0.
Moi je veux Ncol = 10

Ce q
 

pouillette

XLDnaute Nouveau
Re : Mise en forme conditionnelle sous VBA

Desole... je reprend

Ma ligne 5 contient des dates, du 1er janvier au 31 decembre.
Dans ma colonne 3 j'ai des dates de debut et dans ma colonne 5 des dates de fin.
Ce que je veux c'est qu'il marque une croix dans toutes les cases de la ligne ou il y a les dates, lorsque ces cases sont comprises entre la date de debut et la date de fin.

En fait j'ai deja attribue a "x" une couleur dans la mise en forme conditionnelle.

Nlig est determine par :

Dim Nlig as Long

If Cells(8, 1) = "" Then
Nlig = 8
Else
Nlig = Cells(Rows.Count, 1).End(xlUp)(2)
End If

(code que m'a gentiment propose KenDev dans un autre post)

Je veux que cette macro commence a la colonne J (donc 10) et finisse a la colonne NJ, pour toutes les lignes ou il y a des dates dans les colonnes 3 et 5.

L'explication est mieux ?

Pouillette
 

KenDev

XLDnaute Impliqué
Re : Mise en forme conditionnelle sous VBA

Bonjour Pouillette, bonjour le fil.

Je me rends compte que le bout de code
VB:
If Cells(8, 1) = "" Then
    Nlig = 8
Else
    Nlig = Cells(Rows.Count, 1).End(xlUp)(2)
End If
correspond à mon dernier post ou j'enlevais le select. J'ai oublié le row. A modifier comme ci, et également sur ta macro précédente
VB:
If Cells(8, 1) = "" Then
    Nlig = 8
Else
    Nlig = Cells(Rows.Count, 1).End(xlUp)(2).Row
End If
Tu dis que ça fonctionne, l'as tu vraiment testé au delà d'une ligne d'écriture ??

Ce code de l'autre fois était pour un cas bien particulier. Il fallait que tu détermine le numéro d'une ligne ou tu allais écrire des choses. Pour ce faire tu partais du bas de la feuille pour faire un xlup dans une colonne sans cellules vide. Le souci était que la colonne choisie pour cette opération avait un en-tête fusionné de sorte que xlup renvoyait 3 (A3, A4, A5 fusionnés) alors que tu voulais écrire en ligne 6. D'où ce code pour distinguer le cas de la première écriture des suivantes. Ce n'est pas un code universel mais particulier au cas d'alors.

Le fichier reste indispensable. C'est mieux comme explication mais pas encore super clair. :rolleyes: Et quelqu'un qui n'a pas suivi ton précédent fil n'a aucune chance de pouvoir t'aider.

J'ai traduis ce que tu dis dans une feuille, et si je reprends le problème de l'autre fois je suppose que ta première ligne d'écriture doit être la ligne 8 et que tu as encore des lignes de titres fusionnées sur les lignes 5,6,7 ?

Les deux bouts de code que tu donnes ne sont pas suffisants pour déterminer ton souci avec NCol. Si il apparait comme valant 0 alors que tu lui a dis précédemment de prendre la valeur 10 c'est qu'il lui est arrivé quelque chose entre temps qu'on ne peut
deviner. :confused:

Envoie ton fichier, s'il y a des informations confidentielles, change les noms et ce genre de chose mais pas la structure.

je suis dubitatif sur la ligne
VB:
If Cells(Nlig, 3) = "" Then Cells(5, NCol) = ""
Tu dis que ta ligne 5 contient des dates auquelles tu vas comparer 2 autres dates pour chaque ligne. Et si j'ai bien saisi NCol va varier de 10 à 374. Donc dès qu'il y aura une case vide en 3ème colonne tu vas effacer tout ton calendrier de référence.

La logique du
VB:
If Cells(5, NCol) >= Cells(Nlig, 3) And Cells(5, NCol) <= Cells(Nlig, 5) Then
    Cells(5, NCol) = "x"
Else
    Cells(5, NCol) = ""
End If
semble correcte. :)


Ça fait trop de supposition pour pouvoir t'aider en l'état. Dans l'attente de ton fichier. Amicalement
 

pouillette

XLDnaute Nouveau
Re : Mise en forme conditionnelle sous VBA

Je voudrais bien vous l'envoyer, mais mon fichier est trop gros.
Il fait 2.08 MB et si j'enleve plus de morceaux la macro ne fonctionnera plus, tout est relie...

y a t'il un autre moyen de l'envoyer ?

Merci pour votre aide
 

pouillette

XLDnaute Nouveau
Re : Mise en forme conditionnelle sous VBA

Ok merci

Voici le lien pour acceder au fichier :

Cijoint.fr - Service gratuit de dépôt de fichiers

J'espere que mes macros sont comprehensibles...
Je ne suis pas trop douee en VBA, je pense qu'il y a beaucoup de lignes de code inutiles ou qui pourrait etre reduite...
Il existe aussi encore quelquels erreurs que je dois corriger.

Encore merci pour votre aide !

Pouillette
 

KenDev

XLDnaute Impliqué
Re : Mise en forme conditionnelle sous VBA

Oui y'a du boulot.. :) Bon je regarde ça aujourd'hui et je tache de te poster un truc en fin de journée. Juste un truc, on est d'accord que 'Data' va être remplie ligne par ligne tandis que 'Plan' va l'être 8 lignes par 8 lignes ?

Bonne journée
 
Dernière édition:

pouillette

XLDnaute Nouveau
Re : Mise en forme conditionnelle sous VBA

Oui j'avoue je suis pas douee alors je magouille un peu pour m'en sortir...

Sinon, pour ta question c'est tout a fait ca :
'Data' va être remplie ligne par ligne tandis que 'Plan' va l'être 8 lignes par 8 lignes.

Vu que j'ai environ 7h de decalage horaire de plus que toi, je verrais ca demain matin.

Merci beaucoup !!

Bonne journee

Pouillette
 

KenDev

XLDnaute Impliqué
Re : Mise en forme conditionnelle sous VBA

Bonjour Pouillette, bonjour le fil,

Une question essentielle qui m'empêche d'avancer :

Quand tu vas cliquer sur ton bouton dans Plan tu veux :

a) Juste actualiser Plan avec la dernière ligne remplie dans Data ?

b) Refaire à zéro (mis à part les lignes de titre bien sûr) toute la feuille Data d'après toutes les lignes de Plan ?

c) Que la macro détermine depuis quand Plan n'a pas été mis à jour par rapport à Data et actualiser en conséquence ? Ce qui pourra se faire avec une recherche sur la colonne Order qui je suppose sera commune aux deux tableaux et contiendra des références uniques).

la réponse à cette question change tout... Bonne journée

Edit : et aussi pourquoi cette fonction ? :

VB:
Function Workday(start_date As Variant, days As Variant, Optional holidays As Variant) As Variant
    Workday = Application.Run(("ATPVBAEN.XLA!Workday"), start_date, days, holidays)
End Function

C'est une fonction d' Excel2007. C'est comme si tu recréais la fonction somme ou autre. A moins que tu ais une configuration particulière ?

ps : il est quel heure chez toi ? :)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 913
Messages
2 093 534
Membres
105 750
dernier inscrit
fred13340