• Initiateur de la discussion Initiateur de la discussion p.fournand
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

p.fournand

Guest
Bonsoir,
quelqu'un a t'il une idée sur le faite que cette fonction trouve la premiere occurence mais plante pour la suite ?
Function RechercheW(Plage As Range, Num, Pile, Rang, Colonne) As Integer
RechercheW = 999
With Plage
Set ou = .Find(Num, LookIn:=xlValues)
'If Not ou Is Nothing Then
firstAddress = ou.Address
Do
If Cells(ou.Row, ou.Column + 1).Value = Pile Then
If Cells(ou.Row, ou.Column + 2).Value = Rang Then
If Cells(ou.Row, ou.Column + 3).Value = Colonne Then
RechercheW = Cells(ou.Row, ou.Column + 46).Value
Exit Function
End If
End If
End If
Set ou = .FindNext(ou.Address)' A la sortie de cette ligne, OU = nothing ????
Loop While Not ou Is Nothing And ou.Address <> firstAddress
End With
Set ou = Nothing
End Function

Merci

Desole, la premier fichier n'avait pas la bonne macro !
 

Pièces jointes

Dernière modification par un modérateur:
Re : find next

Bonjour,

Une fonction ne peut pas modifier des cellules ou intervenir sur les feuilles.
Une fonction ne peut que retourner une valeur même si elle fait intervenir d'autres cellules que la cellule appelante.

[edit] le problème n'ai pas là, me suis trompé.

A+
 
Dernière modification par un modérateur:
Re : find next

Bonjour p.fournand, Habitude, dra72, Hasco, le forum.

Erreur sur la condition du While, corrigée dans le code ci-dessous.
VB:
Function RechercheW(Plage As Range, Num, Pile, Rang, Colonne) As Integer
  RechercheW = 999
  With Plage
    Set ou = .Find(Num, LookIn:=xlValues)
    'If Not ou Is Nothing Then
    firstAddress = ou.Address
        Do
            If Cells(ou.Row, ou.Column + 1).Value = Pile Then
                If Cells(ou.Row, ou.Column + 2).Value = Rang Then
                    If Cells(ou.Row, ou.Column + 3).Value = Colonne Then
                         RechercheW = Cells(ou.Row, ou.Column + 46).Value
                         Exit Function
                    End If
                 End If
            End If
            Set ou = .FindNext(ou)
            If ou Is Nothing Then Exit Do
        Loop While ou.Address <> firstAddress
    End With
  Set ou = Nothing
End Function

A+
 
Re : find next

Bonjour FredOo,

Pour la cellule "F17", ta fonction ne renvoie plus d'erreur #VALEUR! mais retourne la valeur 999. Or, pour la dite cellule, cette valeur devrait être 202 soit Range("AZ5").

En suivant le déroulement de la fonction pas à pas, on remarque, comme le précisait p.fournand, que
Code:
Set ou = .FindNext(ou.Address)
(résultat identique pour
Code:
Set ou = .FindNext(ou)
)
nous donne une "valeur" Nothing pour ou (ce qui est incorrect) puisqu'il y a 2 valeurs 20 dans "F1:F8".

D'où vient une telle bizarrerie?
 
Re : find next

Bonjour pierrejean,

J'avais effectivement pensé à cette solution mais j'avais peur (peut-être à tort) qu'elle ne ralentisse le calcul, vu que p.fournand nous précise que son tableau est très très grand.
C'est vrai que dans la fonction initiale, on retrouve 3 des 4 comparaisons effectuées.

Pour ma part, j'avais testé ceci (et bizarrement ça fonctionne):
Regarde la pièce jointe Copie de Classeur1.xlsm

Bon dimanche à tous.
 

Pièces jointes

Re : find next

Re bonjour à tous,

S'il y a beaucoup de valeur à explorer et éviter une boucle sur toutes les valeurs:

Code:
Function RechercheW(ByVal Plage As Range, Num, Pile, Rang, Colonne) As Integer
    RechercheW = 999
    Dim t As Variant: t = Plage.Value
    Dim ou As Variant
    ou = Application.Match(Num, t, 0)
    Do While Not IsError(ou)
        If Plage(ou, 2) = Pile And Plage(ou, 3) = Rang And Plage(ou, 4) = Colonne Then
            RechercheW = Plage(ou, 47)
            Exit Do
        Else
            t(ou, 1) = ""
        End If
        ou = Application.Match(Num, t, 0)
    Loop
End Function

A+
 
Dernière modification par un modérateur:
Re : find next

Re

Une proposition a base de tableaux ( n'est-ce pas recommandé pour traiter les tableaux ? )

Les tableaux peuvent etre étendus sous reserve de respecter
1) le mot Wagon en ligne 1 pour le 1er tableau (mais pas en colonne E)
2) conserver la disposition du second tableau (zone vert clair ) avec le mot wagon en colonne E
3) exclure le mot Wagon de toute autre position
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
429
Réponses
2
Affichages
396
Réponses
5
Affichages
873
Retour