Erreur de compilation
Résolu
HAXitoo
Messages postés
63
Statut
Membre
-
melanie1324 Messages postés 1561 Statut Membre -
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:
Le problème se trouve, d'après moi, soit au début soit au "Call FindLastRow". Merci de votre aide.
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:
- Sub ou fonction non définie
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
3 réponses
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 :
Soit tu écris comme ca :
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
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.
Je n'ai pas compris la deuxième manière de faire, la différence entre 'ton code et 'la suite de ton code.
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
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 :
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