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

Excel Discussion :

Imbrication de fonction dans un =SI et recherche et affichage de mots précis. [XL-2016]


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Imbrication de fonction dans un =SI et recherche et affichage de mots précis.
    Bien le bonjour!

    Je me permets d’écrire ici car je bloque complètement sur un problème.
    J’ai dans un fichier une plage de donnée de plus de 200ligne avec des cellules contenant des phrases plutôt énormes.
    Ce que je cherche à faire c’est rechercher si un mot est présent dans cette plage, et si ce mot et présents, afficher un certain endroit de la plage de donnée.
    J’ai déjà réussie à trouver comment faire pour trouver si le mot était présent mais ça fait plus de 2 jour que je bloque complétement sur comment afficher ce que je veux.
    Voici la formule que j’ai pour le moment qui permet d’afficher si le mot est là ou pas :
    =SI(NB.SI(Feuille1!A$1:Feuille1!AE$240; A3)>0;"présent";"Nop")

    Je sais qu’il est possible d’imbriquer une fonction dans celle-ci pour que a la place de « présent » elle affiche autre chose, mais mon le souci c’est que je n’arrive pas à voir quel formule je peux utiliser pour ca
    Voici à quoi ressemble les données dans lequel je cherche.

    Nom : dgfhdfghdfghj.png
Affichages : 281
Taille : 75,4 Ko
    (Oui, Oui, ceci est le contenu d'une seule cellule sur les 200+ présente )
    Pour des raisons de confidentialité j’ai dû cacher le nom des machine et l’adresse des hosts, mais dans l’idée je dois récupérer à chaque fois le nom qui est entre [ ] et qui se trouve après « Host(Hyper-V) », et je n’ai aucune idée de comment je peux faire , sachant que a chaque cellule la taille de la "phrase" change.

    Merci d’avance pour votre aide ! et s’il y a besoin d’info complémentaire je les fournirai avec grand plaisirs !

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Les fonctions de recherche d'Excel ne sont pas très douées pour les recherches de parties de texte, surtout sur une plage comptant à la fois plusieurs cellules et plusieurs colonnes.

    Je pense qu'il va falloir passer par du VBA.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    On peut essayer ça.

    Mettre respectivement en A4 et A5 les formules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =SOMME(SI(ESTERREUR(TROUVE($A$3;Feuille1!A$1:AE$240);0;LIGNE(Feuille1!A$1:AE$240))
    =SOMME(SI(ESTERREUR(TROUVE($A$3;Feuille1!A$1:AE$240);0;COLONNE(Feuille1!A$1:AE$240))
    A valider avec Ctrl+Shift+Entrée comme fonctions matricielles.

    Avec ça tu auras la ligne et la colonne où se trouve la cellule qui contient ta chaine de caractère.
    Attention : ça ne fonctionne que si cette chaine ne se trouve que dans une seule des cellules de ta matrice.

    Mets en A6 la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =TROUVE($A$3;DECALER(Feuille1!$A$1;A4-1;A5-1))
    Ca te donnera la position de la chaine dans la cellule.

    Ensuite, comme je ne sais pas exactement, où se situe le résultat souhaité par rapport à la chaine cherchée, je te laisse faire mais avec TROUVE(), DECALER(), NBCAR() et quelques opération, ça devrait être faisable.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Salut!

    Déjà merci de tes réponses!

    J'ai déjà regardé un peu le VBA, mais étant un véritable professionnel en ce qui concerne la programmation et l'algorithmie , j'ai absolument rien capté

    Et pour ce que tu a proposé ça ne marche pas^^ j'ai adapté les paramètre a ce que j'ai moi (le nom des feuille est différent et la disposition des cellules également) mais a chaque fois j'ai la même erreur "Vous avez entré un nombre trop important d'arguments pour cette fonction"

    En ce qui concerne la recherche , j'ai déjà regardé beaucoup de chose, mais j'ai rien trouvé qui puisse vraiment m'aider

    Petite précision, j'ai en gros ma liste de valeur dans la colonne A (nom de mes VM) et des rapport de sauvegardes dans la colonne G , je cherche donc a tester si le nom de la machine apparaît dans les rapport de la colonne G et si oui a récupérer une valeur précise (j'ai tout copier dans la même feuille, ça sera a mon avis plus simple a traiter)

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Dimifox Voir le message
    Et pour ce que tu a proposé ça ne marche pas^^ j'ai adapté les paramètre a ce que j'ai moi (le nom des feuille est différent et la disposition des cellules également) mais a chaque fois j'ai la même erreur "Vous avez entré un nombre trop important d'arguments pour cette fonction"
    Si tu ne dis pas quelle formule pose problème et si tu ne montres pas de quelle façon ta as transformé les formules que je t'ai proposées, il va être difficile de trouver le problème.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Si tu ne dis pas quelle formule pose problème et si tu ne montres pas de quelle façon ta as transformé les formules que je t'ai proposées, il va être difficile de trouver le problème.
    En effet c'est plutôt habile ce que tu dit la

    Voila ce que j'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    =SOMME(SI(ESTERREUR(TROUVE($A$3;BackupJobSummaryReport!A$1:BackupJobSummaryReport!AE$240);0;LIGNE(BackupJobSummaryReport!A$1:AE$240))
    =SOMME(SI(ESTERREUR(TROUVE($A$3;BackupJobSummaryReport!A$1:AE$240);0;COLONNE(BackupJobSummaryReport!A$1:AE$240))
    =TROUVE($A$3;DECALER(BackupJobSummaryReport!$A$1;A4-1;A5-1))
    en gros j'ai juste remis les bonnes valeurs de feuille et de colonnes et meme chose avec toute les formules.

    Par contre je ne peut pas les mettre dans les cellules A4 et 5 car elle contienne déjà des valeurs, cela change quelque chose si je les mets ailleurs? et surtout je comprend pas vraiment ce qu'elle font , une petite explication pourrait m'aider je pense

    Merci!

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Première chose : pour définir une zone d'un autre onglet, on ne mets qu'une seule fois la référence de l'onglet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BackupJobSummaryReport!A$1:AE$240
    Par contre je ne peut pas les mettre dans les cellules A4 et 5 car elle contienne déjà des valeurs, cela change quelque chose si je les mets ailleurs ?
    Etant donné que la troisième formule utilise les données obtenues en A4 et A5, on peut dire que ça a de l'importance.

    je comprend pas vraiment ce qu'elle font , une petite explication pourrait m'aider je pense
    La première fonction scrute l'ensemble des cellules de la zone (grace à la fonction matricielle) pour, dans chacune, chercher la chaine de caractère.
    Si elle est trouvée, elle renvoie le n° de ligne, sinon elle renvoie 0.
    A la fin on en fait une somme. Donc s'il n'y a eut qu'une cellule contenant cette chaine, il n'y a qu'un numéro de ligne renvoyé et c'est lui qui est résultat de la somme.

    La seconde fait la même chose pour le numéro de colonne.

    La troisième déplace A1 d'autant de lignes et de colonnes (moins 1) que les résultats précédents et, dans la cellule correspondante, cherche la séquence souhaitée et en donne la position.

    Donc, en gros, tu sais dans quelle cellule et où dans la cellule se trouve ta chaine.
    Le reste est juste un petit coup de STXT pour extraire la partie que tu souhaites.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour l'explication , c'est déjà un peu plus clair dans ma tete.

    Par contre j'ai encore une question, 2 fonction sont vraiment nécessaire pour scanner entièrement la matrice? car avec la fonction =SI que j'ai déjà , je fait déjà un scan de toute ma table, le seul truc qu'il me manque c'est afficher la position de la cellule a la place de "présent" du coup, donc si j’insère la 3 ème fonction dans ma fonction =SI ça devrait marcher non?

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Dimifox Voir le message
    Par contre j'ai encore une question, 2 fonction sont vraiment nécessaire pour scanner entièrement la matrice ?
    Si tu arrives à le faire en une, ne t'en prive pas. Moi je n'ai pas trouvé comment.

    car avec la fonction =SI que j'ai déjà , je fait déjà un scan de toute ma table
    Sauf que ta fonction n'a pas la capacité de repérer la cellule souhaitée.

    si j’insère la 3 ème fonction dans ma fonction =SI ça devrait marcher non?
    Essaye et tu verras.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Si tu arrives à le faire en une, ne t'en prive pas. Moi je n'ai pas trouvé comment.


    Sauf que ta fonction n'a pas la capacité de repérer la cellule souhaitée.


    Essaye et tu verras.

    Salut!

    Alors , j'ai essayer de combiner les 2 fonction sans succès

    Par contre en fouillant un peu sur internet je suis tomber sur une fonction qui peut surement marcher mais dont j'ai un peu de mal a comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ADRESSE(EQUIV(A3;BackupJobSummaryReport!A1:AE2401;0) + LIGNE(BackupJobSummaryReport!A1:AE2401) - 1;1)
    j'ai changer un peu selon les paramètre de mes feuille, mais toujours rien , et j'ai un peu de mal a comprendre ce que ça fait.

    un petit coup de main?
    ou une autre idée?

    sinon je crois que je vais devoir me tourner vers du VBA mais étant un "expert" en algo je vais avoir un peu de mal

    thanks!

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Salut!

    J'ai trouver une solution en vba qui marche bien
    (enfin on m'a aider a trouver )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function cherchehost(r, s)
    'recherche s dans la plage r et retourne le nom du host(Hyper-V) dans la ligne trouvée
    Set re = r.Find(s, lookat:=xlPart)
    If Not re Is Nothing Then
    st = re.Value
    p1 = InStr(st, "(Hyper-V) [")
    If p1 <> 0 Then
    p2 = InStr(p1, re.Value, "]")
    cherchehost = Mid(re.Value, p1 + 11, p2 - p1 - 11): Exit Function
    End If
    End If
    cherchehost = "non trouvé"
    End Function
    du coup mon problème est résolu

    Merci de ton aide !

    je te souhaite une excellente journée

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

Discussions similaires

  1. [XL-2010] Rechercher dans une colonne les cellules qui contiennent des mots précis
    Par jean-fanch dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/11/2016, 08h57
  2. [XL-2016] Imbrication de fonction dans VBA
    Par bernijojal dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 20/07/2016, 10h36
  3. [Toutes versions] A la recherche d'une fonction dans Access
    Par medibasm dans le forum VBA Access
    Réponses: 6
    Dernier message: 22/01/2011, 15h09
  4. fonction qui écrit dans une barre de recherche sur internet
    Par ubssecurities dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/08/2008, 10h36
  5. Réponses: 15
    Dernier message: 12/08/2005, 15h06

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