Déplacement de mois en mois

Michou9

XLDnaute Occasionnel
Bonjour

J’ai un grand fichier ou figure une colonne avec des dates
J’ai fait une petite macro qui me permet d’aller directement à la 1ère cellule qui comporte une date correspondant à un nouveau mois
Exemple : "Ctrl X" + "03" me permet d’aller à la cellule B181 avec la date du 05/03/2013
Je précise que c’est la 1ère date du mois de mars 2013, car il n’y a pas forcément de date correspondant au 1er jour de chaque mois.

Je rencontre 2 problèmes :

1) Je souhaiterais que la colonne A soit cachée, mais si elle est cachée, ma macro ne fonctionne plus

2) Je souhaiterais avec une autre macro, pouvoir passer de mois en mois en descendant ou en remontant
Soit dans l’exemple en tapant par exemple « Ctrl S » passer de la cellule 03/09/13 à la cellule 3/10/13 puis 01/11/2013 et ainsi de suite ….
Et en tapant « Ctrl P » faire l’inverse

Si vous avez une solution, merci d’avance
 

Pièces jointes

  • Déplacement menuel.xlsm
    19.9 KB · Affichages: 34
  • Déplacement menuel.xlsm
    19.9 KB · Affichages: 36
  • Déplacement menuel.xlsm
    19.9 KB · Affichages: 38

Michou9

XLDnaute Occasionnel
Re : Déplacement de mois en mois

Bonjour Modeste

J’aurais bien voulu essayer ta solution dans mon tableau d’origine
Mais je ne comprends pas du tout son principe ??

Si je transfère le code avec le bouton et les 2 cellules C2 et C3 cela ne fonctionne pas
Je ne vois pas où se joue la liaison avec ces 2 formules et le code
Je vois que ces 2 formules sont indispensables, mais que l’on peut les déplacer où on veut
Mais à part cela le principe m’échappe totalement ???
Si tu peux m’expliquer un peu

Merci
A+



Bonjour Pierre Jean

Ce matin, j’ai fini par trouver d’où venait le problème avec les 2 macros « Sub prem_jour_mois_suivant() » et « Sub prem_jour_mois_precedent() »

En fait il y avait une interférence avec une autre macro, bien que celle-ci ne se trouvait pas dans le même module
Je ne suis pas un pro en VBA, mais peut-être que c’est que les variables ne sont pas déclarées ??
En tous cas après avoir supprimer l’autre macro en question, cela semble bien fonctionner

J’ai fini par trouver d’où venait également le problème avec la macro « Sub Vers_Mois() »
Cela provenait du fait que j’ai une entête texte dans cette colonne.
Je suis bien contant de te relire, car je n’avais pas réussi à trouver de solution
Sans doute, il aurait fallu paramétrer la lecture de la colonne B à partir de B3
Mais je n’ai pas trouvé ce paramétrage !
Ta nouvelle macro en revanche semble bien fonctionner même avec cette entête ….
Mais je n'arrive pas à voir ce que tu as changé ???

Merci pour ton aide

A+
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Déplacement de mois en mois

salut

une autre solution sans colonne supplémentaire et avec une liste de validation (pas de InputBox et une seule macro évènementielle)
Code:
Private Sub Worksheet_Change(ByVal R As Range)
  If R.Address <> "$D$2" Then Exit Sub
  L = 2
  Do
    L = L + 1
    If L > [B65000].End(xlUp).Row Then Exit Sub
  Loop Until Month(Cells(L, 2)) = R
  Application.Goto Cells(L, 1), 1
End Sub
 

Pièces jointes

  • Déplacement si Mois.xlsm
    24.7 KB · Affichages: 28

Modeste geedee

XLDnaute Barbatruc
Re : Déplacement de mois en mois

Bonsour®
J’aurais bien voulu essayer ta solution dans mon tableau d’origine
Mais je ne comprends pas du tout son principe ??

Si je transfère le code avec le bouton et les 2 cellules C2 et C3 cela ne fonctionne pas
Je ne vois pas où se joue la liaison avec ces 2 formules et le code
Je vois que ces 2 formules sont indispensables, mais que l’on peut les déplacer où on veut
Mais à part cela le principe m’échappe totalement ???
Si tu peux m’expliquer un peu

0 - les volets doivent être figés sur la cellule C3
1 - les dates de la colonne B doivent être triées croissantes.
2 - en cellule B2 se trouve la date début de mois de la plus petite date de la plage de dates qui elle commence en B3
(même si la plus petite date est déjà un début de mois)
=DATE(ANNEE($B$3);MOIS($B$3);1)
3 - la plage de dates est nommée et définie dynamiquement (Lesdates):
=DECALER(Feuil1!$B$1;0;0;1+NB(Feuil1!$B:$B);1)
le 1+ car la cellule B1 est censé rester vide
4 - en A1 se trouve la valeur de la toupie ( 0 à nbr de mois possible)
5 - en C1 se trouve la date début de mois de la période recherchée
=MOIS.DECALER($B$2;$A$1)
6 - en A2 se trouve alors l'index de la première date de la période recherchée
si début de mois est trouvé alors Ok
si non trouvé alors index de la date immédiatement inférieure (3eme argument de la fonction EQUIV)
puis incrémenté de 1
=SIERREUR(EQUIV(C1;LesDates;0);1+EQUIV(C1;LesDates;1))
7- à la toupie est associée une macro exploitant l'index trouvé
VB:
Sub Compteur2_QuandChangement()
     Cells([A2], 2).Select
     '----repositionnement en 1ere position du volet(2)
     ActiveWindow.Panes(2).ScrollRow = [A2]
