Erreur de compilation
Résolu
HAXitoo
Messages postés
57
Date d'inscription
Statut
Membre
Dernière intervention
-
melanie1324 Messages postés 1504 Date d'inscription Statut Membre Dernière intervention -
melanie1324 Messages postés 1504 Date d'inscription Statut Membre Dernière intervention -
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 4101 france tv - Forum Lecteurs et supports vidéo
- J'aime par erreur facebook notification - Forum Facebook
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
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