Erreur de compilation

Résolu
HAXitoo Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   -  
melanie1324 Messages postés 1561 Statut Membre -
Bonjour,

Je pense que ce problème a déjà du être posté, mais je n'ai toujours rien trouvé de "compréhensible" pour mon niveau. J'ai une macro avec un problème de sub ou fonction non défini. Le voici:

Private Sub Worksheet_Activate()
   Application.EnableEvents = False
    Application.ScreenUpdating = False
    Dim avarSplit() As String
    Dim i As Integer
    Dim j As Integer
    
    Call FindLastRow
    j = 2
    
    For i = 4 To LastRow
    If Feuil1.Range("H" & i).Value = "BLS/AED" Then
    
    Feuil3.Range("A" & j).Value = Feuil1.Range("E" & i).Value
    Feuil3.Range("B" & j).Value = Feuil1.Range("F" & i).Value
    Feuil3.Range("C" & j).Value = Feuil1.Range("G" & i).Value
    Feuil3.Range("D" & j).Value = Feuil1.Range("N" & i).Value
    Feuil3.Range("E" & j).Value = Feuil1.Range("I" & i).Value
    Feuil3.Range("F" & j).Value = Feuil1.Range("J" & i).Value
    Feuil3.Range("G" & j).Value = Feuil1.Range("K" & i).Value
    Feuil3.Range("H" & j).Value = Feuil1.Range("L" & i).Value
    
    
    Select Case UBound(avarSplit)
    Case 1
    Feuil3.Range("G" & j).Value = avarSplit(1)
    Case 2
    Feuil3.Range("G" & j).Value = avarSplit(1)
    Feuil3.Range("H" & j).Value = avarSplit(2)
    End Select
    
    j = j + 1
    
    End If
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub


Le problème se trouve, d'après moi, soit au début soit au "Call FindLastRow". Merci de votre aide.

3 réponses

  1. melanie1324 Messages postés 1561 Statut Membre 156
     
    Bonjour,

    ton problème vient de ces lignes :

    Call FindLastRow
    j = 2

    For i = 4 To LastRow

    écris comme ca lastrow = rien donc il peut pas faire tourner la macro. il faut que tu fasses une déclaration de variable de manière àpouvoir la passer de findlastrow à worksheet_ activate.

    Pour cela deux possibilités :
    - soit tu déclares la variable en public
    - soit tu la fais passer de l'une à lautre

    Pour le résoudre, tu as deux solutions, soit tu écris comme ca :

    public lastrow as variant
    
    Sub FindLastRow 
    'ton code
    end sub
    
    Private Sub Worksheet_Activate() 
    
    'ton code
    end sub
    
    


    Soit tu écris comme ca :

    
    sub FindLastRow (lastrow)
    'ton code
    end sub
    
    
    Private Sub Worksheet_Activate() 
    Application.EnableEvents = False 
    Application.ScreenUpdating = False 
    Dim avarSplit() As String 
    Dim i As Integer 
    Dim j As Integer 
    
    Call FindLastRow (lastrow)
    
    'la suite de ton code
    
    end sub
    
    0
  2. HAXitoo Messages postés 57 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci pour cette réponse rapide. Alors j'ai essayé la première façon de faire et j'ai une nouvelle erreur "Erreur d'exécution 28" : Espace pile insuffisant.

    Je n'ai pas compris la deuxième manière de faire, la différence entre 'ton code et 'la suite de ton code.
    0
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      Mets le code de la macro find lastrow ici et je te fais tes modifs
      0
    2. HAXitoo Messages postés 57 Date d'inscription   Statut Membre Dernière intervention  
       
      Alors c'est ce que j'ai posté dans le premier message. Excuse j'avais encore ça:

      Public LastRow As Long
      Public LastRowD As Long
      Public LastRowI As Long

      Public Sub FindLastRow()
      LastRow = Feuil1.Cells(Rows.Count, "E").End(xlUp).Row
      LastRowD = Feuil3.Cells(Rows.Count, "B").End(xlUp).Row
      LastRowI = Feuil3.Cells(Rows.Count, "K").End(xlUp).Row
      End Sub
      0
  3. melanie1324 Messages postés 1561 Statut Membre 156
     
    Bonjour,

    Alors je vois ou est ton problème :

    Ta macro :Private Sub Worksheet_Activate()

    ne doit travailler que sur la feuille qui est modifiée.

    Autrement dit, si c'est la feuille 1, toutes tes actions ne doivent être que la feuille 1. or, ta macro, find lastrow agis sur 3 feuilles donc ca ne peut pas coller.

    Faut que tu modifies findlastrow comme suit :

    Public LastRow As Long
    Public LastRowD As Long
    Public LastRowI As Long
    
    Public Sub FindLastRow()
    
    if activesheet.name = "Feuil1" then
        LastRow = Feuil1.Cells(Rows.Count, "E").End(xlUp).Row
    else
        LastRowD = Feuil3.Cells(Rows.Count, "B").End(xlUp).Row
        LastRowI = Feuil3.Cells(Rows.Count, "K").End(xlUp).Row
    end if
    End Sub
    
    0
    1. HAXitoo Messages postés 57 Date d'inscription   Statut Membre Dernière intervention  
       
      Alors le code s'éxecute sans erreur, mais il ne se passe rien dans ma feuille.
      0
    2. melanie1324 Messages postés 1561 Statut Membre 156
       
      On va faire plus simple, envoies ton fichier.
      Mets le sur cjoint.com et mets le lien ici.
      0