Sélection de cellules dans une macro qui se lance automatiquement
Bonjour à tous,
Je cherche à actualiser automatiquement une feuille ETAT DES STOCKS dès qu'une nouvelle entrée dans la feuille JOURNAL DES STOCKS est réalisée.
Ma macro d'actualisation fonctionne très bien manuellement mais lorsque j'essaye de faire en sorte qu'elle se lance automatiquement j'ai l'erreur "1004 - La méthode sélect de la classe Range a échoué." qui apparait pour tous les Select de ma macro. Même problème avec cette macro très simple pour faire un test que je vous copie ci-dessous.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "JOURNAL STOCKS" Then
If Not Intersect(Target, Sh.Range("A4:E2000")) Is Nothing Then
Sheets("ETAT DES STOCKS").Range("A1").Select
ActiveCell.FormulaR1C1 = "1"
Sheets("ETAT DES STOCKS").Range("A1").Select
Selection.Copy
Range("A1").Select
Selection.Copy
Range("B1").Select
ActiveSheet.Paste
End If
End If
End Sub
Je vous confirme que cette macro est bien dans "ThisWorkbook". J'ai même essayé avec Application.EnableEvents = False/True au cas où mais cela ne change rien. J'ai essayé en appelant la macro ou en la copiant directement, sans succès également. Alors que si je mets un bouton pour actualiser par exemple, la macro fonctionne très bien.
Savez-vous d'où pourrait venir le problème ?
D'avance merci de vos retours.
bonjour Mountrove et bienvenu,
je ne vois pas des choses spéciales
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
With Sh 'la feuille modifiée
If StrComp(.Name, "JOURNAL STOCKS", 1) = 0 Then 'nom correct, ignorer majuscules/miniscules
If Not Intersect(Target, .Range("A4:E2000")) Is Nothing Then 'modification dans cette plage
With .Range("A1") 'A1:B1 sont hors cette plage, donc enableevents n'est pas nécessaire
.Value = 1
.Copy .Offset(, 1)
End With
End If
End If
End With
End SubBonjour Bart,
Merci beaucoup d'avoir pris le temps de me répondre. Ici il est en effet possible de contourner le select. Je joins ci-dessous mon code plus complet.
J'ai en fait un tableau croisé dynamique issu de la feuille "JOURNAL STOCKS" que j'utilise pour compléter et mettre en format ma feuille "ETAT DES STOCKS". Dans l'exemple ci-dessous, je vérifie si le produit est bien une bouteille de rouge et si oui je veux le copier au bon endroit dans la feuille ETAT DES STOCKS. Mais pour je ne sais quelle raison, VBA ne me laisse pas faire la sélection. Alors que lorsque j'utilise cette macro avec un bouton ça fonctionne et comme tu le dis je fais référence à une autre feuille pour faire les changements automatiques.
PS: Autodidacte et débutant sur VBA, mon code n'est probablement pas très clean :)
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "JOURNAL STOCKS" Then
If Not Intersect(Target, Sh.Range("A4:E2000")) Is Nothing Then
Dim i As Integer
Dim NombreLignesTCD As Integer
PremiereLigne = 4
NombreLignesTCD = WorksheetFunction.CountA(Worksheets("TCD").Range("A:A")) - 2
For i = PremiereLigne To NombreLignesTCD + 3
If Application.WorksheetFunction.VLookup(Worksheets("TCD").Cells(i, 1), Worksheets("LISTE PRODUITS").Range("A1:B1000"), 2, False) = "Rouge" Then
Sheets("ETAT DES STOCKS").Range("A2").End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveCell = Sheets("TCD").Cells(i, 1)
ActiveCell.Offset(0, 1).Select
ActiveCell = Sheets("TCD").Cells(i, 2)
ActiveCell.Offset(0, 1).Select
ActiveCell = Sheets("TCD").Cells(i, 2) * Sheets("TCD").Cells(i, 3)
End If
Next
End If
End If
End Subre,
donc vous changez quelque chose dans un TCD ou dans une feuille qui contient un TCD ?
Bon si cela fonctionne aucun problème, sinon, pouvez-vous télécharger votre fichier anonymisé pour voir si on peut l'améliorer ?
Merci Bart. J'ai en effet pu me débrouiller autrement.