Erreur de compilation

Résolu/Fermé
HAXitoo Messages postés 57 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 4 juin 2014 - Modifié par pijaku le 6/12/2013 à 10:03
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 - 6 déc. 2013 à 11:45
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.

A voir également:

3 réponses

melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par pijaku le 6/12/2013 à 10:03
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
HAXitoo Messages postés 57 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 4 juin 2014
6 déc. 2013 à 10:22
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
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 déc. 2013 à 10:37
Mets le code de la macro find lastrow ici et je te fais tes modifs
0
HAXitoo Messages postés 57 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 4 juin 2014
Modifié par HAXitoo le 6/12/2013 à 10:43
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
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
Modifié par melanie1324 le 6/12/2013 à 11:09
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
HAXitoo Messages postés 57 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 4 juin 2014
Modifié par HAXitoo le 6/12/2013 à 11:22
Alors le code s'éxecute sans erreur, mais il ne se passe rien dans ma feuille.
0
melanie1324 Messages postés 1504 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
6 déc. 2013 à 11:45
On va faire plus simple, envoies ton fichier.
Mets le sur cjoint.com et mets le lien ici.
0