problème de boucle sur vba - VB/VBA/VBS - Programmation
Marsh Posté le 17-11-2006 à 11:12:09
ton do while not avec un is nothing ne me plait que très moyennement, mets des parentheses ou change la condition de sortie de boucle.
Marsh Posté le 17-11-2006 à 14:04:40
bonjour gock, jpcheck,
Un petit coup de Option Explicit te donnerait la solution :
If Not ladate Is Nothing Then
firstaddress = ladate.Address
...
Loop While Not ladate Is Nothing And ladate.Address <> firstAdress
firstAdress = "" il fallait mettre : . . . . . . . . . . . . . . . firstaddress
A+
Marsh Posté le 17-11-2006 à 08:38:58
bonjour
j'ai un petit soucis sur le code visual basic suivant
ce code concerne la gestion d'une facture, son enregistrement, sa consultation sur excel
il y a 3 onglets: facture - voir facture - listingv
voici le code pour l'enregiostrement:
Sub enregistrerlafacture()
'
'
myyear = Year(Range("G1" ))
ActiveSheet.Unprotect
Worksheets("listingV" ).Select
couryear = Year(Now)
If myyear = couryear Then GoTo suite Else MsgBox ("ATTENTION! bien vérifier d'avoir rentré la date correspondant à l'année en cours au format jj/mm/aaaa !" )
Range("G1" ).ClearContents
Exit Sub
suite:
Style = vbOKCancel
Reponse = MsgBox("As-tu bien tout vérifié, parce qu'après c'est plus compliqué de modifier (il faut aller dans le listing). Si c'est bon, clique sur OK ", Style)
If Reponse = vbCancel Then Exit Sub
ActiveSheet.Unprotect
Worksheets("listingV" ).Select
Worksheets("listingV" ).Rows(10).Select
Selection.Insert
Range("A10:DC10" ).Select
With Selection.Interior
.ColorIndex = 2
.Pattern = xlGray16
.PatternColorIndex = 37
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End With
Range("A10" ).Select
Range("A10" ).Formula = "=MAX(A11:A5006)+1"
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Range("A7" ).Select
'Coordonnées:
Range("B10" ).Formula = "=facture!G1"
Range("A10" ).Formula = "=facture!A13"
Range("C10" ).Formula = "=facture!A10"
Range("D10" ).Formula = "=facture!E4"
Range("E10" ).Formula = "=facture!E5"
Range("F10" ).Formula = "=facture!E6"
Range("G10" ).Formula = "=facture!F6"
'Produit 1
Range("H10" ).Formula = "=facture!A16"
Range("I10" ).Formula = "=facture!B16"
Range("J10" ).Formula = "=facture!C16"
Range("K10" ).Formula = "=facture!D16"
Range("L10" ).Formula = "=facture!E16"
Range("M10" ).Formula = "=facture!F16"
Range("N10" ).Formula = "=facture!G16"
'Produit 2
Range("O10" ).Formula = "=facture!A17"
Range("P10" ).Formula = "=facture!B17"
Range("Q10" ).Formula = "=facture!C17"
Range("R10" ).Formula = "=facture!D17"
Range("S10" ).Formula = "=facture!E17"
Range("T10" ).Formula = "=facture!F17"
Range("U10" ).Formula = "=facture!G17"
....
Rows("10:10" ).EntireRow.AutoFit
Worksheets("listingV" ).Rows(10).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlValues
Worksheets("facture" ).Range("a13" ).Formula = "=(listingV!A10)+1"
madate = Range("B10" )
Range("IS10" ) = Month(madate) * 1.1
ActiveSheet.Protect
Worksheets("listingV" ).Select
'selectionne la feuille des commandes
Worksheets("facture" ).Select
Range("G1" ).Select
Range("G1" ) = Now
Range("A16:A56" ).ClearContents
Range("B16:B56" ).ClearContents
Range("A1" ).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Exit Sub
Blème:
MsgBox ("le date, c'est en chiffre STP, Pas en charabia!" )
Exit Sub
End Sub
code pour afficher les facture d'un mois donné:
la partie qui pose poblème est en rouge
en fait ce qui se passe, c'est que après loop while, le code boucle à a+1, même si la variable ladate est différente de firstadress ou égale à 0, donc elle boucle en permanence sans jamais s'arrêter
comment faire pour l'arrêter de boucler ?
merci
Sub RelevéFactures()
monmois = InputBox("mois choisi (en chifre - janvier=1, février=2, etc...)" )
If monmois = "" Then Exit Sub
If monmois > 12 Then Exit Sub
Range("c10" ) = Choose(monmois, "JANVIER", "FEVRIER", "MARS", "AVRIL", "MAI", "JUIN", "JUILLET", "AOUT", "SEPTEMBRE", "OCTOBRE", "NOVEMBRE", "DECEMBRE" )
monannee = InputBox("veuillez rentrer l'année" )
Range("a16:c56" ).Select
Selection.ClearContents
Range("a8" ).Select
With Worksheets("listingv" ).Range("IS10:IS5048" )
Set ladate = .Find(monmois * 1.1, LookIn:=xlValues)
If Not ladate Is Nothing Then
firstaddress = ladate.Address
Do
a = a + 1
Cells(a + 15, 1) = ladate.Offset(0, -251)
Cells(a + 15, 2) = "COMMANDE"
Cells(a + 15, 3) = ladate.Offset(0, 1)
Set ladate = .FindNext(ladate)
Loop While Not ladate Is Nothing And ladate.Address <> firstAdress
Cells(15 + monmois, 6) = Range("c58" )
If Range("c58" ) <> Range("C" ) Then MsgBox ("attention" )
End If
Message édité par GOCK le 17-11-2006 à 09:44:32