Actualiser une feuille

Bonjour,

Je réalise des classeurs avec plusieurs feuilles dont chacune est composée de requête via sql.

Je recherche un code VBA qui me permette d'actualiser une feuille par rapport à sont nom et pas une autre.

Que l'actualisation se fasse au niveau des requêtes de la dite feuille.

J'ai trouvé ce code: Refresh.All mais je ne suis trop peu connaisseur en VBA pour l'appliquer sur une feuille précise.

Merci pour votre aide.

M

Bonjour manu,

Essaie d'actualiser ta feuille manuellement en enregistrant la macro. Ça peut peut-être t'aider.

Bonjour,

J'y est pensé, mais je t'envoue que cela est trop long. Le nb de requête est d'environ de 120.

L'avantage, est que si j'ajoute un autre jour une nouvelle requête, celle-ci sera actualiser car appel du code sur la feuille, et donc pas de macro à refaire.

Je préfèrerai passer par VBA, même si je ne maitrise pas du tout.

Merci

En fait, je te disais ça pour que tu adaptes ensuite le code de la macro enregistrée !

Fais-le manuellement en enregistrant la macro et poste le code de la macro ici. On verra si on peut adapter.

Ok, je le fais pour qlq requêtes. Je développerais par la suite.

Je reviens de suite.


Voici le code:

Sub MAJSTOCKCC()

'

' MAJSTOCKCC Macro

' Mise à jour des stock CC

'

'

Sheets("Stock ").Select

ActiveWindow.SmallScroll ToRight:=10

Range("M7").Select

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

Range("P5").Select

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

ActiveWindow.SmallScroll ToRight:=10

Range("X8").Select

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

Range("Z9").Select

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

ActiveWindow.SmallScroll ToRight:=10

Range("AG9").Select

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

Range("AJ8").Select

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

ActiveWindow.SmallScroll ToRight:=9

Range("AQ12").Select

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

Sheets("Base").Select

End Sub

Merci encore pour votre aide.

Re,

Si tu regardes ton code, la sélection de la feuille se fait à ce niveau Sheets("Stock ").Select. Tu as juste à changer la feuille Stock par autre chose non ?

Le code que j'ai transmis est une macro que j'ai enregistré en actualisant qu'une dizaine de requêtes.

Si j'en ai 120 ou plus, je dois taper 120 lignes de code, ce que je veux éviter.

Lorsque je veux actualiser l'ensemble de mon classeur, je fais Ctrl+Alt+F5, et la macro transcrit en code:

ActiveWorkbook.RefreshAll

Je recherche la même chose, mais que cela s'active sur une feuille donné et nom le classeur "Workbook".

J'ai remplacé le code par

ActiveWorkSheet ("Stock").RefreshAll, mais cela ne fonctionne pas.

Je pêche.

M

Je pense que chaque querytable que tu rafraichis fait partie de la collection QueryTables.

Dans ce cas, essaie en bouclant sur chaque querytable d'une feuille avec le code suivant (pour la feuille Stock par exemple :

For each Qt in Sheets("Stock").QueryTables
Qt.Refresh
Next Qt

Bonjour,

Excusez l'incruste.

Mais pour seulement optimiser le code présenter..

Et en complément de la réponse de vba-new

Sub MAJSTOCKCC(NomFeuille As String)
'
' MAJSTOCKCC Macro
' Mise à jour des stock CC
    With Sheets(NomFeuille)
        .Range("M7").ListObject.QueryTable.Refresh BackgroundQuery:=False
        .Range("P5").ListObject.QueryTable.Refresh BackgroundQuery:=False
        .Range("X8").ListObject.QueryTable.Refresh BackgroundQuery:=False
        .Range("Z9").ListObject.QueryTable.Refresh BackgroundQuery:=False
        .Range("AG9").ListObject.QueryTable.Refresh BackgroundQuery:=False
        .Range("AJ8").ListObject.QueryTable.Refresh BackgroundQuery:=False
        .Range("AQ12").ListObject.QueryTable.Refresh BackgroundQuery:=False
    End With
    Sheets("Base").Select
End Sub

Si les adresses de cellules sont chaque fois les mêmes tu peu envoyer avec le nom de la feuille.

En principe cela devrait fonctionner directement sur le Range sans passer par Select.

A+

Bonjour lermite,

Tu peux encore optimiser en bouclant sur les cellules :

    Sub MAJSTOCKCC(NomFeuille As String)
    '
    ' MAJSTOCKCC Macro
    ' Mise à jour des stock CC
       For Each cel In Sheets(NomFeuille).Range("M7,P5,X8,Z9,AG9,AJ8,AQ12")
            .ListObject.QueryTable.Refresh 'BackgroundQuery:=False
        Sheets("Base").Select
    End Sub

Le BackgroundQuery:=False ne sert pas car c'est la valeur par défaut.

Il se peut même que le code suivant marche mais je ne peux pas tester :

    Sub MAJSTOCKCC(NomFeuille As String)
    '
   ' MAJSTOCKCC Macro
   ' Mise à jour des stock CC
      Sheets(NomFeuille).Range("M7,P5,X8,Z9,AG9,AJ8,AQ12").ListObject.QueryTable.Refresh 'BackgroundQuery:=False
        Sheets("Base").Select
    End Sub
Rechercher des sujets similaires à "actualiser feuille"