End Sub
8 - en C2 message d'information
=SI($A$1=0;"pas de date antérieure ! "&TEXTE($B$3;"j mmm aaaa");SI($A$2>NB(B:B);"pas de date plus récente ! "&TEXTE(MAX(LesDates);"j mmm aaaa");""))
 
Dernière édition:

Michou9

XLDnaute Occasionnel
Re : Déplacement de mois en mois

Bonjour Pierre Jean

En fait contrairement à ce que je disais hier
la macro ne fonctionne toujours pas
Normale, car la macro est restée identique avec la précédente version

Cela à pourtant fonctionner un court instant ??
Pourquoi je ne sais pas ?
Je pense que c'est du fait de l'entête qui est bien sûr du texte ?

Cela bloque au niveau de
Code:
If Month(Range("B" & n)) = X Then

A+
 

pierrejean

XLDnaute Barbatruc
Re : Déplacement de mois en mois

Re

J'ai ajouté des sécurités pour les textes et vides

Teste bien !!!
 

Pièces jointes

  • Déplacement menuel.xlsm
    22 KB · Affichages: 33
  • Déplacement menuel.xlsm
    22 KB · Affichages: 32
  • Déplacement menuel.xlsm
    22 KB · Affichages: 35

Michou9

XLDnaute Occasionnel
Re : Déplacement de mois en mois

Bonjour Modeste, Bonjour Si

Merci Modeste pour ces explications très détaillées !
Je n'avais pas vu les formules cachées derrière la Toupie


Merci Si

J’apprécie beaucoup cette solution
La fonction est bien détaillée
Je vois bien qu'il s'agit d'une commande à partir d'une liste de validation de données
Mais je n'arrive pas du tout à comprendre comment à partir de cette liste
en cliquant sur un mois on peut commander cette fonction ???

Merci si je peux obtenir cette explication

A+
 

Si...

XLDnaute Barbatruc
Re : Déplacement de mois en mois

salut

Alt F11 ouvre l'éditeur VBA.
Dans le module de la feuille il y a une macro de base dite évènementielle.
Elle est lancée au moindre changement d'une cellule de cette feuille.
Ici, il y a un test pour ne traiter que le ce cas d'une cellule : celles de la liste de validation (D2).

Code:
Private Sub Worksheet_Change(ByVal R As Range)  'c'est l'évènementielle
  If R.Address <> "$D$2" Then End	'si changement hors D2, sortie
  L = 2			'ligne de titre avant les dates
  Do			'boucle ...
    L = L + 1			   'incrémente le numéro de ligne
    If L > [B65000].End(xlUp).Row Then End	   'sortie s'il n' y pas de solution (mois manquant)
  Loop Until Month(Cells(L, 2)) = R	'jusquà ce le mois de la cellule égale celui choisi en D1
  Application.Goto Cells(L, 1), 1		'voir l'effet
End Sub

Tu as d'autres précisions dans le fichier joint précédemment.
 

Michou9

XLDnaute Occasionnel
Re : Déplacement de mois en mois

Bonsoir

Merci pour ces explications
Je comprends mieux maintenant

Mais je ne peux pas l'intégrer dans ma feuille
car j'ai déjà une macro événementielle
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Et apparemment elle rentre en conflit

A+
 

Si...

XLDnaute Barbatruc
Re : Déplacement de mois en mois

Salut

On ne peut avoir qu’une évènementielle de ce type par feuille mais heureusement qu’on peut la traiter en multiples situations.

Si dans la tienne, la cellule(D1) contenant la liste de validation n’est pas concernée, il suffit d’ajouter les lignes suivantes
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Address = "$D$1" Then		'si changement  dans D1
    L = 1
    Do	   					        'boucle de  1...
      L = L + 1	  			 	   'incrémente le numéro de ligne
      If L > [B65000].End(xlUp).Row Then End	'sortie s'il n' y pas de solution (mois manquant)
   Loop Until Month(Cells(L, 2)) = Target		'jusqu’à ce le mois de la cellule égale celui choisi en D1
  Application.Goto Cells(L, 1), 1			'voir l'effet
  End if
‘et, ici, la suite que tu as déjà
Sinon déplace cette cellule (D1) vers une autre non concernée par la suite et remplace son adresse par la nouvelle dans la macro (toujours dy type "$l$n ").

Tu as aussi la possibilité de remplacer la liste de validation par une liste déroulante (voir fichier joint)
 

Pièces jointes

  • Déplacement vers Mois.xlsm
    28.8 KB · Affichages: 31

Michou9

XLDnaute Occasionnel
Re : Déplacement de mois en mois

Bonjour Si

Merci pour tes explications très détaillées

J'ai essayé les 2 techniques
Malheureusement elles plantent au même endroit

Loop Until Month(Cells(L, 2)) = Target

J'ai bon essayé de comprendre, je ne vois pas d'où cela peut venir
Il n'y a plus de conflit, c'est déjà cela

Message d'erreur :
Erreur d'execution 13:
Incompatibilité de type

A+

Je viens de trouver l'erreur
Dans les cellules B1:B3 il y a du texte (Les dates commencent seulement à B4)
Il faudrait donc si possible commencer le recherche à partir de B4 ou filtrer les cellules ?

A+
 
Dernière édition:

Michou9

XLDnaute Occasionnel
Re : Déplacement de mois en mois

Bonsoir Si, Pierre Jean, Modeste

C’était bien la bonne solution
Cela fonctionne maintenant parfaitement avec les 2 techniques
J’ai choisi le Control ActiveX, plus paramétrable.

Je continue d’utiliser en complément les solutions de Pierre Jean
Qui m’offre d’utiliser un moyen aussi très rapide pour aller directement au mois voulu
Et de mois en mois.

Je vous remercie tous les trois pour toutes vos solutions et toutes l’aide que vous m’avez apportée. :)

A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 900
Membres
103 404
dernier inscrit
sultan87