Méthode .find sur une date

Fab2108

XLDnaute Nouveau
Salut à tous,

J'ai une petite appli sur Excel 2003 qui tourne depuis trois quatre ans maintenant.

Je cherche à la faire évoluer.

Il s'agit d'une application de facturation avec gestion des paiements.

J'ai réussi à faire les modif pour que les écritures comptables liées au paiement se créent mais je cherche à créer celle des deux mois précédents pour éviter de les saisir manuellement.

Mon code ne plante pas mais il ne traite que les deux premières lignes et après il tourne en rond.

Merci d'avance pour votre aide.



Sub CPTARGT()

Dim recherche As Range
Dim LVIDE As Range
Dim VDATE As Date
Dim MOIS As String
Dim test As String




VDATE = Format("01/07/2015", "dd/mm/yyyy")

Suivant:



With Sheets("PRODUCTION3").Range("N:N")

Set recherche = .Find(What:=VDATE, LookAt:=xlWhole, LookIn:=xlValues, searchdirection:=xlDown, SearchOrder:=xlByRows)
If Not recherche Is Nothing Then
firstAddress = recherche.Address
GoTo CPTAREG
Else
GoTo fin
End If

End With

boucle:

With Sheets("PRODUCTION3").Range("N:N")
Set recherche = .FindNext(recherche)
If Not recherche Is Nothing Or recherche.Address <> firstAddress Then
GoTo CPTAREG


VDATE = VDATE + 1
GoTo Suivant
End If


End With



CPTAREG:

With Sheets("RECUPPAIEMENT").Range("A:A")

Set LVIDE = .Find(What:="", LookAt:=xlWhole)
If Not LVIDE Is Nothing Then

End If

End With

With Sheets("PRODUCTION3")

If .Cells(recherche.Row, 15).Value = "CHQ" Then
GoTo boucle
Else
Sheets("RECUPPAIEMENT").Select

Cells(LVIDE.Row, 1).Value = Format(.Cells(recherche.Row, 14).Value, "ddmmyyyy")
If .Cells(recherche.Row, 15).Value = "CB" Then
Cells(LVIDE.Row, 2).Value = "CB"
Else: Cells(LVIDE.Row, 2).Value = "CA"
End If
Cells(LVIDE.Row, 3).Value = 41100000
MOIS = Format(Month(.Cells(recherche.Row, 4).Value), "00")
Cells(LVIDE.Row, 4).Value = "CREP" & MOIS
Cells(LVIDE.Row, 7).Value = .Cells(recherche.Row, 2).Value
Cells(LVIDE.Row, 5).Value = "C"
Cells(LVIDE.Row, 6).Value = .Cells(recherche.Row, 16).Value
Cells(LVIDE.Row, 8).Value = .Cells(recherche.Row, 5).Value


End If

End With

'ActiveWorkbook.Save
GoTo boucle


fin:

VDATE = VDATE + 1
With Sheets("PRODUCTION3").Range("N:N")


Set recherche = .Find(What:=VDATE, LookAt:=xlWhole, LookIn:=xlValues, searchdirection:=xlDown, SearchOrder:=xlByRows)
If Not recherche Is Nothing Then
firstAddress = recherche.Address
GoTo CPTAREG
Else
test = test + 1
If test < 2 Then
GoTo Suivant
Else
GoTo fin
End If
End If
End With

End Sub
 

Pièces jointes

  • RECUP PAIEMENT 2015.zip
    108.8 KB · Affichages: 31
Dernière édition:

Paf

XLDnaute Barbatruc
Re : Méthode .find sur une date

Bonjour,

Je pense que le plus sage est de reprendre le code pour l'alléger et de passer par un tableau pour augmenter la vitesse de traitement.

Seulement il faudrait préciser quelles lignes de la feuille PRODUCTION3 doivent être prise en compte et ce qu'on doit écrire en feuille RECUPPAIEMENT et comment on l'obtient, notamment pour les colonnes JAL, CG, CPTE TIERS et SENS .

A+
 

Docmarti

XLDnaute Occasionnel
Re : Méthode .find sur une date

Bonjour à tous.

Tu es mélangé dans tes FIND

Code:
1 'Tu cherche VDATE
Set recherche = .Find(What:=VDATE, LookAt:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext, SearchOrder:=xlByRows)

2 'Tu cherches ensuite  What:=""
Set LVIDE = .Find(What:="", LookAt:=xlWhole)

3 'Donc tu fais un FindNext qui recherche What:=""
Set recherche = .FindNext(recherche)

Remplace
Code:
Set LVIDE = .Find(What:="", LookAt:=xlWhole)
par
Code:
dern = Sheets("RECUPPAIEMENT").Cells(Rows.Count, "B").End(xlUp).Row + 1
Set LVIDE = Sheets("RECUPPAIEMENT").Cells(dern, "B")

Remplace
Code:
searchdirection:=xlDown
par
Code:
searchdirection:=xlNext

Amicalement

Docmarti
 

Statistiques des forums

Discussions
312 103
Messages
2 085 312
Membres
102 860
dernier inscrit
fredo67