centrer sur cellule X selon valeur de cellule Y

nicopat

XLDnaute Junior
Bonjour,

Voilà ce que je voudrais réaliser : Selon la valeur contenue dans une cellule (A1 par exemple), je voudrais être redirigée vers telle ou telle autre cellule.
C'est pour gagner du temps au niveau de la saisie de données : lorsque la nature de la donnée Z dépend de la donnée Y, alors après avoir saisi Y, si je suis orientée vers le bon formulaire correspondant à Z, je gagnerai du temps...

Exemple :
-si A1 = 1, alors je suis dirigée vers la cellule A100 du feuillet 1 (par exemple), et à partir de là, je peux circuler normalement dans mon classeur
-si A1 = 2, alors je suis dirigée vers la cellule C200 du feuillet 2 (par exemple), et à partir de là, je peux circuler normalement dans mon classeur
etc...

Autre exemple + concret :
Admettons que je sois agriculteur et que mon fichier me permette de faire l'inventaire de mes animaux.
A chaque naissance, j'ajoute une bête et ses caractéristiques, en commençant par la cellule A1 qui indique le type d'animal :

Si A1 = "cochon", alors j'aimerais être redirigée vers le formulaire correspondant à l'enregistrement d'un cochon, avec les menus déroulants adéquats : "race du cochon", "poids du cochon", "couleur", etc...
Si A1 = "poule", alors j'aimerais être redirigée vers le formulaire correspondant à l'enregistrement d'une poule, avec les menus déroulants adéquats : "race de la poule", "plumage", etc...

...et pour ceux qui me diraient : "il suffit d'un bouton avec une macro qui complète A1 et redirige vers la cellule correspondante" : en fait, ce n'est pas si simple car la complétion de A1 ne provient pas d'une action manuelle de ma part, car la valeur de A1 est recherchée dans un autre fichier excel contenant des données.... (disons que l'autre fichier est la liste des naissances, pour poursuivre mon exemple d'agriculteur... :) )


On m'a parlé de la formule évènementielle Change, qui serait la solution, mais je ne sais pas la faire fonctionner.

Pour illustrer mes propos ci-dessus, voici un fichier exemple ci-joint.
Le feuillet jaune est situé dans un autre fichier excel.
La cellule B1 du feuillet 1 va chercher cette valeur dans l'autre fichier excel.
En fonction de la valeur dans la cellule B1 du feuillet 1, je souhaite être automatiquement dirigée vers le formulaire correspondant à l'animal mentionné dans 1a cellule B1 du feuillet 1.

Si quelqu'un sait trouver une solution dans le fichier excel ci-joint, en ayant recours ou non à la macro évènementielle Change, ce quelqu'un sera le bienvenu !

Merci d'avance

Nicole
 

Pièces jointes

  • exemple.xlsx
    9.6 KB · Affichages: 39
  • exemple.xlsx
    9.6 KB · Affichages: 38

nicopat

XLDnaute Junior
Re : centrer sur cellule X selon valeur de cellule Y

Pour info, j'ai essayé les 2 macros ci-dessous, mais ça ne fonctionne pas :

macro 1 :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$a$1" Then
Select Case Target.Value
Case Is = "cochon"
Macro_Formulaire_cochon
Case Is = "poule"
Macro_Formulaire_poule
End Select
End If

End Sub


macro 2 sans les guillemets :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$a$1" Then
Select Case Target.Value
Case Is = cochon
Macro_Formulaire_cochon
Case Is = poule
Macro_Formulaire_poule
End Select
End If

End Sub


Dans ces 2 exemples, Macro_Formulaire_cochon et Macro_Formulaire_poule sont des macros qui sélectionnent une cellule du feuillet correspondant au formulaire cochon et poule.
 

Paf

XLDnaute Barbatruc
Re : centrer sur cellule X selon valeur de cellule Y

Bonjour,

en fait, ce n'est pas si simple car la complétion de A1 ne provient pas d'une action manuelle de ma part, car la valeur de A1 est recherchée dans un autre fichier excel

C'est justement parce qu'il n'y a pas d'action manuelle que l'événement Change de la feuille ne se déclenche pas !

Il faudrait essayer dans l'événement Calculate de la feuille, mais en modifiant le code puisqu'alors il n'y aura plus de Target, du style:

