Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

ma Macro en cours de fonctionnement saute vers une autre Macro (Worksheet_Change)

Wyrox51

XLDnaute Nouveau
Bonjour,

Le nom peut-être bizarre dit comme ça mais je vais m'expliquer :

VB:
Dim WbkS As Workbook
    Dim WbkD As Workbook
    Dim Dl%, i%, j%, k%
    Set WbkS = ThisWorkbook
  
    Application.Dialogs(xlDialogOpen).Show 'Ouvre le fichier
    Set WbkD = ActiveWorkbook 'Nouveau classeur
    'Dl = Range("c" & Rows.Count).End(xlUp).Row
    'Dl = Range("Saisie").Rows.Count
    Dl = Range("Table").Rows.Count + 1
    j = 2
    k = 23
  
    For i = 2 To Dl 'boucle pour récup les données
    'ATTENTION : Il faudra changer le WbkD à droit du égale en
    ' WbkS pour récupérer les données de l'autre fichier
        [B]WbkS.Sheets("Michel").Cells(k, 2) = WbkD.Sheets("Feuil1").Cells(j, 1)[/B]
        WbkS.Sheets("Michel").Cells(k, 3) = WbkD.Sheets("Feuil1").Cells(j, 2)
        WbkS.Sheets("Michel").Cells(k, 4) = WbkD.Sheets("Feuil1").Cells(j, 3)
        WbkS.Sheets("Michel").Cells(k, 5) = WbkD.Sheets("Feuil1").Cells(j, 4)
        WbkS.Sheets("Michel").Cells(k, 6) = WbkD.Sheets("Feuil1").Cells(j, 5)
        WbkS.Sheets("Michel").Cells(k, 7) = WbkD.Sheets("Feuil1").Cells(j, 6)
        WbkS.Sheets("Michel").Cells(k, 8) = WbkD.Sheets("Feuil1").Cells(j, 7)
        j = j + 1
        k = k + 1
    Next
  
    ActiveWorkbook.Close 'Fermée le classeur

Voici mon code, qui est comme vous pouvez le remarquer, là pour copier et coller des données d'un autre fichier. Tout fonctionne parfaitement jusqu'à la ligne en gras (qui fonctionne elle aussi).
Après cette ligne là, il part vers une macro d'un worksheet (voir ci-dessous) :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

    ***********
    [B]Set Sais = Sheets("Michel")[/B]
    Set c = Worksheets("******")
    Set s = Worksheets("******")
    Set b = Worksheets("******")

Et s'arrête à la ligne en gras. (Les * sont là car je masque certaine chose, mais il y a bien une écrite à la place). Pour au final me dire "L'indice n'appartient pas à la sélection"

Quelqu'un pourrait-il m'aider et m'expliquer pourquoi après la première ligne en gras il saute vers la macro intégré à la feuille pour au final me faire une erreur.

Merci d'avance

PS : En essayant de mettre la macro de feuille en commentaire, ma macro de copier-coller fonctionne parfaitement.
 

Wyrox51

XLDnaute Nouveau
A note que le gras ne fonctionne pas lorsque l'on écrit comme un code, alors ce sont les lignes entre ['b'] et [\b] à prendre en compte quand je parle de lignes en gras
 
Dernière édition:

Wyrox51

XLDnaute Nouveau
J'ai continuer à chercher et j'ai trouvé la solution sur un de vos posts Dranreb ! Je mets le lien ici ainsi que la solution pour de futurs personnes


Pour que la modification d'une cellule depuis du code ne provoque pas d'exécution intempestive voire récursive d'une Workseet_Change, il faut placer
VB:Copier dans le presse-papier
Application.EnableEvents = False
devant, et ne surtout pas oublier de le remettre à True ensuite, sinon plus aucune procédure d'évenement ne fonctionnera pour l'utilisateur.
À+


Message de Dranreb - 14 avril 2011 - 15ème message
 

Dranreb

XLDnaute Barbatruc
Vous pourriez d'ailleurs vous passer de la boucle en faisant :
VB:
    Application.EnableEvents = False
    WbkS.Sheets("Michel").Cells(23, 2).Resize(d1, 7).Value _
      = WbkD.Sheets("Feuil1").Cells(2, 1).Resize(d1, 7).Value
    Application.EnableEvents = True
Ou peut être tout simplement, je ne sais pas :
Code:
    Application.EnableEvents = False
    With Range("Table")
        WbkS.Sheets("Michel").Cells(23, 2).Resize(.Rows.Count, _
           .Columns.Count).Value = .Value
        End With
    Application.EnableEvents = True
 

Discussions similaires

Réponses
9
Affichages
342
Réponses
7
Affichages
528
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…