Problème fonction While boucle infini

Miralov

XLDnaute Nouveau
Bonjour à tous,
pour mon stage je travail sur une macro en réception de marchandise mais j'ai un petit problème auquel je n'arrive pas à trouver de solution (je précise que j'ai démarré la VBA il y a deux mois, donc c'est tout nouveau pour moi, j'ai fais une recherche au préalable mais aucune des solutions trouvées ne fonctionne).
Pour remettre dans le contexte :

Un scanner sera relié à Excel, lorsque celui-ci scan une étiquette, le code-barre (que j'ai imposé au format 13 caractères, pour éviter les erreurs avec d'autres formats de codes-barres) s'afficherait en colonne 1, puis une fenêtre demanderai si la palette concernée est pleine ou, dans le cas contraire, combien de cartons elle contient.

Jusque là tout va bien, mais c'est sur la suite que ca me pose problème

J'aurai besoin que lorsque je scanne un code, il y ait deux possibilités :
- si le code n'existe pas encore dans la colonne, qu'il fasse la macro décrite au dessus (donc demander si la palette est complette ou le nombre de cartons sur la palettes si elle est incomplete).

Ou

- Si le code existe déjà dans la colonne A (par exemple si une palette du même produit est passé plus tôt dans la journée), qu'il additionne le nombre de palettes et/ou les quantités avec la ligne déjà inscrite, sans créer une nouvelle ligne.

J'avais pensé à faire un While avec une condition If mais cela ne fonctionne pas, je me retrouve avec une boucle infinie, et je ne comprends pas pourquoi...
Je laisse le document en pièce-jointe, si l'un d'entre vous peut m'expliquer pourquoi, ca fait pas loin de 4h que je suis en train de retourner mon code dans tous les sens...
merci beaucoup pour votre aide, et en vous souhaitant un agréable Week end à tous !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Miralov

Miralov [Bienvenue sur le forum]
Un bout de code (à mettre dans le code d'une feuille - pas dans un module standard) qui pourra t'inspirer ou pas ;)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim D_L&
If Target.Column = 1 And Len(Target) Then
D_L = Target.Row
If Application.CountIf(Cells(1).Resize(D_L), Target) > 1 Then
MsgBox "Doublon détecté", vbCritical
Else
'=> code si pas de doublons
'ci dessous MsgBox juste pour test
MsgBox "Il est : " & Time, vbInformation, "Bonjour," & Application.UserName
End If
End If
End Sub

PS: Test OK sur mon PC.
 

Miralov

XLDnaute Nouveau
Merci beaucoup pour ta réponse !
Je vois que tu n'as pas déclaré le type de ta variable D_L&, serait-ce pour ça que mon while aurait une boucle infini ?
En y regardant de plus près, je me demande si j'ai pas fais une erreur en utilisant un "Value" avec mes Cells, sachant que mon EAN est une suite de caractère et pas une valeur numérique. Cela viendrait-il du fait que mon EAN est déclaré comme As String et que le Cells.Value ne le detecte pas ?
Même en m'inspirant de ton code j'ai bien du mal à cerner le problème (je l'avais dis, je suis débutant ahah).
vba.png
 

Staple1600

XLDnaute Barbatruc
Re

Dim cpt As Long serait plus "sûr", non ?
(ou en "raccourci" Dim cpt&)
Et si j'étais moi, jécrirai:
Dim EAN
Mais même avec ce changement, ton Excel tousse encore, non ?

EDITION: Mais si j'étais moi, je me contenterai de mon code (celui du message#2) ;)
 
Dernière édition:

Miralov

XLDnaute Nouveau
Re

Dim cpt As Long serait plus "sûr", non ?
(ou en "raccourci" Dim cpt&)
Et si j'étais moi, jécrirai:
Dim EAN

Ca fonctionne enfin ! En effet je devais bien le passer en As Long (merci pour l'astuce du raccourci, j'ignorais que l'on pouvait l'écrire comme ça) et changer mon OR en AND (par contre je ne sais absolument pas pourquoi… Je souhaitais que la boucle s'arrete lorsqu'une cellule était vide OU que le code était déjà existant, pas les deux ensembles… Mais bon, ca a l'air de fonctionner alors je vais rester là dessus).

Merci beaucoup pour ton aide et pour ta patience !
 

youky(BJ)

XLDnaute Barbatruc
Bonjour tous,
J'arrive tard mais je vois que le PB de boucle persiste et c'est là que j'ai modifié
mon code ne mets pas les couleurs
Bruno
VB:
Sub Macro_1()

    Dim EAN As String
    Dim Nombre As Long, bas As Long
    
'Ecrire la reference
Do 'ici Do à Loop
    EAN = InputBox("Ecrire EAN13")

' Code détrompeur
If Not IsNumeric(EAN) Or Len(EAN) <> 13 Then
 MsgBox ("La réference doit être de format EAN13, ANNULATION")
Goto fin
End If
bas = Feuil1.[A65000].End(3).Row + 1 'derniere ligne de col A  +1
If IsNumeric(Application.Math(EAN, Feuil1.[A:A], 0)) Then
MsgBox "Ce code exit déja . . .!", , "ANNULATION": GoTo fin
End If

 Feuil1.Cells(bas, 1).Value = EAN

        'Palette complete ?
    
        If MsgBox("Palette complète ?", vbYesNo) = vbNo Then
    
        Worksheets("Feuil1").Cells(bas, 2) = " "
        Nombre = InputBox("Quantité")
        Worksheets("Feuil1").Cells(bas, 3) = Nombre
    
        Else
    
        Worksheets("Feuil1").Cells(bas, 3) = " "
        Worksheets("Feuil1").Cells(bas, 2) = "1"

        End If
fin:
 If MsgBox("Souhaitez-vous mettre un autre Code ?", vbExclamation + vbYesNo, "CONTINUER") = vbNo Then Exit Sub
Loop

End Sub
 

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 870
dernier inscrit
Dethomas