Déplacement entre feuille

J

Jean

Guest
Bonjour le forum,

Au début de ce mois, j'ai posté un message semblable mais maintenant, mes contraintes se sont modifiées et j'aimerais resoumettre mon problème à la sagacité des mordus de ce site.

Exemple:
je me trouve dans un tableau représentant un compte d'xploitation simplifié
en Sheet1. Je viens de revoir le layout de ce tableau et pour faire simple, disons que toute les 5 lignes, je vois un chiffre dont je voudrais voir de quoi il est composé.
Après les colonnes de description, chaque colonne représente le chiffre du mois. Donc pour la même nature de dépense, je peux me trouver en colonne R20 pour le mois de janvier ou S20 pour le mois de février.

Le détail de ces chiffres se trouve sur la sheet2.

le total de janvier se trouve dans la cellule R40 et le détail en dessous sur N ligne
le total de février se trouve dans la cellule S40 et le détail en dessous sur N ligne

Donc, les mêmes informations se trouve toujours à la même place avec le même décalage.

Donc je cherche un moyen pour:

1) Quand sur la sheet1 cellule R20, je clique sur le bouton affichant le détail de ce montant, je voudrais bien "sauver" l'information colonne R et y rajouter le numéro de ligne que je connais (ex ci-dessus = 40) . En faire une nouvelle coordonnées de type XY, m'y rendre et y activer la cellule.

2) Quand j'ai fini, je voudrais bien revenir à la cellule de départ (dans mon exemple: sheet1 et cellule R20 en cliquant sur un bouton unique qui se trouve placé dans les 5 premières ligne figées. Ce bouton reste donc toujours visible.

Voilà, j'espère que j'ai été suffisamment clair et que mon problème est clair pour tous les mordus. -:)

D'avance, je remercie tous les braves qui vont m'aider et je promet de n'utiliser que le forum pour tout dialogue futur pour remercier tous ceux qui m'aideront ou pour demander un complément d'information.
 
J

Jean

Guest
Bonjour Jean-Marie,

Je te remercie pour ta demande. En annexe, un fichier zippé qui reprend un exemple restreint de mon problème. Dans ce fichier, tu y trouveras toutes les informations nécessaires.

J'espère que la tâche demandée n'est pas insurmontable.

Un grand merci et à bientôt.

à + Jean
 

Pièces jointes

  • Exemple.zip
    14.7 KB · Affichages: 25
  • Exemple.zip
    14.7 KB · Affichages: 27
  • Exemple.zip
    14.7 KB · Affichages: 26
J

Jean-Marie

Guest
Re Jean

Regarde le fichier, sur la feuille Main, il n'y a plus qu'un bouton pour afficher la référence que contient la cellule active.

Pour activer la feuille, il faut que le fond soit d'une certaine couleur : jaune pâle. La macro, lit la formule pour trouver la référence de la cellule, et se déplace dessus, je n'ai pas mis de contrôle sur le contenu de la formule. Doit-il en avoir un, peux-tu avoir ceci comme formule =Interco!Q8+Interco!Q17

Dis-moi déjà ce que tu en penses.

@+Jean-Marie
 

Pièces jointes

  • Exemplejean.zip
    18.7 KB · Affichages: 35
  • Exemplejean.zip
    18.7 KB · Affichages: 33
  • Exemplejean.zip
    18.7 KB · Affichages: 33
J

Jean

Guest
Bonsoir Jean-Marie.

Le fichier zippé se dézippe sans problème. Quand je l'ouvre avec excel, j'ai le message habituel d'avertissement qu'il y a des macros ...
Ensuite, j'ai le message me disant s'il faut mettre à jour les zones avec des références externes à un autre classeurs (c'est un reste de mes "cut & paste" pour confectionner mon exemple). Ici, peut importe ce que je choisi, Excel buggue et il redémarre avec le fichier dit "récupéré". Et dans ce fichier, plus la moindre trace d'une macro quelconque.

P.S.: je travaille sur un portable avec windows XP et office XP. Je ne sais pas si c'est lié mais au moins voila tout mon environnement.

A+ et déja merci pour ce que tu as fait.

Jean
 
J

Jean-Marie

Guest
Re ...

Jean on va faire les manip par post.

1) Copie le code si dessous

Public Sub ClickDetail()
Dim vCell As String
Dim vFeuille As String

If ActiveCell.Interior.ColorIndex = 36 Then
'La cellule active a un fond jaune pâle
'Récupére à partir de la formule l'adresse de destination
vCell = Mid(ActiveCell.Formula, 2, Len(ActiveCell.Formula))
'Détermine le nom de la feuille
vFeuille = Mid(vCell, 1, InStr(vCell, "!") - 1)
'Détermine la référence de la cellule
vCell = Mid(vCell, InStr(vCell, "!") + 1, Len(vCell))

'Sélectionne la feuille puis la cellule
Worksheets(vFeuille).Activate
Range(vCell).Activate
End If
End Sub