Code:
Private Sub Worksheet_Calculate()
 If [A1]="cochon" Then Macro_Formulaire_cochon
 If [A1]="poule" Then Macro_Formulaire_poule
End Sub

Mais attention, toute saisie dans cette feuille qui mettrait à jour des résultats de formule, déclencherait cet événement Calculate;

A+
 

nicopat

XLDnaute Junior
Re : centrer sur cellule X selon valeur de cellule Y

Code:
Private Sub Worksheet_Calculate()
 If [A1]="cochon" Then Macro_Formulaire_cochon
 If [A1]="poule" Then Macro_Formulaire_poule
End Sub

Bonjour Paf, et merci pour ton aide,

Un message d'erreur lorsque je change la valeur dans le fichier source : "Erreur d'exécution '9' : l'indice n'appartient pas à la sélection"
Et quand je clique sur débogage, ça m'ouvre la macro Macro_Formulaire_cochon

Je rappelle que la configuration est la suivante :
-la valeur déclencheuse du changement ("cochon" ou "poule") se trouve dans une cellule dans un fichier excel A généré par un logiciel tierce
-dans mon fichier excel B (qui est différent de A), je vais rechercher cette valeur dans la cellule A1 du feuillet 1 et c'est en fonction de la valeur de la cellule A1 du feuillet 1 de mon fichier A que je souhaite être redirigée soit vers Formulaire_cochon soit vers Formulaire_poule
-les macros Formulaire_cochon et Formulaire_poule sont contenues dans le fichier B (et ne peuvent pas être insérées dans A qui est généré automatiquement).
 

nicopat

XLDnaute Junior
Re : centrer sur cellule X selon valeur de cellule Y

Je ne sais pas pourquoi quand j'essaye d'enregistrer la tentative suggérée par Paf, ça fait planter excel.
De toute façon, la macro suggérée affiche un message d'erreur.

Voici 2 fichiers ci-joints qui illustrent le problème que je souhaite résoudre :
-"fichier généré automatiquement.xlsx" est le fichier que me sort mon logiciel professionnel contenant la valeur clé ("cochon" ou "poule")
-"Mon fichier de saisie.xlsm" est mon fichier de saisie de mon bétail sur lequel je travaille

Donc la formule (qui ne fonctionne pas) se trouve dans le code VBA du feuillet 1 de "Mon fichier de saisie.xlsm"

Pour info, cette macro est actuellement :

Code:
Private Sub Worksheet_Calculate() 'au recalcul dans l'onglet
Select Case Range("A1").Value
    Case Is = "cochon"
        Sheets("Formulaire_cochon").Select
    Case Is = "poule"
        Sheets("Formulaire_poule").Select
End Select
End Sub


Pour rappel, le but, c'est que quand la valeur change dans "fichier généré automatiquement.xlsx", que je sois redirigée vers le bon formulaire dans "Mon fichier de saisie.xlsm"

PS : après avoir ouvert ces fichiers sur votre PC, il faut sans doute modifier le chemin d'accès à "fichier généré automatiquement.xlsx" dans "Mon fichier de saisie.xlsm"
 

Pièces jointes

  • fichier généré automatiquement.xlsx
    7.3 KB · Affichages: 32
  • Mon fichier de saisie.xlsm
    14.1 KB · Affichages: 32

Paf

XLDnaute Barbatruc
Re : centrer sur cellule X selon valeur de cellule Y

Re,

avec les fichiers joints c'est de suite mieux;

Deux soucis:
- le "_" dans le nom des feuilles provoque l'erreur. en renommant les feuilles Formulaire cochon et Formulaire poule ça fonctionne
- a priori au changement de classeur, excel ne retrouve pas les feuilles.En précisant le classeur ça fonctionne

Code:
Private Sub Worksheet_Calculate() 'au recalcul dans l'onglet
 Select Case [A1]
    Case "cochon", "poule"
        ThisWorkbook.Worksheets("Formulaire " & [A1]).Activate
 End Select
End Sub

A+
 

Discussions similaires

Réponses
5
Affichages
249

Membres actuellement en ligne

Statistiques des forums

Discussions
314 655
Messages
2 111 605
Membres
111 217
dernier inscrit
aladinkabeya2