Renvoyer a la cellule du dessous

Bonjour à tous,

suis tout nouveau sur le forum que j'ai parcouru avant de poster. Toutefois si la discussion existe je suis désolé.

Voici mon pb : je cherchais à utiliser la fonction recherchV pour avoir plusieurs résultats. Plutôt compliqué voire impossible. J'ai donc utilisé (après l'avoir créée dans VBA la fonction RechTous (je l'ai trouvée sur le Net)) :

Function RechTous(v, champRech As Range, ChampRetour As Range, separateur)

a = champRech

temp = ""

For i = 1 To champRech.Count

If a(i, 1) = v Then

temp = temp & ChampRetour(i) & separateur

End If

Next i

RechTous = Left(temp, Len(temp) - 1)

End Function

Quand je l'utilise ça donne : =RechTous(F14;CLIENTS!B2:B120;CLIENTS!A2:A120;"/")

Je recherche ce qui est en F14, elle repère la donnée sur la plage B2:B120 de la feuille clients, et elle renvoie ce qu'elle trouve dans la première colonne sur la plage A2:A120 toujours de la feuille clients.

Les résultats apparaissent dans la même cellule, séparés par le signe "/".

Je souhaiterais maintenant qu'il n'y ait qu'un seul résultat par cellule, et que les résultats apparaissent les uns en dessous des autres.

Est-ce possible à votre avis ? Connaissez-vous la solution ?

Pourriez-vous m'aider SVP ?

Jérémy.

Hello,

Peux-tu joindre un fichier ?

Bonsoir,

Tu la transformes en matricielle, comme ça par exemple:

Function RECHTOUS(v, Rech As Range, Retour As Range)
    Dim i%, n%, temp
    Application.Volatile
    With Rech
        For i = 1 To .Cells.Count
            If v = .Cells(i, 1).Value Then
                temp = temp & ";" & Retour.Cells(i, 1).Value
                n = n + 1
            End If
        Next i
    End With
    temp = n & temp
    temp = Split(temp, ";")
    RECHTOUS = Application.Transpose(temp)
End Function

Dans la foulée j'ai supprimé l'argument séparateur, inutile, VBA peut faire lui-même. Par contre je déclare toujours mes variables.

Et "Application.Volatile" c'est ce qui lui permet d'être recalculée lors du recalcul de la feuille. Pour le reste un petit ajout, je compte les valeurs trouvées. Ce qui permet un usage rationnel en 2 temps car tu ne sais pas combien de valeurs tu vas trouver.

Tu inscris ta fonction avec ses arguments, tu valides normalement, tu obtiens le nombre de valeurs trouvées. A ce moment là tu étends la sélection pour couvrir autant de cellules en plus, puis tu valides matriciellement par Ctrl+Maj+Entrée, et tes valeurs s'affichent.

Cordialement

Ferrand

SoumZoum, j'ai perdu ta fenêtre mais je la retrouverai... Je promets pas demain car j'ai des urgences à régler et il vaudrait mieux que je vienne pas traîner par ici...

Bonsoir MFerrand,

un grand merci pour ton aide.

Une fois la fonction inscrite avec ses arguments j'ai bien validé normalement. Le nombre de valeurs trouvées est indiqué. J'ai étendu la sélection pour couvrir 120 cellules en tout (mon portefeuille comporte environ 120 clients ... autant prévoir de suite).

Il y a forcément des "#N/A" car tout mon portefeuille client ne répond pas à ce critère de recherche. Aurais-tu une idée pour les faire disparaître SVP ?

Ca ne me dérange pas plus que cela, mais pour lire le résultat, c'est plus agréable.

Merci à toi.

Je tiens à te remercier également SoumZoum pour ton retour rapide.

Jérémy.

Comme je l'ai expliqué, si tu procèdes en 2 temps tu n'as pas de NA! et ça t'évite d'étendre la formule plus que nécessaire. La première cellule dans laquelle tu la mets va afficher un nombre qui indique le nombre de résultats. Tu sélectionnes autant de cellules en plus de la première et tu valides matriciellement et tu n'auras plus de NA.

Sinon, si tu tiens à l'étendre plus, tu la mets sous condition pour ne pas les afficher, comme on le fait d'habitude.

Bonjour Ferrand et ZoumSoum ou SoumZoum

J'ai pu avancer dans mon projet, un grand merci. Comme le précisait ZoumSoum, avec un fichier ce sera plus simple.

Mon objectif est de me créer un outil afin de connaître l'état d'avancement de mon travail sur mon portefeuille client (je suis comptable, je recherche donc à savoir où j'en suis sur la saisie, la TVA, etc.)

Comme vous pouvez le constater, je connais l'état des pièces reçues et saisies pour le portefeuille et pour chaque client si besoin. Pour connaître le retard pièces reçues j'ai utilisé ta fonction RECHTOUS : pas de pb. Pour le retard pièces saisies j'utilise à nouveau cette formule mais je cherche à ce que les clients apparaissant dans le retard pièces reçues ne figurent pas dans le retard pièces saisies (ben oui, si les pièces ne sont pas reçues elles ne peuvent pas être saisies. Ce qui est important ici c'est de savoir ce que je peux saisir comme c'est rentré).

aussi :

MFerrand a écrit :

Comme je l'ai expliqué, si tu procèdes en 2 temps tu n'as pas de NA! et ça t'évite d'étendre la formule plus que nécessaire. La première cellule dans laquelle tu la mets va afficher un nombre qui indique le nombre de résultats. Tu sélectionnes autant de cellules en plus de la première et tu valides matriciellement et tu n'auras plus de NA.

Sinon, si tu tiens à l'étendre plus, tu la mets sous condition pour ne pas les afficher, comme on le fait d'habitude.

je n'ai pas réussi à enlever les erreurs (j'ai essayé avec si(esterreur ...

En fait je veux étendre à l'ensemble du portefeuille car comme vous pouvez le constater, après cette recherche, il y aura des fonctions recherchH pour récupérer les données d'un autre tableau de suivi TVA. Ainsi je sais d'un coup d'oeil où j'en suis pour mes TVA selon le régime fiscal : TVA calculée, TVA déclarée, TVA vérifiée.

bon maintenant comment fait on pour joindre un fichier ???

J'ai introduit une petite modification à la fonction pour qu'elle renvoie une réponse sur la totalité de la plage de recherche, ce qui élimine l'apparition de #N/A!. Mais il ne faudra pas dépasser la longueur de la plage de recherche , au-delà l'erreur réapparaîtra.

Génial, je te remercie merci bcp MFerrand. Visuellement c'est nettement plus agréable.

Aurais tu une solution pour ne pas voir les clients du retard pièces reçues dans la liste du retard pièces saisies ?

Perso j'ai essayé :

=SI(RECHTOUS(0;SAISIE!AA3:AA121;SAISIE!A3:A120)=RECHTOUS(0;SAISIE!N3:N120;SAISIE!A3:A120);"";RECHTOUS(0;SAISIE!AA3:AA121;SAISIE!A3:A120))

Mais comme tu peux t'en douter cela ne fonctionne pas.

En te remerciant d'avance.

Jérémy.

C'est vrai qu'on ne parvient pas à traiter comme ça par des moyens classique.

J'ai donc fait une très lègère modif à la fonction, avec argument "NON" en plus.

Pour le moment tu as donc RECHTOUS qui demeure et RECHTOUSNON pour ce cas.

On aurait pu faire la même avec cette option, mais je réserve la fonction unique avec options pour les étapes suivantes :

RECHTOUSAVEC, RECHTOUSAVECNON et avec plages optionnelles multiples.

Bonne soirée

Ferrand

Génial, encore un grand merci MFerrand. Je n'y serai jamais arrivé seul.

Il ne me reste plus qu'à mettre en forme mon projet. Je devrai pouvoir m'en sortir avec les fonctions habituelles d'Excel ainsi que celles que tu m'as proposé.

Merci bcp.

Jérémy.

Oh ! Tel que parti, ça m'étonnerait que tu ne trouves pas une variante qui te manque !

Rechercher des sujets similaires à "renvoyer dessous"