IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

utilisation de Find dans une fonction perso [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    Par défaut utilisation de Find dans une fonction perso
    Bonjour, tout le monde.

    J’essaye de me construire en VBA Excel (2010) une fonction personnalisée qui me permette de découvrir s’il existe dans une feuille de mon fichier autre que la courante, une ligne contenant deux ou trois cellules identiques à celles que j’indique en argument.
    C’est tordu, comme explication, je vais faire un exemple. Liste de mouvements bancaire dans la feuille ‘2012’! Dans la feuille courante, par contre, liste de mouvement provenant d’autre source, et contenant peut-être des différences avec l’autre liste. Champs occupés : 4 (date, description, montant débit, montant crédit) ; dans une colonne un peu plus loin, je mets ma fonction, qui a une syntaxe du genre =MaCompDB(feuille; cellule1; cellule2; cellule3). La feuille que j’indique dans la fonction est celle dans laquelle il faut chercher le « doublon », tandis que les cellules sont celles de la feuille courante, dont je cherche les valeurs.

    En d’autres termes:

    col A B C D E
    ligne

    5 5/6/2012 chèque untel 123,00 = MaCompDB (‘2012!’;A5;B5;C5)

    La fonction doit répondre à la question : combien de cellules trouves-tu dans l’autre feuille et sur une même ligne, contenant les mêmes valeurs que les cellules que je t’indique ?

    Or, depuis que j’ai découvert que la commande Find restitue une adresse, c’est tout un monde qui s’est ouvert à moi ! Du coup, je peux en extraire un numéro de ligne et de colonne…
    J'ai beaucoup cherché dans les forums. Parmi les différentes sources, celle-ci me semble excellente : www.cpearson.com/excel/rangefind.htm. Dommage que je comprenne si peu l’anglais !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Function MaCompDB (Fgl As Worksheet, cella1 As Range, cella2 As Range, Optional cella3 As Range)
    MaCompDB = 0
    Dim risp As Range, c1 As String
    c1 = cella1.Column 'résulte sous forme de numéro
    v1 = cella1.Value
    c2 = cella2.Column
    v2 = cella2.Value
    If Not cella3 Is Nothing Then
        c3 = cella3.Column
        v3 = cella3.Value
    End If
    With Fgl.UsedRange
        Set risp = .Find(v1, LookIn:=xlValues) 'Comment limiter cette recherche à la colonne indiquée dans la variable c1 ?
        Fadd = risp.Address
        If Not risp Is Nothing Then
            r = risp.Row
            MaCompDB = MaCompDB + 1
        Else
            Exit Function
        End If
    If Cells(r, c2).Value = v2 Then MaCompDB = MaCompDB + 1
    If Not cella3 Is Nothing Then
        If Cells(r, c3).Value = v3 Then MioConfrDB = MioConfrDB + 1
    End If
    End With
    End Function
    Bien évidemment, ça ne marche pas! (Pendant l'écriture de la fonction dans la cellule, il me dit que la syntaxe n'est pas bonne, comme si j'oubliais une parenthèse).
    Quelqu’un peut m’aider ?
    Merci, à bientôt !

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    J'utiliserai SOMMEPROD (ou bien NB.SI.ENS pour excel 2007 et ultérieur)

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne peux qu'abonder dans le même sens que Mercatog, j'utiliserais la formule SOMMEPROD.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    Par défaut
    Merci Mercatog et Corona de vos réponses. Il existe donc déjà une fonction qui peut faire cela.
    J'ai tout de même encore un souci: mon Excel ne parle plus français!
    Je vous assure que je n'ai pas trop bu, c'est vraiment le cas: j'avais un Excel en français, menus en français, formules en français et tout jusqu'à il y a 6 mois; mais ensuite nous avons changé d'ordinateurs au bureau, maintenant tout est en italien. Je connais par coeur le nom de certaines formules dans les deux langues, mais celle-ci c'est la première fois que j'en entends parler; j'ai cherché dans la liste et je ne trouve pas un équivalent.
    Sauriez-vous me dire comment s'appelle en anglais cette fonction Sommeprod, de façon que je puisse la chercher sur un tableau d'équivalences?
    Merci encore.

  5. #5
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    =SUMPRODUCT( .. ) =MATR.SOMMA.PRODOTTO( .. )

    Cordialement.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations forums :
    Inscription : Juillet 2009
    Messages : 79
    Par défaut
    Effectivement, gFZT82, merci. D'ailleurs, SUMPRODUCT c'était déjà de l'anglais, je l'ai réalisé plus tard.
    Seulement, cette fonction ne fait pas du tout ce dont j'ai besoin, puisqu'elle traite seulement les données numériques. Ou alors il y a une façon particulière de l'utiliser...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utiliser un string dans une fonction de setInterval
    Par strat0 dans le forum Général JavaScript
    Réponses: 17
    Dernier message: 02/08/2007, 17h56
  2. [SQL SERVER 2005] Utilisation de Exec dans une fonction ?
    Par Dadou74 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/09/2006, 22h09
  3. Utilisation de fstream dans une fonction
    Par Silverstone dans le forum SL & STL
    Réponses: 7
    Dernier message: 22/07/2006, 09h55
  4. utilisation de getdate() dans une fonction ?
    Par devdev dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/03/2005, 17h40
  5. Utilisation de Getdate dans une fonction
    Par BaronSamdi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/11/2004, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo