As-tu bien exécuté la macro Sub initTrimestre1() qui renseigne les noms de la feuille "feuil1" ?
Dans feuil1 as-tu bien les mois du 1er trimestre ?
Vérifie la liste des noms existants -> Menu Edition -> Atteindre -> février05
Tu dis
Version imprimable
As-tu bien exécuté la macro Sub initTrimestre1() qui renseigne les noms de la feuille "feuil1" ?
Dans feuil1 as-tu bien les mois du 1er trimestre ?
Vérifie la liste des noms existants -> Menu Edition -> Atteindre -> février05
Tu dis
J'ai remplacé "Feuil1", "Feuil2" etc. par le nom de l'onglet "1T", "2T", etc.
Est-ce important ?
Je vais certainement te paraître idiot, mais comment exécute t'on les macros "Init" ?
Je viens de regarder le code... La macro que tu me cites n'est là que comme exemple pour trouver le N° de colonne du 5 février. Quand elle fonctionnera tu pourras la supprimer :mouarf:
Mais c'est un bon indicateur, la preuve ! Je confirme : Le nom (ou signet) février05 n'existe pas dans ton classeur sinon tu obtiendrais le N° de colonne 72 (BT)
A+
Je viens de voir ta réponse
Pour le nom des feuilles 8O... Si tu les as modifiés dans le code, c'est ok ! Mais change-les bien partout sans te tromper.
Pour les macros initTrimestre1
Comment affiches-tu ton userform ? Pour les macros c'est pareil, ou tu peux utiliser la touche F5 après avoir placé la souris n'importe où dans le code de la macro en question.
Pour l'userform : Si tu l'affiches depuis un bouton, alors je te conseille de passer par une macro placée dans un module standard :
- Le bouton lance la macro
- La macro affiche l'userform
Ainsi, tu pourras appeler cette même macro directement depuis Workbook_Open() placé dans ThisWorkbook, et elle s'exécutera à l'ouverture du classeur ;)
On en reparlera... :roll:
Juste une petite réflexion.
Je pensais, d'après ce que j'ai pu lire par-ci, par-là, que dans les modules on ne pouvait mettre que "Function" au commencement des modules et non "Sub".
Apparement j'ai dû mal lire.
Alors tu as mal lu ;)
Non, dans un module on peut placer aussi bien les sub que les functions.
Tu confonds avec la déclaration de fonctions faisant appel à une procédure externe (ex DLL)
Au contraire, pour afficher un formulaire (userform) il est préférable de le faire depuis un module afin que le code soit plus facilement accessible depuis "partout"
Les quatre premières macros que je t'ai passées étaient à placer dans un module standard ainsi que j'ai dû te l'indiquer.
Tu en es où ?
Quand tu fais le choix du nom (dans l'userform), tu as déjà le numéro de ligne (cherche le décalage); avec la date du parcours les colonnes jusqu'à trouver la bonne date
Alors j'ai tout mis en place comme tu me l'a indiqué.
J'ai créé le module puis les codes.
Les combo se chargent bien (Combo1 les mois, Combo2 les dates, Combo3 les noms).
Le curseur se place bien devant le nom mais pas à la date indiquée dans le Combo2.
Voici les codes :
Le module :
Dans l'UserForm (FrmDate)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Sub InitTrimestre1() Dim NoCol As Integer Worksheets("1T").Select NoCol = 2 'Colonne B' For jour = CDate("1/1/" & Year(Now)) To CDate("1/4/" & Year(Now)) - 1 Cells(5, NoCol).Value = Format(jour, "dd") Range(Cells(5, NoCol), Cells(5, NoCol + 1)).Name = Format(jour, "mmmmdd") NoCol = NoCol + 2 Next End Sub Sub InitTrimestre2() Dim NoCol As Integer Worksheets("2T").Select NoCol = 2 'Colonne B' For jour = CDate("1/4/" & Year(Now)) To CDate("1/7/" & Year(Now)) - 1 Cells(5, NoCol).Value = Format(jour, "dd") Range(Cells(5, NoCol), Cells(5, NoCol + 1)).Name = Format(jour, "mmmmdd") NoCol = NoCol + 2 Next End Sub Sub InitTrimestre3() Dim NoCol As Integer Worksheets("3T").Select NoCol = 2 'Colonne B' For jour = CDate("1/7/" & Year(Now)) To CDate("1/9/" & Year(Now)) - 1 Cells(5, NoCol).Value = Format(jour, "dd") Range(Cells(5, NoCol), Cells(5, NoCol + 1)).Name = Format(jour, "mmmmdd") NoCol = NoCol + 2 Next End Sub Sub InitTrimestre4() Dim NoCol As Integer Worksheets("4T").Select NoCol = 2 'Colonne B' For jour = CDate("1/9/" & Year(Now)) To CDate("1/12/" & Year(Now)) - 1 Cells(5, NoCol).Value = Format(jour, "dd") Range(Cells(5, NoCol), Cells(5, NoCol + 1)).Name = Format(jour, "mmmmdd") NoCol = NoCol + 2 Next End Sub
Mon post est un peu long, mais cela te permet de voir ce que j'ai fait.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 Function TrouverColonne(LaDate As String) TrouverColonne = ActiveCell.Column End Function Private Sub ComboBox1_Click() Select Case ComboBox1.ListIndex + 1 Case 1, 2, 3 Worksheets("1T").Select Case 4, 5, 6 Worksheets("2T").Select Case 7, 8, 9 Worksheets("3T").Select Case 10, 11, 12 Worksheets("4T").Select End Select MaJCombo2 ComboBox1.ListIndex + 1 End Sub Private Sub ComboBox1_Enter() ComboBox2.Clear End Sub Private Sub ComboBox2_Click() ComboBox3.Enabled = True End Sub Private Sub ComboBox3_Click() Dim c As Range, LaDate As String, NoCol As Integer LaDate = Format(CDate(ComboBox2), "mmmmdd") NoCol = TrouverColonne(LaDate) With ActiveSheet.Range("A6:A50" & Range("A" & Rows.Count).End(xlUp).Row) Set c = .Find(ComboBox3) If Not c Is Nothing Then NoLig = c.Row End With Cells(NoLig, NoCol).Select End Sub Private Sub CommandButton1_Click() Unload Me End Sub Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then Cancel = True End If End Sub Private Sub UserForm_Activate() Dim Mois As Byte Worksheets("1T").Select ComboBox3.RowSource = Range("A6:A50" & Range("A" & Rows.Count).End(xlUp).Row).Address For Mois = 1 To 12 ComboBox1.AddItem Format(DateSerial(2009, Mois, 1), "mmmm") Next 'ComboBox1 = Format(Now, "mmmm") MaJCombo2 Month(Now) ComboBox3.Enabled = False End Sub Sub MaJCombo2(Mois) Dim jour As Variant ComboBox2.Clear For jour = CDate("1/" & Mois & "/" & Year(Now)) To CDate("1/" & (Mois + 1) & "/" & Year(Now)) - 1 ComboBox2.AddItem Format(jour, "dd mmmm yyyy") Next End Sub
Merci pour ta patience, car avec une brelle comme moi, il faut l'être.
Dans ton fichier nous n'avons qu'une image et qu'un bout dans l'image, il est possible qu'il y ait une erreur de colonne. Pour un même mois, le décalage de colonne (et donc de date) est-il constant ?
Je retourne sur ton fichier pour voir.
Edit
J'ai vu : Comme on ne voit qu'un mois, on ne voit rien !
As-tu une colonne de séparation entre les mois d'une même feuille ?
Re
Je crois comprendre ce qui se passe.
Peux-tu vérifier une chose pour mon info :
Dans Excel, vas dans le menu "Insertion" -> "Noms" -> "Définir" Sélectionne une date pour laquelle tu as une erreur et passe-moi l'adresse que tu lis dans le champs "Fait référence à:"
Ex : =Feuil2!$DL$5:$DM$5
qui pour moi devrait correspondre au 28 mai.
A+
Pour reprendre ton exemple,
=Feuil2!$DL$5 correspond au 28 mai (pas $DL$5:$DM$5).
Une précision qui a très certainement son importance, seules les cellules des lignes 4 et 5 sont fusionnées. Dans le reste du tableau elles ne le sont pas.
Ci-joint une feuille avec les 3 mois
Ok, j'ai regardé ton fichier. J'ai un pb de version d'Excel.
J'ai malgré tout pu l'ouvrir mais je n'ai pas pu appliquer mon code.
Si tu as $DL$5 comme adresse pour le 28 mai, le nom des cellules étant "Mai28", quand tu utilises le code que je t'ai passé, tu devrais tomber sur la colonne correspondante dans la feuille 2T. Sur quelle colonne tombes-tu ?Citation:
Pour reprendre ton exemple,
=Feuil2!$DL$5 correspond au 28 mai (pas $DL$5:$DM$5).
A+
Edit
Le fichier ré-écrit [VBA-2003]
Bonjour,
J'ai pu comparer ton fichier avec le mien, je me suis rendu compte que mes cellules en ligne 5 ne sont pas nommées, alors que les tiennes le sont.
Comment les renommer automatiquement ?
Sinon, à chaque saisie, le curseur retourne irrémédiablement sur la date du 1er janvier
Merci
En principe, ce sont les quatre utilitaires InitTrimestre qui nomment les cellules mais comme je t'ai dit, je n'ai pas pu les tester sur ton fichier.
Quelle version d'Excel as-tu ?
J'ai la même version. Alors ce sont tes formules que mon code n'a pas aimées. :(
Je n'ai conservé que celles des jours du mois lun, mar, mer,...
Pour les dates je les insère par macro avec les utilitaires. Le problème avec les dates formatées est que l'affichage ne correspond pas forcément au contenu de la cellules. Tu veux tester ? Tape une date dans une cellule et ensuite mets cette cellule au format "Standard"...
Bref, pourquoi n'utilises-tu pas le fichier joint. Il est tout propre, tu n'as que les noms à modifier ainsi que les congés des mois à partir de février à nettoyer. Bien sûr, un effort de présentation quant à l'userform ne lui ferait pas de mal :aie: Mais pour le reste il fait ce que tu souhaites.
Enfin, c'est toi qui vois...
C'est une idée.
Je pense que je vais faire ça, utiliser ton fichier puisqu'il fonctionne.
Lorsque j'aurai fini, je te préviendrai.
Merci beaucoup pour ton aide.
Par contre, j'ai remarqué que lorsque l'on clique sur Décembre, aucune date ne s'affichait dans le Combo2
Pour décembre, j'ai le même pb. La procédure de mise à jour du mois est à adapter : Alors que pour les autres mois l'année ne change pas le 1er du mois suivant, pour décembre ce n'est pas le cas.
J'ai ajouté la ligne (*) afin de ré-initialiser le combo des noms en cas de nouvelle recherche. Je pense que tu comprends pourquoi.Code:
1
2
3
4
5
6
7
8
9 Sub MaJCombo2(Mois) Dim jour As Variant, Fin as double Fin = IIf(Mois = 12, CDate("1/" & Mois & "/" & Year(Now)) + 30, CDate("1/" & (Mois + 1) & "/" & Year(Now)) - 1) ComboBox2.Clear For jour = CDate("1/" & Mois & "/" & Year(Now)) To Fin ComboBox2.AddItem Format(jour, "dd mmmm yyyy") Next ComboBox3.ListIndex = -1 '***** (*) ****** End Sub
Sinon, teste avec et sans en changeant de date pour la même personne.
Tu dis
Ton nouveau code fonctionne bien pour Décembre