Mise à jour d'une cellule via une autre feuille dans le même fichier

codefernand - 6 avril 2013 à 05:14
 codefernand - 10 avril 2013 à 15:19
Bonjour à tous,

J'ai une macro qui en sorte que quand une cellule change de contenu la couleur de la cellule change en fonction de celle-ci et ça fonctionne bien, mais la mise à jour ne se fait pas, probablement dû au fait que l'information de la cellule provient d'une autre feuille. Quand je fais un enter sur la cellule en question la couleur se mais à jour comme prévu. Donc ces vraiment qu'il ne voie pas le changement qui se fait sur l'autre feuille à sa feuille.

Avez-vous une idée ou une solution ?

30 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 07:10
Bonjour,
Bien "embrouillé", ton exposé.
Et on ne sait pas vraiment ce qu'il veut dire avec certitude.
Montre donc le code de ta macro et précise si la cellule concernée contient une formule Excel (et dans ce cas : laquelle).
Ma boule de cristal me dit pour l'instant (mais elle peut se tromper) que ta macro est dans l'évènement Change, lequel n'intervient pas si le contenu de la cellule est le résultat d'une formule Excel.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 08:17
Bon !
1) je t'ai "vu" être présent il y a plus d'une demie-heure, ce qui était plus que suffisant pour montrer ton code et surtout pour confirmer ou infirmer mon hypothèse (cellule dont le résultat est celui d'une formule Excel)
2) je me suis "promené" et ai par ailleurs vu que tu pratiques un jeu (bien connu) de "ping-pong" entre deux sites.

