Une variable nulle, alors qu'elle ne devrait pas ?

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Orodreth

XLDnaute Impliqué
Bonjour à tous.

Je sèche sur un morceau de code qui plante, et je ne comprend pas pourquoi.

Code:
Private Sub AffecterCommandes(IndexFeuille As Integer)
Select Case IndexFeuille
    Case 1
        Sheets("Commandes Magasin").Select
    Case 3
        Sheets("Commandes Begles").Select
End Select

Dim IndexLigneRecup As Integer
Dim ValeurTest As String
ValeurTest = Sheets("RecupDonneesCommandes").Range("A65536").End(xlUp).Value
With Sheets("RecupDonneesCommandes")
    For IndexLigneRecup = 2 To .Range("A65536").End(xlUp).Row
        Dim FinLigne As Integer
        If ActiveSheet.Range("A65536").End(xlUp).Row >= ActiveSheet.Range("D65536").End(xlUp).Row Then
            FinLigne = ActiveSheet.Range("A65536").End(xlUp).Row
            Else
            FinLigne = ActiveSheet.Range("D65536").End(xlUp).Row
        End If
        
        If .Cells(IndexLigneRecup, 2).Value <> .Cells(IndexLigneRecup - 1, 2).Value Then
            ActiveSheet.Range("C" & FinLigne + 1).Value = .Cells(IndexLigneRecup, 2).Value
        End If
        FinLigne = ActiveSheet.Range("C65536").End(xlUp).Row
        ActiveSheet.Cells(FinLigne, 2).Value = .Cells(IndexLigneRecup, 1).Value
        Select Case .Cells(IndexLigneRecup, 3).Value
            Case 0
                ActiveSheet.Cells(FinLigne, 4).Value = ActiveSheet.Cells(FinLigne, 4).Value + .Cells(IndexLigneRecup, 4).Value
                ActiveSheet.Cells(FinLigne, 5).Value = ActiveSheet.Cells(FinLigne, 5).Value + .Cells(IndexLigneRecup, 5).Value
            Case 1
                ActiveSheet.Cells(FinLigne, 6).Value = ActiveSheet.Cells(FinLigne, 6).Value + .Cells(IndexLigneRecup, 4).Value
                ActiveSheet.Cells(FinLigne, 7).Value = ActiveSheet.Cells(FinLigne, 7).Value + .Cells(IndexLigneRecup, 5).Value
            Case 2 Or 3
                ActiveSheet.Cells(FinLigne, 8).Value = ActiveSheet.Cells(FinLigne, 8).Value + .Cells(IndexLigneRecup, 4).Value
                ActiveSheet.Cells(FinLigne, 9).Value = ActiveSheet.Cells(FinLigne, 9).Value + .Cells(IndexLigneRecup, 5).Value
            Case 4
                ActiveSheet.Cells(FinLigne, 10).Value = ActiveSheet.Cells(FinLigne, 10).Value + .Cells(IndexLigneRecup, 4).Value
                ActiveSheet.Cells(FinLigne, 11).Value = ActiveSheet.Cells(FinLigne, 11).Value + .Cells(IndexLigneRecup, 5).Value
        End Select
        ActiveSheet.Cells(FinLigne, 1).Value = Format(dtpRecupCommandes.Value, "m/d/yyyy")
        
    Next IndexLigneRecup
    Dim DebutTable As Integer
    DebutTable = FinLigne
    MsgBox DebutTable
    [B]Do While Cells(DebutTable, 4).Value <> "Nombre Ref"[/B]
        If DebutTable > 1 Then
            DebutTable = DebutTable - 1
        End If
    Loop
ExitIf:
    DebutTable = DebutTable + 1
    Cells(FinLigne + 1, 1).Value = "Total"
    Dim ParcoursTable As Integer
    Dim IndexColonne As Integer
    For IndexColonne = 4 To 11
        For ParcoursTable = DebutTable To FinLigne + 1
            Cells(FinLigne + 1, IndexColonne).Value = Cells(FinLigne + 1, IndexColonne).Value + Cells(ParcoursTable, IndexColonne).Value
        Next ParcoursTable
    Next IndexColonne
            
End With
End Sub

Voici le code qui pose problème. La ligne en gras est celle qui génère l'erreur (1004, erreur définit par l'application ou par l'objet)
J'ai vérifié, la valeur de DebutTable est égale à 0, ce qui implique que ma variable FinLigne aussi.
Pourtant, ce code s'éxécute trois fois avant sans poser de problème, mais à la 4eme il plante.
Si je check les valeurs avec une msgbox, ça donne respectivement: 67, 123, 180, 0.

Je ne vois pas du tout où peut-être l'erreur de mon code, si quelqu'un a une idée ...

Merci d'avance,
Thomas
 
Re : Une variable nulle, alors qu'elle ne devrait pas ?

Bonjour Pascal

J'ai essayé hier pour le point d'arrêt, mais le passage me semblait assez brutal.

Quant au fichier, il est trop lourd pour que je puisse le copier, et les données sont dans une base 🙁

Je vais retenter pour le point d'arrêt, on sait jamais, je verrais peut-être mieux ?

Merci
 
Re : Une variable nulle, alors qu'elle ne devrait pas ?

Bonjour le fil,

As tu essayé d'inverser :
Code:
Do 
        If DebutTable > 1 Then
            DebutTable = DebutTable - 1
        End If
    Loop While Cells(DebutTable, 4).Value <> "Nombre Ref"
En général, c'est dans ce sens que ça plante mais on ne sait jamais...
Sinon est ce que ton débutable ne tombe pas à 0 ?

Cordialement
 
Re : Une variable nulle, alors qu'elle ne devrait pas ?

Bonjour Orodreth, pascal, Spitnolan 🙂

Je ne sais pas si ca a une incidence mais personnellement je ne le fais jamais

Definir plusieurs fois une variable dans un meme module

à l'interrieur de ta boucle for next

Code:
    For IndexLigneRecup = 2 To .Range("A65536").End(xlUp).Row
        [COLOR="Red"]Dim FinLigne As Integer[/COLOR]

selon ce code :
Code:
    Dim DebutTable As Integer
    DebutTable = FinLigne
    MsgBox DebutTable
    Do While Cells(DebutTable, 4).Value <> "Nombre Ref"
        If DebutTable > 1 Then
            DebutTable = DebutTable - 1
        End If
    Loop
si debuttable est à zero c'est que finligne y est et un Dim reinitialise une variable
 
Re : Une variable nulle, alors qu'elle ne devrait pas ?

Re le fil, salut spinolan, wilfried.

Non, j'ai pas inversé la boucle, je me sers jamais du "do ... loop while"

Je ne savais pas qu'un Dim réinitialisait une variable.
Mais j'ai trouvé le problème:
Je définis une boucle sur des données dans une feuille (ligne 2 à la dernière ligne du tableau), mais si jamais la journée en question n'a pas généré de données, la seule ligne que j'ai, c'est la ligne1.
Il ne rentre donc pas dans le for, d'où l'erreur.

J'ai corrigé en mettant en place un booléen:
Il est initialisé à vrai dans le for, et si la valeur est vraie après le next, je peux faire mes traitements. S'il ne passe pas dans la boucle, sa valeur est false, donc bye.

C'est du bidouillage, mais après test, ça a l'air de marcher.

Merci à vous deux.
Thomas
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
847
Réponses
4
Affichages
692
Réponses
1
Affichages
305
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour