Problème double macro [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 13-05-2009 à 11:50:19
Je pense qu'il faut spécifier chaque feuille a tes fonctions intersect...
Feuil1.intersect ....
Essaye de ne pas utiliser les activecells, cela fait perdre du temps à tes programmes
Marsh Posté le 13-05-2009 à 13:48:34
nathanc a écrit : Je pense qu'il faut spécifier chaque feuille a tes fonctions intersect... |
Merci nathanc. J'ai tenté de résoudre en spécifiant chaque feuille à mes fonctions intersect en début de module, mais ça n'a rien donné...
Faute de mieux, j'ai contourné le problème avec Application.EnableEvents = False qui désactive l'exécution des autres macros pendant l'exécution de celle-ci. En attendant p-ê de trouver la raison du bug initial...
En revanche, on me dit en effet assez souvent qu'ActiveCell est à éviter si on ne veut pas perdre du temps... Mais par quoi puis-je le remplacer ?
Encore merci pour ton aide.
Cordialement.
MA
Marsh Posté le 12-05-2009 à 16:16:12
Bonjour à tous et excusez-moi de venir vous déranger pour mon problème.
Je suis en train de créer un classeur Excel contenant plusieurs feuilles différentes les unes des autres, chacune contenant des tableaux. Sur certaines feuilles, j'ai rajouté du code pour effectuer différentes actions lorsque l'on modifie certaines cellules.
Voici en exemple le code de la feuille "Standard de développement" qui par la suite me posera problème :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(ActiveCell, Range("F12:F40" )) Is Nothing Then
If ActiveCell.Value = "Réalisé" Then
ActiveCell.Offset(0, 1).Value = 1
End If
ElseIf Not Intersect(ActiveCell, Range("G12:G40" )) Is Nothing Then
If ActiveCell.Value = 1 Then
ActiveCell.Offset(0, -1).Value = "Réalisé"
ElseIf ActiveCell.Value <> 0 And ActiveCell.Value <> 1 Then
ActiveCell.Offset(0, -1).Value = "En-Cours"
End If
ElseIf Not Intersect(ActiveCell, Range("H12:H40" )) Is Nothing Then
If ActiveCell.Value <> "" Then
ActiveCell.Offset(0, -1).Value = 1
ActiveCell.Offset(0, -2).Value = "Réalisé"
End If
End If
End Sub
J'ai également rajouté un bouton sur la 1ère feuille qui déclenche une macro qui va nettoyer l'ensemble des tableaux se trouvant dans mon classeur.
Private Sub BoutonNouveauProjet_Click()
Sheets("Standard de développement" ).Range("C9:L9" ).ClearContents
Sheets("Standard de développement" ).Range("F12:L40" ).ClearContents
End Sub
Malheureusement, à chaque fois que j'effectue ma macro de nettoyage de tableau, j'assiste tout le temps à un message d'erreur (alors qu'auparavant, lorsque je n'avais pas mis de code sur la feuille "Standard de développement", il n'y avait aucun problème).
Erreur d'exécution '1004' :
La méthode 'Intersect' de l'objet '_Global' a échouée.
Je n'arrive pas à comprendre à quoi est dûe cette erreur. Quelqu'un serait-il en mesure de m'éclairer ?
D'avance merci à tous ceux qui auront eu la patience de me lire.
Cordialement.
MA