VBA : Macro pour rafraîchir donnée d'une cellule

Résolu
JeanBapt -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je vais essayer d'être clair dans mon problème :

J'ai un fichier Excel où la première Feuille va être rempli à travers un site Web qui va insérer des données dans les cellules.

J'ai des macro sur cette première Feuille qui suivant les données insérées vont changer la valeur de cellules d'une autre Feuille et/ou cacher des lignes de cette autre Feuille.

Mon problème est qu'une fois que je récupère ce fichier Excel du site Web et que je l'ouvre, les macros prennent pas en compte les valeurs de cette première feuille. Le seul moyen est d'aller :
1. Sur la cellule
2. Double cliquer
3. Appuyer sur entrée sans modifier la valeur

A ce moment là la macro fait son job.

J'ai cherché une macro qui me permettrai de faire cela automatiquement à l'ouverture du Fichier Excel, mais je ne trouve rien de concluant pour l'instant.

Auriez-vous une idée pour m'aider ? :)

Merci beaucoup par avance.

3 réponses

  1. jh 15 ans Messages postés 77 Statut Membre 10
     
    Bonjour JeanBapt,
    Essaie avec ceci que j'ai trouvé sur le Net :

    Private Sub Workbook_Open()
    Calculate
    End Sub
    0
    1. JeanBapt9 Messages postés 6 Statut Membre
       
      Merci mais j'avais déjà essayé cette fonction et cela ne fonctionne pas.

      J'ai l'impression qu'Excel ne prend pas en compte ce qu'il y a dans la cellule jusqu'au moment où j'y vais et appuie ensuite sur Entrée. C'est comme si Excel ne prenait pas en compte la valeur de la cellule.
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Dans Private Sub Workbook_Open() il faut que tu appelles la macro qui te fait les modifs.

    eric

    0
    1. JeanBapt9 Messages postés 6 Statut Membre
       
      Bonjour,

      Merci pour l'indication.

      Est-ce que je dois faire comme cela :

      Feuil1.Worksheet_Change.Calculate


      Cela n'a pas l'air de fonctionner et j'ai une erreur VBA. Pareil pour :

      Call Feuil1.Worksheet_Change
      Calculate


      Merci encore pour l'aide. Je ne suis vraiment pas un pro en matière de code :p
      0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Difficile de répondre sans savoir à quoi ressemble ton fichier et tes codes...
      eric
      0
    3. JeanBapt9 Messages postés 6 Statut Membre
       
      Oui en effet, voici ci-après un exemple :

      Sub Worksheet_Change(ByVal Target As Range)
      With Sheets("BeamOn Data")
      
      Dim ad As String
      ad = Target.Address
      Select Case ad
      
          Case "$B$39": Call HasWebcast(ad)
          Case "$B$141": Call WebcastDelivery(ad)
          Case "$B$43": Call WebcastNbPx(ad)
          Case "$B$42": Call WebcastDur(ad)
          Case "$B$38": Call Webconf(ad)
          Case "$B$119": Call WebconfType(ad)
          Case "$B$52": Call Test(ad)
          
      End Select
      End With
      End Sub
      
      'Si Webcast ou non
      Sub HasWebcast(ByVal Target As Variant)
      
      If Range(Target) = True Then
      Sheets("Quote Webcast").Visible = True
      Sheets("Quote").Visible = False
      
      ElseIf Range(Target) = False Then
      Sheets("Quote Webcast").Visible = False
      Sheets("Quote").Visible = True
      
      End If
      End Sub
      
      'Type de webcast : Live, On Demand, ect...
      Sub WebcastDelivery(ByVal Target As Variant)
      
      If Range(Target) = "OD" Then
      Worksheets("Quote Webcast").Rows("34:35").Hidden = True
      
      ElseIf Range(Target) = "LV" Then
      Worksheets("Quote Webcast").Rows("34:34").Hidden = False
      Worksheets("Quote Webcast").Rows("35:35").Hidden = True
      
      Else: Worksheets("Quote Webcast").Rows("34:35").Hidden = False
      
      End If
      End Sub
      
      'Nombre de connexion attendu pour le Webcast
      Sub WebcastNbPx(ByVal Target As Variant)
      
      Dim StdPxAudioStream As Integer
      StdPxAudioStream = Worksheets("ON24Tarifs").Range("C16").Value
      
      If Range(Target).Value > StdPxAudioStream _
      Or Range("B42").Value > 60 Then
      Worksheets("Quote Webcast").Rows("37:38").Hidden = False
      
      ElseIf Range(Target).Value <= StdPxAudioStream _
      And Range("B42").Value <= 60 Then
      Worksheets("Quote Webcast").Rows("37:38").Hidden = True
      
      End If
      End Sub
      
      'Durée du Webcast prévu
      Sub WebcastDur(ByVal Target As Variant)
      
      Dim StdPxAudioStream As Integer
      StdPxAudioStream = Worksheets("ON24Tarifs").Range("C16").Value
      
      If Range(Target).Value > 60 _
      Or Range("B43").Value > StdPxAudioStream Then
      Worksheets("Quote Webcast").Rows("37:38").Hidden = False
      
      ElseIf Range(Target).Value <= 60 _
      And Range("B43").Value <= StdPxAudioStream Then
      Worksheets("Quote Webcast").Rows("37:38").Hidden = True
      
      End If
      End Sub
      
      'Choix si Webconf ou non avec audio
      Sub Webconf(ByVal Target As Variant)
      
      If Range(Target) = False Then
      Worksheets("Quote").Rows("34:37").Hidden = True
      Worksheets("Quote").Rows("38:54").Hidden = True
      Worksheets("Quote").Rows("106:106").Hidden = True
      Worksheets("Quote").Rows("109:109").Hidden = True
      Worksheets("Quote").Rows("111:111").Hidden = True
      Worksheets("Quote").Range("J9").Value = "No"
      Worksheets("Quote").Range("J10").Value = "No"
      
      End If
      End Sub
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Rien n'est clair dans ce que tu veux.
    Sais-tu toi au moins ce que tu veux faire ?

    Worksheet_Change n'est appelé que si une cellule change.
    A l'ouverture aucune cellule n'a changé et toutes les procédures ont été appelées en leur temps.

    Si c'est l'une ou plusieurs des procédures que tu veux appeler à l'ouverture met-la dans Open :
    HasWebcast(adresse_de_la_cellule) (???)

    Bref ton raisonnement et ton but sont incompréhensibles.

    Par ailleurs ton With Sheets("BeamOn Data") est inutile puisque tu ne t'en sers pas.
    Regarde l'aide sur with

    eric

    0
    1. JeanBapt9 Messages postés 6 Statut Membre
       
      Désolé, si cela ne semble pas clair. Les procédures créent l'ont été lorsque le fichier Excel était utilisé d'une manière manuel (changement de cellule manuelle).

      Cependant l'utilisation du fichier a évolué et dorénavant c'est un site Web qui va exporter les data dans les cellules. Mais j'aimerai tout de même pouvoir garder les procédures qui vont :
      - cacher ou montrer des lignes
      - changer des valeurs dans des cellules

      et cela dans d'autres feuilles du fichier et de manière automatique à l'ouverture du fichier.

      Je comprends donc qu'il faut que ma Sub soit appelée autrement mais je ne suis pas sur de connaître la réponse à cela.

      Encore une fois désolé si tout cela est compliqué.

      Merci aussi pour l'information concernant le "With".
      1
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      On y vois un peu plus clair...
      Mais quand tu vas ouvrir ton fichier rien n'aura changé dedans.
      Tu peux lancer les macros à l'ouverture en mettant les sub dans un module standard et ceci dans thisworkbook :
      Private Sub Workbook_Open()
          Sheets("Feuil2").Activate
              Call HasWebcast("$B$39")
              Call WebcastDelivery("$B$141")
              Call WebcastNbPx("$B$43")
              Call WebcastDur("$B$42")
              Call Webconf("$B$38")
              'Call WebconfType("$B$119")
              'Call Test("$B$52")
      End Sub

      Feuil2 étant la feuille qui t'intéresse.
      Mais vu que je ne pense pas que les données y soient car c'est sans doute une autre macro ou un copier-coller qui le fera il n'y a pas grand intéret à les lancer.

      Maintenant si elles sont dans un module standard tu peux les appeler de n'importe quelle feuille à condition qu'elles n'attendent pas de paramètre.
      Donc :
      Sub HasWebcast()
      dim Target as range
      Target=[B29]
      à la place de :
      Sub HasWebcast(ByVal Target As Variant)

      Je t'ai mis [B29] si c'est une cellule fixe, toujours la même.
      Si c'est variable tu mets :
      Target=activecell
      C'est la cellule sélectionnée sur la feuille qui sera prise en compte

      eric
      0
    3. JeanBapt9 Messages postés 6 Statut Membre
       
      Merci énormément !!!!

      La procédure à lancer à l'ouverture fonctionne comme je le souhaite maintenant ! :D

      Très bonne fin de journée et merci encore !
      0
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      ok, je met en résolu pour toi (en haut vers ton titre, pour la prochaine fois)
      eric
      0