Public Sub RetourMain()
Sheets("Feuil1").Select
End Sub

2) Ouvre ton fichier d'origine
3) dans Excel, appuie sur Alt F11
4) Clique sur le menu Insertion/module
5) Colle le code à l'intérieur de la nouvelle fenêtre
6) Revient sur la feuille de calcul

Maintenant il faut affecter les macros à tes boutons,
Pour le bouton de la feuille MAIN, (1 seul suffit), c'est la macro ClickDetail,
RetourMain sera exécuter quand tu cliqueras sur le bouton de la feuille Interco

@+Jean-Marie
 
J

Jean

Guest
Jean-Marie,

C'est extraordinaire que deux personnes pensent au même genre de solution. J'ai reçu directement dans ma BAL (parce que format .rar pas supporté par le forum) de marc une solution qui à l'air de s'articuler sur les mêmes bases que la tienne.

Maintenant, j'aimerais comprendre comment cela fonctionne.

Pour répondre à ta question, la cellule active qui devrait permettre le déclenchement de la macro ne contiendra jamais (Euh seulement dans mon cas pour le moment car il faut toujours penser à ceux qui liront et utiliseront votre solution) quelque chose du style =Interco!Q8+Interco!Q17 mais par contre contiendra TOUJOURS la référence à un autre onglet.



De ceci, j'ai déja penser à des améliorations pour que je puisse utiliser votre routine dans tous les cas.

Rem: ta solution utilise déja un nom variable pour descendre vers l'onglet de détail.

1) Ne permettre de descendre que si la cellule active au moment du "clic" comprend une référence à un autre onglet. Je crois que cette fonction est maintenant assurée par la détection de la couleur mais je dois avouer que je suis un peu faché avec les tons pastels (en clair, je suis daltonien pour les tons pastels) et je ne suis pas sûr que je pourrais à grande échelle, toujours utiliser la bonne couleur. Dans l'exemple, les zones colorées me servent plutôt à repérer des blocs d'informations.
2) Appliquer le principe de la variable pour mémoriser le nom de la feuille au départ de laquelle on appelle un détail. Cela me permettra alors d'avoir une seule routine pour TOUS mes déplacements dans mon Workbook.

En tous cas, un TRES GRAND merci pour ce que vous avez déja fait.
Hier, c'était mon anniversaire. Vos propositions, je les reçois comme un cadeau et je suis très heureux du cadeau que vous venez de me donner. D'autant plus que cela est fait de manière désintéressée entre des personnes qui il y a quelques heures ne se connaissaient ni d'Eve ni d'Adam. J'espère bien un jour pouvoir rendre la pareille mais au vu du niveau de compétence en Excel des principaux contributeurs à ce forum, je crois que cela va être très difficile.

Une très bonne soirée.

Jean
 
J

Jean

Guest
Bonsoir Jean-Marie,

La solution du cut & paste fonctionne à merveille et donc ta macro aussi d'ailleurs.

Pourrais-tu me donner ton avis sur mon post précédent en sachant que je vais très certainement essayé de combiner deux techniques pour atteindre deux informations différentes.

1) si la cellule active contient une référence à un autre onglet et que l'on clique sur le bouton "détail interco", on va à cet onglet ... Bref ta macro.
2 si la cellule active contient une référence à un autre onglet et que l'on clique sur le bouton "détail trésorerie", si la cellule active contient un montant et que l'on a cliqué sur le bouton "détail trésorerie", on va à l'onglet trésorerie et on s'y positionne. Comment ? je ne sais pas encore car les déplacements verticaux dans la feuille trésorerie ne sont pas les mêmes que dans la feuille interco. L'information colonne, on l'a. Pour la ligne, on pourrait stocké le numéro de ligne correspondant de l'onglet "détail trésorerie" en dissimulant dans les colonnes de descriptions une colonne contenant =ligne("trésorerie"!Cxxx) ou xxx représente le numéro de la ligne et C la colonne ou j'encode toutes les descriptions. et puis reconstituer l'adresse de destination et puis hop, de nouveau ta macro.
3) dans les autres cas, la macro devrait afficher un message d'erreur qu'il n'y a pas de détail pour la cellule demandée.

Est ce suffisament clair ? Sinon, je suis toujours à l'écoute si tu dois avoir plus d'infos.

Par avance déja un grand merci, bon boulot, et bon dodo car c'est ce que moi je vais aller faire maintenant.

Jean
 
J

Jean-Marie

Guest
Re...

La macro a beaucoup évolué.

J'ai supprimé le contrôle du fond jaune pâle, pour activer le lien de destination.
La macro intègre une petite gestion de contrôle de la sélection, il faut sélectionner une seule cellule, qui ne contient une formule, (pas de formule contenant une addition).
Si la feuille n'est pas la feuille active elle change de feuille et puis sélectionne la cellule.
Si la cellule de destination est sur la même feuille, scrolling de la feuille et sélectionne la cellule.
Je n'ai pas placé de bouton pour le retour pour la feuille Feuil1.

Dis moi, si cela te convient.

@+Jean-Marie
 

Pièces jointes

  • ExempleJean.zip
    22.6 KB · Affichages: 32
  • ExempleJean.zip
    22.6 KB · Affichages: 30
  • ExempleJean.zip
    22.6 KB · Affichages: 28
J

Jean

Guest
Bonjour Jean-Marie

Je n'ai pas pu charger et tester la nouvelle version de ta macro car durant ces deux derniers jours j'ai déménagé mes bureaux.

Pour le test, cela a été très vite car comme j'ai déjà eu le cas auparavant en utilisant un fichier excel dézippé, excel plante et se ferme. Il redémarre et me propose le fichier excel en question mais dans lequel, toutes les macros sont disparues.

Ma config: portable avec XP et 512 Mb de ram avec Office XP. Le tout en français, en version originale non copiée ou crackée.

D'autres membres ont-ils déja eu le problème ou devrais-je regarder à ma config ? Je crois qu'elle n'a rien de particulier car tout a été installé par défaut.

Je ne sais ce que l'on peut faire maintenant. L'autre membre m'a alors envoyé le fichier non zipé directement dans ma BAL. Ce n'est pas conforme à l'esprit du forum mais c'est la seule solution que l'on a pu trouver.

A + et encore merci

Jean
 
J

Jean-Marie

Guest
Bonjour Jean

Remplace le code par celui ci :

Option Explicit
Dim savCellActive As String
Dim NbLigneScroll As Double

Public Sub ClickDetail()
Dim vCell As String
Dim vFeuille As String

If (Selection.Rows.Count = 1) And (Selection.Columns.Count = 1) Then
'Il y a qu'une cellule de sélectionnée

'Désactive la mise à jour de l'écran
Application.ScreenUpdating = False

'Récupére à partir de la formule de la cellule
vCell = Mid(ActiveCell.Formula, 2, Len(ActiveCell.Formula))
If (Len(vCell) > 0) Then
'C'est une formule
If (InStr(vCell, "+") = 0) Then
'Formule simple
If InStr(vCell, "!") > 0 Then
'Détermine la feuille de la cellule de destination
vFeuille = Mid(vCell, 1, InStr(vCell, "!") - 1)
vCell = Mid(vCell, InStr(vCell, "!") + 1, Len(vCell))

'Sélectionne la feuille puis la cellule
Worksheets(vFeuille).Activate
Range(vCell).Activate
Else
savCellActive = ActiveCell.Address
' Scrolling de l'écran
NbLigneScroll = Range(vCell).Row - ActiveCell.Row - 40
If NbLigneScroll > 0 Then
ActiveWindow.SmallScroll Down:=NbLigneScroll
Else
ActiveWindow.SmallScroll Up:=Abs(NbLigneScroll)
End If
Range(vCell).Select
End If
Else
'C'est une formule complexe
MsgBox ("Formule complexe ne permettant pas l'affichage du détail")
End If
Else
'Ce n'est pas une formule
MsgBox ("Aucun détail disponible pour cette cellule")
End If
Else
MsgBox ("Veuillez sélectionner qu'une cellule")
End If
Application.VBE.MainWindow.Visible = False
'Active la mise à jour de l'écran
Application.ScreenUpdating = True
End Sub

Public Sub RetourMain()
If ActiveSheet.Name = "Feuil1" Then
Range(savCellActive).Select
If NbLigneScroll > 0 Then
ActiveWindow.SmallScroll Up:=NbLigneScroll
Else
ActiveWindow.SmallScroll Down:=Abs(NbLigneScroll)
End If
Else
Sheets("Feuil1").Select
End If
End Sub

@+Jean-Marie
 
J

Jean

Guest
Bonsoir Jean-Marie et tous les autres contributeurs à ce forum,

D'abord un grand merci pour t'être plongé sur mon problème. vu l'heure, je n'ai que lu ta macro et je me refuse à l'installer maintenant sinon je vais y passer la nuit.

Eh eh, cela me plait beaucoup.Demain (tout à l'heure serait plus correct puisq'il est passé minuit depuis longtemps) je vais le copier dans mon applicatif et voir ce que je peux en faire. Je crois que je vais essayer de combiner plusieurs techniques afin d'obtenir plusieurs modes de fonctionnement possibles.

D'une manière générale, je coince chaque fois qu'il faut extraire un élément d'un autre, utiliser le contenu d'une cellule comme élément d'une formule ou d'une adresse et la construction d'une adresse de cellule au départ de ce qui précède. Idem pour la gestion des noms de feuille.

N'y aurait-il pas un document qui expliquerait le plus clairement possible (là je sais que je commence à devenir exigeant mais je crois que cela pourrais intéresser beaucoup de monde) ces techniques d'extraction d'informations et de re-construction ?

Bien à vous tous et bonne nuit
 

Discussions similaires

Réponses
8
Affichages
270
Réponses
6
Affichages
381

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

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