Erreur '1004' Variable Long reste égale à Zero
Bonjour,
Je me permet de faire appel à vous car après maintes modifications sur mon code la macro ne fonctionne toujours pas, et la stagiaire débutante en vba que je suis commence à désespérer.
Je me suis aperçue que la variable l qui devrait être égale à 796 puisque ma variable dern_ligne prend bien la valeur 797 reste égale à zéro.
Peut-être ai-je mal déclaré ma variable ?
Avant de lancer la macro celle ci prenait bien la valeur 796 mais une fois lancée cela n'était plus le cas.
Le message d'erreur suivant s'affiche: " Erreur d'exécution '1004': Erreur définie par l'application ou par l'objet."
Le plus bizarre est que la macro a bien fonctionné une première fois puis plus du tout.
Voici le code en question:
Sub exercice()
Dim i As Integer
Dim l As Long
Dim j As Long
Dim classeur As String
Dim feuil As Worksheet
Dim dern_ligne As Long
'classeur = ActiveWorkbook.Name
'feuil = Worksheets("DDPE Consolidé")
'feuil.Activate
With ActiveSheet
dern_ligne = Range("B10000").End(xlUp).Row
l = dern_ligne - 1
For l = l To 0 Step -1
'For i = 5 To ActiveSheet.Range("A1").End(xlDown).Row Step 1
i = 5
Do While Range("A" & i).Value <> ""
If ActiveSheet.Range("C" & l).Value >= ActiveSheet.Range("A" & i).Value Then
If ActiveSheet.Range("C" & l).Value <= ActiveSheet.Range("B" & i).Value Then
ActiveSheet.Range("B" & l).Value = ActiveSheet.Range("E" & i).Value
End If
End If
i = i + 1
Loop
'Next i
Next l
End With
End Sub
Merci d'avance !!
bonjour,
Tu as une erreur car tu as écrit :
For l = l To 0 Step -1
...Par suite, à la fin l prend la valeur zéro et
ActiveSheet.Range("C" & zéro).Value >= ...
ça VBA il aime pas du tout...
PAr ailleurs, si je peux te donner quelques conseils destiné aux débutants :
à l'exception de i, j, k que tu peux utiliser tant que tu veux comme compteur de boucles :
For i = 1 to 1000
Evite d'utiliser des noms de variables en une seule lettre. (et surtout pas le "L" minuscule qu'on peut facilement confondre avec le chiffre 1
iR convient très bien pour une variable de ligne
iC pour une variable Colonne
iLR (iLastRow) pour une variable de dernière ligne
Les noms de variable trop longs nuisent à la lisibilité du code (C'est d'ailleurs une technique d'obfuscation) pour empêcher les intrus de comprendre le code...
A+
Observation :
Tu as écris With ActiveSheet
mais par la suite tu te répètes :
If ActiveSheet.Range("C" & l).Value >= ActiveSheet.Range("A" & i).Value Then
If ActiveSheet.Range("C" & l).Value <= ActiveSheet.Range("B" & i).Value Then
ActiveSheet.Range("B" & l).Value = ActiveSheet.Range("E" & i).Value
Ceci aurait été bien préférable :
If .Range("C" & l).Value >= .Range("A" & i).Value Then
If .Range("C" & l).Value <= .Range("B" & i).Value Then
.Range("B" & l).Value = .Range("E" & i).Value
A+
Bonjour à tous
A tester le code épuré pour un module
Option Explicit
Sub exercice()
Dim i As Integer
Dim dligne As Integer
Sheets(1).Activate
With ActiveSheet
dligne = Range("B5").End(xlDown).Row
For i = 5 To dligne
If Range("A" & i).Value <> "" And Range("C" & i).Value >= Range("A" & i).Value And _
Range("C" & i).Value <= Range("B" & i).Value Then
Range("B" & i).Value = Range("E" & i).Value
End If
Next i
End With
End Sub
Bonjour à tous,
et un salut particulier à Galopin que je remercie d'avoir enrichi ma culture avec obfuscation.
Je n'en reviens d'ailleurs pas d'avoir ignoré ce terme : je ne pratique certes pas quand j'écris du code — sauf involontairement
Bonne journée.
Merci beaucoup pour vos réponses !
Excel n'affiche plus de message d'erreur lorsque je lance la macro, mais celle-ci ne fonctionne quand même pas, je vais m'aider des conseils que vous m'avez donnés et continuer à chercher.
Sub exercice()
Dim i As Integer
Dim dligne As Integer
Dim ligne As Integer
Sheets("DDPE Consolidé").Activate
With ActiveSheet
dligne = Range("B10000").End(xlUp).Row
ligne = dern_ligne - 1
For ligne = ligne To 2 Step -1
For i = 5 To dligne
If Range("A" & i).Value <> "" And Range("C" & ligne).Value >= Range("A" & i).Value And _
Range("C" & ligne).Value <= Range("B" & i).Value Then
Range("B" & ligne).Value = Range("E" & i).Value
End If
Next i
Next ligne
End With
End Sub
Re,
Si tu fais un copier/coller de mon code, ça doit fonctionner
tu mélanges la variable "i" ?
If Range("A" & i).Value <> "" And Range("C" & ligne).Value >= Range("A" & i).Value And _
Range("C" & ligne).Value <= Range("B" & i).Value Then
Range("B" & ligne).Value = Range("E" & i).Value
End If
M12 a écrit :Re,
Si tu fais un copier/coller de mon code, ça doit fonctionner
tu mélanges la variable "i" ?
If Range("A" & i).Value <> "" And Range("C" & ligne).Value >= Range("A" & i).Value And _
Range("C" & ligne).Value <= Range("B" & i).Value Then
Range("B" & ligne).Value = Range("E" & i).Value
End If
Ça a bien fonctionné, merci beaucoup tu m'enlèves une épine du pied !