Je reviens vers 9 h.30 (soit dans un peu plus d'une heure). Si pas de réponse de ta part à mon retour (code et formule éventuelle). Je te laisserai seul.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 18:09
Pour répondre à ton message privé, codefernand : tu vois bien que cette discussion n'est pas bloquée !
Mets-ICI ton message, que chacun doit pouvoir lire pour suivre.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 18:16
En attendant et pour les autres lecteurs.
Ma boule de cristal ne s'était pas trompée et les cellules à colorier selon leur contenu contiennent bien une valeur résultant elle-même d'une formule Excel.
Et comme dit plus haut, l'évènement change n'est pas déclenché dans ces conditions. Ce n'est donc pas cet évènement qu'il faut utiliser.
Mais nous allons attendre que codefernand mette ici son message et son code (le présent message n'est là que pour préparer la réflexion des autres éventuels intervenants)



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Oui tu as raison l'information de la cellule(U13) de l'onglet "Semaine" vient d'une formule (='Horaire 1'! AN6)et c'est cette cellule-là (U13)qui dit à la macro(*)de vérifier le changement.

Merci.
Fernand

*
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim Adresse As String 
If Not Intersect(Target, Range("r14,S13,T14,U13")) Is Nothing Then 
     Adresse = Target.Address 
     Select Case Adresse 
         Case Is = "$R$14" 
               colorier Target, "B22:B24" 
         Case Is = "$S$13" 
               colorier Target, "C13:C15" 
         Case Is = "$T$14" 
               colorier Target, "D22:D24" 
         Case Is = "$U$13" 
               colorier Target, "E13:E15" 
End Select 
End If 
End Sub 
Sub colorier(cible, plage) 
     With Sheets(1).Range(plage).Interior 
          Select Case cible 
               Case Is = "Gscc" 
                    .ColorIndex = 40 
               Case Is = "" 
                    .ColorIndex = -4142 
          End Select 
     End With 
End Sub 
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 19:22
Je reviens après ma partie de pêche (c'est l'heure de la marée intéressante).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
6 avril 2013 à 20:15
Bonjour,

C'est quoi ça ?

colorier Target, "B22:B24" 


Du pseudocode, un commande à réaliser à ta place, ton vrai code qui ne marchera jamais, ou quoi d'autre ? BASICquement, cela n'a aucune signification. Vite un congrès de devins.
0
Utilisateur anonyme
6 avril 2013 à 20:32
Bonjour,

Après un autre effort de compréhension.

Tu as une cellule (Target) qui ne doit pas être r14,S13,T14,U13.

Si ton target est r14,S13,T14,U13 tu veux colorier ton target pour qu'il ressemble à une autre plage.

Et puis, si tu passes tout cela au pas à pas et que tu mets un espion sur
Sheets(1).Range(plage).Interior, as tu autre chose que Nothing ?
0
Bonjour,

En faite je veux colorier les cellules B22:B24 de la feuille "Semaine" en prenant la cellule R14 de la feuille "Semaine" comme référence au [b]changement de condition qui sont de "Gscc" à "".

Le renseignement de la cellule R14 de la feuille "Semaine" est obtenue via une formule (='Horaire 1'! AN6).

Donc le changement se fait sur la feuille "Horaire1" et est transmit à la cellule R14

La macro elle ne voit pas le changement.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 21:13
Bien. Me revoilà.
Tu me parles bien de l'existence d'une formule en U13, mais quid des cellules
r14,S13 et T14 ? sont-elles également dotées de formules ou non ?
J'ai besoin de savoir, pour chacune des cellules r14,S13,T14 et U13 :
- si dotée d'une formule : la formule exacte
- si non dotée d'une formule : la confirmation de l'absence d'une formule
Nous allons devoir en effet traiter différemment celles dotées d'une formule et celles non dotées d'une formule.
J'attends donc ta réponse.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 22:24
Je viens par ailleurs de regarder ton code.
Je l'aurais personnellement écrit ainsi :
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim toto As Range, colorons As Range, couleur As Integer
  With Sheets(1)
    Set toto = Range("r14,S13,T14,U13")
    If Not Intersect(Target, toto) Is Nothing Then
       Select Case Target
           Case toto.Areas(1): Set colorons = Range("B22:B24")
           Case Is toto.Areas(2): Set colorons .Range("C13:C15")
           Case Is toto.Areas(3): Set colorons .Range("D22:D24")
           Case Is toto.Areas(4): Set colorons .Range("E13:E15")
       End Select
       Select Case Target.Text
         Case "Gscc": couleur = 40
         Case "": couleur = -4142
       End Select
       colorons.Interior.ColorIndex = couleur
    End If
  End With
End Sub

Mais (une fois de plus) uniquement pour celles des cellules r14,S13,T14 et U13
qui ne sont pas dotées de formules. Pour celles d'entre elles qui le seraient (et j'attends ta réponse) ce sera forcément autrement.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 22:29
Corrige (j'ai oublié un . ===>>
Set toto = .
Range("r14,S13,T14,U13")


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonjour,

C'est la même formule pour les 3 autres cellules.

R14 (='Horaire 1'!AH7)
S13 (='Horaire 1'!AJ6)
T14 (='Horaire 1'!AL7)
U13 (='Horaire 1'!AN6)

C'est quatre informations différentes pour 4 colorations de plages différentes.

Désolé du délai, mais je ne reçoit pas de courriel de notification de façon régulière.

Merci.
0
Bonjour,

Il n'y aurait-il pas une ligne de code pour dire.

si "horaire1" cellule AH7 changes / actualiser (Comme un Enter sur la cellule) la cellule R14.

Merci.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 avril 2013 à 23:01
Toutes, donc !
Et donc :
Oui tu as raison l'information de la cellule(U13) de l'onglet "Semaine" vient d'une formule (= 'Horaire 1'! AN6)et c'est cette cellule-là (U13)qui dit à la macro(*)de vérifier le changement.

était incomplet !!!
Et donc tout le code que j'ai écrit est à jeter à la poubelle puisqu'aucune de ces cellules ne répondra à l'évènement Change
D'où TOUJOURS la nécessité d'être très complet et précis
Deux solutions, dans un tel cas. Les deux présentent des avantages et des inconvénients.
Pour me permettre de choisir la moins mauvaise, il va maintenant falloir que tu tâches de répondre avec précision et le plus grand soin aux questions suivantes :
- Comment est modifiée la valeur de chacune de ces cellules de ta feuille "Horaire 1" ?
-- réponse 1 : par l'utilisateur
ou
-- réponse 2 : c'est également le résultat d'une formule

Car si réponse 1 ==>> une méthode
mais si réponse 2 ===>> d'autres questions vont "pleuvoir" nécessairement, jusqu'à déterminer "l'origine de l'origine" de ces modifications

Et si trop d'imbrications de modifications par formules, il va falloir procéder encore autrement, mais au prix, alors, de lenteurs ajoutées.

Je lirai tes réponses (précises et complètes, s'il te plait) demain matin .
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonjour;
Les changements sont faits par l'utilisateur via une liste déroulante sur la feuille "Horaire1" et il n'a pas d'autres choix que la liste préétablie.

Veux-tu que je t'envoie une copie du fichier, si cela peut aider à la compréhension

PS. je suis désolé du code que tu as fait pour rien, mais c'est dur d'être clair quand ça ne les pas pour moi, de plus je ne suis pas habitué à expliquer ce genre de problème.

Merci du temps que tu passes à m'aider, j'apprécie beaucoup.
0
Utilisateur anonyme
7 avril 2013 à 01:51
Bonjour,

Plus je lis, plus j'ai l'impression qu'une simple mise en forme conditionnelle pourrait suffire. Après tout, la mise en forme conditionnelle permet 3 conditions + le format pré-établi.
0
Utilisateur anonyme
7 avril 2013 à 02:10
Bonjour,

Les changements sont faits par l'utilisateur via une liste déroulante sur la feuille "Horaire1" et il n'a pas d'autres choix que la liste préétablie.


C'est quatre informations différentes pour 4 colorations de plages différentes.


Mais alors pourquoi se couper les cheveux en quatre ? Si tu connais les choix autorisés et qui sont immuables et que tu as 4 colorations ou mises en formes, il te suffit d'avoir quatre macros différentes et de les appeler directement de la liste déroulante en fonction du choix fait dans la liste déroulante. Sinon, je n'ai vraiment pas compris.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 avril 2013 à 08:10
Bon. Un salut à cmarcotte.
Veux-tu que je t'envoie une copie du fichier, si cela peut aider à la compréhension

Non, car (dit souvent) je n'ouvre jamais un classeur non créé par moi-même.
Je pense toutefois que lorsque nous en aurons terminé sur les bases indiquées, je te demanderai nn ton classeur, mais une image (impression écran) de la feuille "Horaire 1" et une de ta feuille sheets(1) telle qu'après traitement. Car ma boule de cristal (tu sais maintenant que j'en ai une) me souffle qu'il y a très probablement une erreur de conception et qu'elle est largement rattrapable à peu de frais. Mais nous verrons cet aspect quand nous en aurons fini avec ton problème sur les bases actuelles.
Les changements sont faits par l'utilisateur via une liste déroulante sur la feuille "Horaire1" et il n'a pas d'autres choix que la liste préétablie

Que voilà une excellente nouvelle ! Je craignais le pire (modifications en cascade via des formules Excel).
Cette nouvelle va me permettre de garder l'essentiel de mon code et même de l'alléger. (tu vas voir )

Venons-en à nos moutons, maintenant ===>>

1) il me faut prendre mon petit déjeuner (je suis mince comme un coucou, mais mange comme un ogre).
2) tu vas donner un nom à ta feuille sheets(1) ( "resul", par exemple).
3) je reviens dans environ 1 heure avec ton code.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 avril 2013 à 08:26
Bon...
1) Tu vas aller maintenant sur ta sheets(1), que tu as nommée "resul" (comme dit dans mon message précédent.
Et là :
------- a) tu vas supprimer les formules présentes en cellules R14,S13,T14 et U13
------- b) tu vas mettre ceci dans le code de la feuille resul :
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim colorons As String, couleur As Integer
    Set toto = Range("R14,S13,T14,U13")
    If Not Intersect(Target, Range("A1,B1,C1,D1")) Is Nothing Then
       Select Case Target.Address(False, False)
           Case "R14":  colorons = "B22:B24"
           Case "S13":  colorons = "C13:C15"
           Case "T14":  colorons = "D22:D24"
           Case "U13":  colorons = "E13:E15"
       End Select
       Select Case Target.Text
         Case "Gscc": couleur = 40
         Case "": couleur = -4142
       End Select
       Range(colorons).Interior.ColorIndex = couleur
    End If
End Sub

2) Tu vas aller maintenant sur ta feuille "HORAIRE 1" et y mettre ceci dans son code :
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim ou As String
  If Not Intersect(Target, Range("AH7,AJ6,AL7,AN6")) Is Nothing Then
    Select Case Target.Address(False, False)
      Case "AH7":  ou = "R14"
      Case "AJ6":  ou = "S13"
      Case "AL7":  ou = "T14"
      Case "AN6":  ou = "U13"
    End Select
    Worksheets("resul").Range(ou).Value = Target.Value
  End If
End Sub

Voilà. Cela devrait suffire et permettrait de ne pas tout chambouler.
Tu dis.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous