Centrer sur cellule X selon valeur de cellule Y

Bonjour,

Voilà ce que je voudrais réaliser : Selon la valeur contenue dans une cellule (A1 par exemple), je voudrais visualiser telle ou telle 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...

Est-il possible de faire ceci sous excel ?

Si oui, un fichier exemple est bienvenu parce que je ne vois pas du tout quels outils utiliser !


je donne un exemple + parlant.

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

Bref, c'est un exemple un peu bizarre, mais j'espère que cela permettra de comprendre mon besoin.

Bonsoir nicopt, bonsoir le forum,

Regarder dans Insertion/ Lien Hypertexte / Signet. Tu définis l'onglet et la cellule dans le lien et après, d'un clic, tu accèdes à cet onglet et à la cellule...

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


ThauThème a écrit :

Bonsoir nicopt, bonsoir le forum,

Regarder dans Insertion/ Lien Hypertexte / Signet. Tu définis l'onglet et la cellule dans le lien et après, d'un clic, tu accèdes à cet onglet et à la cellule...

Bonsoir Thauthème,

Je voudrais faire l'économie du clic. (sinon, un bouton + une macro font aussi l'affaire).

Je voudrais vraiment que ce soit la complétion de A1 qui redirige vers la cellule cible.

Ce n'est pas de la fénéantise, mais j'ai des dizaines de milliers de données à saisir, et ce cas de figure se présente plusieurs fois pour chaque donnée, donc il y a beaucoup de temps à gagner avec un tel système, sans compter que j'éviterais volontier la tendinite de l'index...

Re,

Arf Nicopat ! la terrible tendinite de l'index...

La macro événementielle Change peu facilement te renvoyer dans l'onglet mais je ne vois pas comment créer la liste de validation de données si elle est différente selon l'animal !... Un petit fichier exemple (reprenant ta structure avec juste quelques données) serait le bienvenu...

ThauThème a écrit :

Re,

Arf Nicopat ! la terrible tendinite de l'index...

La macro événementielle Change peu facilement te renvoyer dans l'onglet mais je ne vois pas comment créer la liste de validation de données si elle est différente selon l'animal !... Un petit fichier exemple (reprenant ta structure avec juste quelques données) serait le bienvenu...

En fait, il y a 2 listes de validations de données car il y a 2 formulaires de saisies différents : 1 pour le cochon et 1 pour la poule.

Les 2 formulaires de saisie sont placés à 2 emplacements différents dans le fichier (par exemple le feuillet 2 pour le cochon et le feuillet 3 pour la poule).

C'est pour cela que dès qu'un type d'animal a été saisi dans la cellule A1 de mon feuillet 1, j'aimerais être dirigé vers le formulaire correspondant à l'animal saisi en A1.

(Et pour être précise, comme indiqué précédemment, l'information saisie dans A1 du feuillet 1, n'est pas vraiment saisie par moi en réalité, mais est générée par une application tierce...)

A l'instant t, je n'ai pas de fichier exemple.

Si ce n'est pas clair, je pourrais essayer d'en faire un demain.

Bon alors 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é vers le formulaire correspondant à l'animal mentionné dans 1a cellule B1 du feuillet 1.


ThauThème a écrit :

Re,

Arf Nicopat ! la terrible tendinite de l'index...

La macro événementielle Change peu facilement te renvoyer dans l'onglet mais je ne vois pas comment créer la liste de validation de données si elle est différente selon l'animal !... Un petit fichier exemple (reprenant ta structure avec juste quelques données) serait le bienvenu...

Bonjour Thauthème, et merci pour tes réponses.

Je ne connais pas cette macro Change. J'ai cherché sur internet, mais j'ai du mal à comprendre.

Tu pourrais me mettre un exemple dans le fichier joint à mon post précédent stp?

14exemple.xlsx (9.59 Ko)

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.

Bonjour Nicopat, bonjour le forum,

J'étais en train d'y travailler dessus. C'est dommage que tu n'aies pas dit cela avant... Je termine et j'envoie...

ThauThème a écrit :

Je termine et j'envoie...

Super merci d'avance!

ThauThème a écrit :

C'est dommage que tu n'aies pas dit cela avant...

Hmmm, pas dit quoi avant?

Re,

Comme je n'arrive pas à créer une variable macro, je reprends ton code mais pas dans la macro événementielle Change puisque il n'y a pas de changement effectué physiquement mais dans l'événementielle Calculate qui va agir au recalcul des formules :

Private Sub Worksheet_Calculate() 'au recalcul dans l'onglet
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

[Édition]

Dit ça : 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.

ThauThème a écrit :

Re,

Private Sub Worksheet_Calculate() 'au recalcul dans l'onglet
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

[Édition]

.

Quand la valeur change dans le fichier source, un message d'erreur VBA apparaît : "Erreur d'exécution 424 : Objet requis"

Et si je clique sur débogage, c'est cette ligne qui est surlignée en jaune :

If Target.Address = "$A$1" Then

