Methode Find Xlformulas?

PAPA WALKER

XLDnaute Junior
Bonjour,

Je cherche à créer une boucle qui va aider à prioriser le chargement d’un coffre qui ne peut contenir qu’un certain nombre de cartons. (Fichier joint)
En complément, ce coffre peut contenir des produits en vrac….

Dans le fichier joint mon code fonctionne selon que dans la cellule D9, je mette une valeur ou une formule.
Méthode Find()
Clairement, ça marche pour une valeur mais pas une formule ?
Pourtant j’ai mis xlFormulas Dans la syntaxe et pas XLvalue ?
Si quelqu’un à la solution ou une autre méthode à me proposer ?

Merci d’avance de votre attention
 

Pièces jointes

  • chrgmt.xlsm
    18.8 KB · Affichages: 48

eriiic

XLDnaute Barbatruc
Re : Methode Find Xlformulas?

Bonjour,

Pourquoi .rows à la fin ???
Tu dois rester avec LookIn:=xlValues, c'est la valeur qui t'intéresse, pas la formule.
Ce qui le gène c'est le format de la cellule à 3 décimale.
Fonctionne :
Code:
Set C = CDES.Find(Format(MAXCDES, "0.000"), LookIn:=xlValues, LookAt:=xlWhole)

Mais comme tu es sûr que ta valeur existe tu peux récupérer sa position avec :
Code:
idx = Application.Match(MAXCDES, CDES, 0)
Plus de soucis de format.

eric
 

PAPA WALKER

XLDnaute Junior
Re : Methode Find Xlformulas?

Bonjour eric,
Merci de ton retour et pour le .row, j'avais oublié de le supprimer après avoir tester plusieurs choses en vain.
Tes deux solutions fonctionnent parfaitement, même si, comme tu le précises, l'une est plus fragile car dépendante du format des cellules :-(
J'ai donc choisi la deuxième proposée et résolu ainsi, mais il y a peut-être plus "classe"

Range("A9").Select

For I = 1 To CAPCARTON 'Boucles prévues = capacité en carton du véhicule
Set CDES = Range("B9:I9")
MAXCDES = Application.WorksheetFunction.Max(CDES)

idx = Application.Match(MAXCDES, CDES, 0)

ActiveCell.Offset(3, idx).Value = ActiveCell.Offset(3, idx).Value + 1

Ça marche mais si tu as plus propre sans faire un select à chaque fois.... je suis preneur aussi.
en attendant merci encore et je poursuis mon travail..
 

PAPA WALKER

XLDnaute Junior
Re : Methode Find Xlformulas?

Bonjour,

Ci-dessous le code complet. J'ai fait ce select pour adresser ensuite la cellule par offset (à partir de A9)
je pense qu'il serai plus juste d'utiliser la valeur retournée par idx en considérant que l'on est dans la plage CDES, mais je n'ai pas trouvé comment faire?
D'où mon Range("A9").select pour avoir le bon point de départ...

Christian

Sub CHARGEMENT2()


'Macro cherchant à optimiser le chargement d'un coffre pour faire des livraisons
'Les commandes à livrer sont conditionnées en carton de différents conditionnements
'ou en unités pour compléter le besoin

Dim CAPCARTON, CARTCHG, CAPUNITE, UNITCHG, ENTCARTON As Integer
CAPCARTON = Range("B2").Value
CARTCHG = Range("O11").Value
CAPUNITE = Range("B3").Value
UNITCHG = Range("O12").Value
ENTCARTON = Range("O8").Value
Dim MAXCDES As Double

With Worksheets("COFFRE")
'Range("C8").Select

'Boucles prévues tant que les quantités à charger sont >= à 70% d'un carton
Set CDES = Range("D8:N8")
MAXCDES = Application.WorksheetFunction.Max(CDES)
Do Until MAXCDES <= 0.7

idx = Application.Match(MAXCDES, CDES, 0)

ActiveCell.Offset(3, idx).Value = ActiveCell.Offset(3, idx).Value + 1

MAXCDES = Application.WorksheetFunction.Max(CDES)
Loop

End With


End Sub
 

eriiic

XLDnaute Barbatruc
Re : Methode Find Xlformulas?

Faire directement :
Code:
Range("C8").Offset(3, idx).Value = Range("C8").Offset(3, idx).Value + 1
dans 99% des cas les .select sont inutiles et ralentissent pour rien.

Par ailleurs tu mets With Worksheets("COFFRE") que tu n'utilises pas.
Il faut ajouter un . devant les références si tu veux t'adresser à cette feuille.
Ex :
Set CDES = .Range("D8:N8")
.Range("C8").Offset(3, idx).Value = .Range("C8").Offset(3, idx).Value + 1
etc

eric
 
Dernière édition:

Docmarti

XLDnaute Occasionnel
Re : Methode Find Xlformulas?

Bonjour PAPA WALKER, Eric, Le Forum

Une technique pour que FIND avec XlValues trouve des valeurs numériques : Changer le format des cellules pour que les valeurs numériques soient affichées entièrement.

Code:
With Worksheets("COFFRE")

    Set CDES = Range("B9:I9")

    For i = 1 To CAPCARTON 'Boucles prévues = capacité en carton du véhicule
   
    MAXCDES = Application.WorksheetFunction.Max(CDES)
     
    mem = CDES.NumberFormat
    CDES.NumberFormat = "General"
    CDES.ShrinkToFit = True

    Set c = Nothing
    
    Set c = CDES.Find(MAXCDES, LookIn:=xlValues, SearchOrder:=xlByRows, LookAt:=xlWhole)
    
    CDES.NumberFormat = mem
    CDES.ShrinkToFit = False
    
    If Not c Is Nothing Then c.Offset(3, 0).Value = c.Offset(3, 0).Value + 1
    
    Next

    Set c = Nothing
    Set CDES = Nothing

    End With


Docmarti
 

PAPA WALKER

XLDnaute Junior
Re : Methode Find Xlformulas?

Merci à vous deux pour vos réponses. Je vais re-balayer le code pour l’alléger ;-)
Dans mon classeur Set CDES = .Range("D8:N8") posait souci, mais ç an'est pas grave j'ai pu supprimer des select....

Demain si j'ai le temps, je finalise mon tableau grâce à vous...
 

Discussions similaires

Statistiques des forums

Discussions
312 387
Messages
2 087 856
Membres
103 671
dernier inscrit
rachid1983