Perte de valeur de ma variable lors de FindNext
Bonjour,
J'ai crée dans le fichier ci-joint une macro.
J'ai une erreur 91 "Variable objet ou variable de bloc with non défini: je vois avec l'espion que la variable rngElligible n'a plus de valeur lors de Set rngElligible = .FindNext(rngElligible)
Lorsque je mets la partie de code entre les rangées d'étoiles en commentaire, le FindNext fonctionne.
Merci de votre aide.
P.
Bonjour,
Il y a une recherche qui donne l'adresse Z4. (pas à pas ... touche F8)
Puis la ligne ci-bas écrit dans Z4 ... l'information n'est plus la même ... d'où l'erreur plus loin.
Cells(rngElligible.Row, Range("N°_quartet_producteur_mois_année_client").Column).Value = Cells(rngElligible.Row, Range("max_par_producteur_par_année_par_mois").Column).Value + 1 'cette cellule prend la valeur de la même ligne et de la colonne "max des N° de factures pour ce producteur"
ric
Bonsoir ric,
je ne suis pas sur de comprendre: de quelle recherche parles-tu? Quand tu écris "Linformation n'est plus la même", je ne te suis pas!
Merci de ton aide.
P.
Bonjour,
Dis-moi si ceci donne le résultat escompté ...
Private Sub essai_boucles_imbriquées()
'deux boucles imbriquées:
'1ere boucle: je cherche les "eligible facture mensuelle directe prod-client" dans BDD VENTES dans la colonne eligibilite: quand j'en trouve un
'2eme boucle: je mets la valeur du quartet en mémoire, et lui attribue un N° de facture si n'en a pas:
'ensuite je cherche la valeur du quartet mis en mémoire ds la plage BDD VENTES colonne "Concatener_Producteur_Mois_année_client": si trouve qqchose=>attribue la valeur du N° d efacture qui avai tété mise en mémoire
Dim rngElligible As Range 'plage de recherche de l'eligibilite
Dim strPremierEligibleTrouve As String 'valeur de l'adresse de la premiere eligibilite trouvée
Dim strQuartetAtrouver As String
Dim intNumFactureProdClient As Integer
Dim rngQuartetSpotted As Range 'c'est le range trouvé dt la valeur est strQuartetTrouve
Dim strPremierQuartetSpotted As String 'premierr occurence trouvée
On Error Resume Next
With wksBddVentes.Range("Tableau2[Eligibilite FacturationDirecteProducteurClient]")
Set rngElligible = .Find("eligible facture mensuelle directe prod-client") 'on cherche lles valeurs elligibles
If Not rngElligible Is Nothing Then
strPremierEligibleTrouve = rngElligible.Address 'la premiere valeur trouvée est mise en mémoire pour limiter la boucle plus tard
Do
'********************************
'on va spotter une valeur de N°nulle, on lui attribue un N° et on complete ts les N° du même quartet
If Cells(rngElligible.Row, Range("N°_quartet_producteur_mois_année_client").Column).Value = "" Then 'si la cellule du N° de facture est vide alors
Cells(rngElligible.Row, Range("N°_quartet_producteur_mois_année_client").Column).Value = Cells(rngElligible.Row, Range("max_par_producteur_par_année_par_mois").Column).Value + 1 'cette cellule prend la valeur de la même ligne et de la colonne "max des N° de factures pour ce producteur"
'une variable prend la valeur de ce N° de facture, une autre la valeur du quartet et on cherche maintenant si le quartet auquel on vient d'attribuer
'le N° existe sur d'autres lignes, auquel cas ne N° d efacture prendra la valeur d ela variable intNumFactureProdClient
'une variable prend la valeur du N° de quartet nouvellement attribué
intNumFactureProdClient = Cells(rngElligible.Row, Range("N°_quartet_producteur_mois_année_client").Column).Value
'une autre variable prend la valeur du quartet: on recherche ce quartet, si on le trouve, son N° de afctrue sera celui d ela variable précédente
strQuartetAtrouver = Cells(rngElligible.Row, Range("Concatener_Producteur_Mois_année_client").Column).Value
'on cherche dans la colonne Concatener_Producteur_Mois_année_client
Set rngQuartetSpotted = wksBddVentes.Range("Tableau2[Concatener Producteur-Mois_année_client]").Find(strQuartetAtrouver, LookIn:=xlValues, lookAt:=xlWhole) 'on cherche strQuartetArouver soit la valeur du quartet à laquelle a ete affecté le N°de facture:le range trouvé est rngQuartetTrouve
If Not rngQuartetSpotted Is Nothing Then 'la cellule de la même ligne et de la colonne Range("N°_quartet_producteur_mois_année_client").Column prendra la valeur de la variable intNumFactureProdClient
strPremierQuartetSpotted = rngQuartetSpotted.Address
Do
Cells(rngQuartetSpotted.Row, Range("N°_quartet_producteur_mois_année_client").Column).Value = intNumFactureProdClient
Set rngQuartetSpotted = wksBddVentes.Range("Tableau2[Concatener Producteur-Mois_année_client]").FindNext(rngQuartetSpotted)
Loop While rngQuartetSpotted.Address > strPremierQuartetSpotted
End If
End If
'****************
Set rngElligible = .Find("eligible facture mensuelle directe prod-client") 'on cherche lles valeurs elligibles
Set rngElligible = .FindNext(rngElligible)
Loop While Not rngElligible Is Nothing And rngElligible.Address <> strPremierEligibleTrouve
End If
End With
End Sub
ric
Bonjour ric,
ça marche nickel.
J'ai vu la modif.
Merci beaucoup!
P.
Bonjour,
Bienvunue
ric