Question subsidiaire : pourrais-tu aussi m'indiquer comment rédiger cette macro sans faire appel à des macros pré-éxistantes, mais en utilisant "Select" ou une commande du même genre, comme dans l'exemple que j'ai indiqué dans l'un de mes posts précédents.

Re,

Oui pardon, j'ai fait un copier coller sans réfléchir. L'événementielle Calculate n'a pas d'argument Target :

Private Sub Worksheet_Calculate() 'au recalcul dans l'onglet
Select Case Range("A1").Value
    Case Is = "cochon"
        'écrit le code la la macro Macro_Formulaire_cochon
    Case Is = "poule"
        'écrit le code la la macro Macro_Formulaire_poule
End Select
End Sub
ThauThème a écrit :

Re,

Oui pardon, j'ai fait un copier coller sans réfléchir. L'événementielle Calculate n'a pas d'argument Target :

Private Sub Worksheet_Calculate() 'au recalcul dans l'onglet
Select Case Range("A1").Value
    Case Is = "cochon"
        'écrit le code la la macro Macro_Formulaire_cochon
    Case Is = "poule"
        'écrit le code la la macro Macro_Formulaire_poule
End Select
End Sub

non, ça ne fonctionne pas

la macro, ça donne ça :

Private Sub Worksheet_Calculate() 'au recalcul dans l'onglet

Select Case Range("A1").Value

Case Is = "cochon"

With Sheets("DATA")

DerLgn = .Range("D" & Rows.Count).End(xlUp).Row + 1

.Cells(DerLgn, 4) = 1

End With

With Sheets("Formulaire_cochon").Select

Case Is = "poule"

With Sheets("Hand DATA")

DerLgn = .Range("D" & Rows.Count).End(xlUp).Row + 1

.Cells(DerLgn, 4) = 1

End With

With Sheets("Formulaire_poule").Select

End Select

End Sub

Et quand je modifie la valeur dans le fichier source, un message d'erreur apparaît :

Erreur de compilation : Case sans Select Case

Re

Pourrais tu utiliser les balises de Code s'il te plaît...

Deux With en trop :

Private Sub Worksheet_Calculate() 'au recalcul dans l'onglet
Select Case Range("A1").Value
    Case Is = "cochon"
        With Sheets("DATA")
            DerLgn = .Range("D" & Rows.Count).End(xlUp).Row + 1
            .Cells(DerLgn, 4) = 1
        End With
        Sheets("Formulaire_cochon").Select
    Case Is = "poule"
        With Sheets("Hand DATA")
            DerLgn = .Range("D" & Rows.Count).End(xlUp).Row + 1
            .Cells(DerLgn, 4) = 1
        End With
        Sheets("Formulaire_poule").Select
End Select
End Sub
ThauThème a écrit :

Re

Pourrais tu utiliser les balises de Code s'il te plaît...

Désolée, je n'ai jamais utilisé tout ça.

Maintenant, le message d'erreur est : "Erreur d'exécution '9' : l'indice n'appartient pas à la sélection"

Et quand je clique sur débogage, c'est cette ligne qui est surlignée :

With Sheets("DATA")

Je ne sais pas si c'est lié, mais pour rappel, la valeur est modifiée dans un autre classeur que celui contenant le feuillet DATA

Re,

nicopat a écrit :

Je ne sais pas si c'est lié, mais pour rappel, la valeur est modifiée dans un autre classeur que celui contenant le feuillet DATA

Ce n'est pas lié car la macro événementielle Calculate se trouve bien dans le bon classeur.

En revanche, où se trouve l'onglet DATA ? Si lui se trouve dans l'autre classeur il faut le spécifier dans le code :

Workbooks("nom_de_l_autre_classeur.xlsx").Sheets("DATA")

On perd un temps fou en bavardage stérile, là !.... Si tu avais daigné envoyé les deux classeurs ton problème serait réglé depuis longtemps

OK désolée, alors rebelote avec 2 fichiers ci-joints :

  • "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

J'ai essayé de simplifier la formule en supprimant tout ce qui ce faisait sur le feuillet "Data" et qui est superflu.

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 :

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"

Re,

Quand on édite, le classeur actif est fichier généré automatiquement.xlsx. On dit au code de sélectionner un onglet mais si on ne spécifie pas le classeur, pour lui, c'est par défaut le classeur actif. Donc plantage !... La solution :

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

Désolé j'aurais dû le voir avant !...

1000 mercis Thauthème !!!

Ca fonctionne !

Juste une question : tu parviens à sauvegarder "Mon fichier de saisie.xlsm" après cette modif?

Chez moi, excel plante systématiquement, mais peut-être que le problème vient d'ailleurs....


nicopat a écrit :

1000 mercis Thauthème !!!

Ca fonctionne !

Juste une question : tu parviens à sauvegarder "Mon fichier de saisie.xlsm" après cette modif?

Chez moi, excel plante systématiquement, mais peut-être que le problème vient d'ailleurs....

si tu y arrives, peux-tu le joindre stp?

ça ne sauvegardes vraiment pas ici

Re,

Pas trop compris ton dernier problème mais voici ton fichier avec le dernier code :

Rechercher des sujets similaires à "centrer valeur"