Modifier une feuille de calcul à l'aide d'une macro VB
Question
J'ai deux feuilles de calcul...quand l'une est modifiée d'une certaine manière, je souhaite exécuter une macro qui modifie la seconde de manière appropriée.J'ai déjà isolé l'événement sur lequel je dois agir (la modification d'une cellule dans une colonne particulière), je n'arrive tout simplement pas à trouver d'informations concrètes sur l'accès et la modification d'une autre feuille de calcul (cette feuille de calcul est située sur un autre réseau local). partagez aussi....l'utilisateur a cependant accès aux deux).
Toute aide est la bienvenue.Les références sur la façon de procéder ou quelque chose de similaire sont tout aussi bonnes que des exemples de code concrets.
La solution
Dans Excel, vous écririez probablement simplement du code pour ouvrir l’autre feuille de calcul, la modifier, puis enregistrer les données.
Voir ce tutoriel pour plus d'informations.
Je devrai modifier mon VBA plus tard, alors faites comme si c'était un pseudocode, mais cela devrait ressembler à ceci :
Dim xl: Set xl = CreateObject("Excel.Application")
xl.Open "\\the\share\file.xls"
Dim ws: Set ws = xl.Worksheets(1)
ws.Cells(0,1).Value = "New Value"
ws.Save
xl.Quit constSilent
Autres conseils
Vous pouvez ouvrir une feuille de calcul sur une seule ligne :
Workbooks.Open FileName:="\\the\share\file.xls"
et faites-y référence comme le classeur actif :
Range("A1").value = "New value"
Après avoir joué avec cela pendant un moment, j'ai trouvé que le pseudo-code de Michael était le plus proche, mais voici comment j'ai procédé :
Dim xl As Excel.Application
Set xl = CreateObject("Excel.Application")
xl.Workbooks.Open "\\owghome1\bennejm$\testing.xls"
xl.Sheets("Sheet1").Select
Ensuite, manipulez la feuille...peut-être comme ça :
xl.Cells(x, y).Value = "Some text"
Lorsque vous avez terminé, utilisez ces lignes pour terminer :
xl.Workbooks.Close
xl.Quit
Si des modifications ont été apportées, l'utilisateur sera invité à enregistrer le fichier avant sa fermeture.Il existe peut-être un moyen de sauvegarder automatiquement, mais cette méthode est en fait meilleure, donc je la laisse telle quelle.
Merci pour votre aide!
Copiez ce qui suit dans votre ThisWorkbook
objet de surveiller des changements spécifiques.Dans ce cas, lorsque vous augmentez une valeur numérique vers une autre valeur numérique.
Attention :tu devras remplacer Workbook-SheetChange
et Workbook-SheetSelectionChange
avec un trait de soulignement.Ex: Workbook_SheetChange
et Workbook_SheetSelectionChange
le trait de soulignement est échappé dans le code Markdown.
Option Explicit
Dim varPreviousValue As Variant ' required for IsThisMyChange() . This should be made more unique since it's in the global space.
Private Sub Workbook-SheetChange(ByVal Sh As Object, ByVal Target As Range)
' required for IsThisMyChange()
IsThisMyChange Sh, Target
End Sub
Private Sub Workbook-SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
' This implements and awful way of accessing the previous value via a global.
' not pretty but required for IsThisMyChange()
varPreviousValue = Target.Cells(1, 1).Value ' NB: This is used so that if a Merged set of cells if referenced only the first cell is used
End Sub
Private Sub IsThisMyChange(Sh As Object, Target As Range)
Dim isMyChange As Boolean
Dim dblValue As Double
Dim dblPreviousValue As Double
isMyChange = False
' Simple catch all. If either number cant be expressed as doubles, then exit.
On Error GoTo ErrorHandler
dblValue = CDbl(Target.Value)
dblPreviousValue = CDbl(varPreviousValue)
On Error GoTo 0 ' This turns off "On Error" statements in VBA.
If dblValue > dblPreviousValue Then
isMyChange = True
End If
If isMyChange Then
MsgBox ("You've increased the value of " & Target.Address)
End If
' end of normal execution
Exit Sub
ErrorHandler:
' Do nothing much.
Exit Sub
End Sub
Si vous souhaitez modifier un autre classeur sur cette base, je penserais d'abord à vérifier si le classeur est déjà ouvert...ou encore mieux, concevez une solution capable de regrouper toutes vos modifications et de les effectuer en même temps.Changer continuellement une autre feuille de calcul en fonction de votre écoute de celle-ci pourrait être douloureux.