Connectivité feuille à feuille

Bonjour,

Voila plusieurs jours que je tente de résoudre mon problème sans succès, je précise que c'est la première fois que je fait du VBA.

Voila mon problème :

J'ai 3 feuilles C,D et E

C : Résultats

D : Paramétrage

E : Tableau de données

Chacune contiens un "Private Sub"

La connectivité entre C et D fonctionne très bien mais c'est entre D et E que ça se gatte. Comme vous allez le voir je récupère une valeur "OUI" ou "NON" dans la feuille D depuis la feuille E. En fonction de cette variable et des données contenue dans un tableau cela remplit une colonne du même tableau avec des "OK" ou "" suite a une conditionnel.

Tout fonctionne très bien, mais pas automatiquement je suis obligé d’exécuter le sub de la feuille E à chaque variation de la feuille D pour obtenir le résultat attendu.

Vous l'aurez donc compris ma question est la suivante : comment rafraichir mes résultats en E automatiquement à chaque variations en D ?

Merci pour votre aide, voici le code de la feuille E (j'ai pas bien compris le tableau dynamique alors je suis parti sur un tableau a plusieurs dimensions) :

exemple code vba

Bonjour Korgger et bienvenu, bonjour le forum,

Sans le fichier c'est très compliqué... Il te faudra utiliser l'événementielle Change ou Calculate (selon le cas) dans l'onglet D...
Envoie le fichier qui va bien ou pourra mieux comprendre ton problème...

Bonjour ThauTHème merci pour votre réponse. Je ne peux malheureusement pas vous partager les fichiers pour des raisons de confidentialité de données, j'espère que vous le comprendrez et pourrez m'aider malgré tout. Voici tout de fois le code des lignes utiles en feuille D :

exemple code 2

Si j'ai bien compris je devrais ajouter quelque chose du genre :

enreg_tab.calculate

enreg_tab.change

dans ma feuille D ?

Re,

Non je ne comprends pas !... Rien ne t'empêche de créer un exemple anonymisé reprenant la structure de ton original avec juste une poignée de données permettant de faire tourner le code. Pour moi c'est plus de la flemme que de la confidentialité... Mais je sais que certains balèzes ici sont capables de résoudre les problèmes sans fichier joint. Ce n'est pas mon cas, malheureusement...

Voici le fichier avec a priori le minimum pour faire tourner le code dans la section qui me pose problème

Re,

Excellent exemple !...

En pièce jointe ton ficher modifié. J'ai déplacé la macro enreg_tab dans le Module 1 et modifié le code de l'événementielle Change :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$5" Then Exit Sub
Select Case Target.Value
    Case "OUI"
        Rows("6:9").Hidden = False
    Case "NON"
        Rows("6:9").Hidden = True
End Select
Module1.enreg_tab
End Sub

Bonjour,

Merci pour votre aide, je vais regarder tout ça et essayer de comprendre et l'implémenter à mon fichier déjà existant. Je reviendrais vers vous si jamais j'ai des questions ou problèmes. Encore merci pour le temps consacré.

Je viens de regarder et tester ca marche comme je voulais (j'ai enlevé le O.Activate l'utilisateur ne devant pas être transféré vers la page des tableaux).

J'ai toute fois quelques questions :

A quoi sert le code :

If Target.Address <> "$B$5" Then Exit Sub

Je vois également que vous utiliser un "module" je ne sais pas trop ce que c'est et ce qu'il permet, mais devrais je écrire toute mes ligne de code dans des modules ?

Bonjour Korgger, bonjour le forum,

L'événementielle Change, comme son nom l'indique, s'exécute à chaque changement dans l'onglet. Comme lors du changement en B5 on pourrait modifier d'autres cellules de ce même onglet, cela relancerait la procédure et provoquerait une boucle. La ligne de code :

If Target.Address <> "$B$5" Then Exit Sub

fait qu'à la première boucle si le changement se fait ailleurs qu'en B5 on sort de la procédure et la boucle cesse. Je ne sais pas si c'est clair mais en bref c'est pour éviter les boucles... Ça permet de restreindre l'action de l'événementielle Change (ou toute autre événementielle) ici à une seule cellule mais on pourrait la limiter à une plage, une colonne, une ligne, etc.

If Application.Intersect(Target, Range("A1:C20")) Is Nothing  Then Exit Sub 'ne fonctionne que sur la plage A1:C20
If Target.Column <> 1 Then Exit Sub 'ne fonctionne que dans la colonne A
If Target.Row <> 1 Then Exit Sub 'ne fonctionne que dans la ligne 1


Les procédures doivent, par défaut, se trouver dans un module plutôt que dans un composant Worksheet. D'ailleurs les variables déclarées publiques ne fonctionnent que si elles se trouvent dans un module. Toutefois, on peut utiliser une procédure dans un composant Worksheet si elle est utilisée que dans cet onglet mais, par habitude, je ne place que les événementielles dans les composants Worksheet et les autres procédures dans des modules...

Rechercher des sujets similaires à "connectivite feuille"