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.
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
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.
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. 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.
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
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...
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.
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 ?
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 ?