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 :

Fonction vs macro sur concatenation [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 306
    Par défaut Fonction vs macro sur concatenation
    Bonsoir le forum

    J’ai sur la feuille1 dans les cellules
    D105 = «*test1 mauvais*»
    D106 = «*test2 bon*»
    D107= «*test3 40% mauvais*»

    Dans une cellule E104 je concatene les cellules D105 à D107 sssi pour chacunes des cellules le test est mauvais avec les fonctions «*si*» du genre en E104. =si(droite(d105,8)=«*mauvais*»; concatener(d105 avec d106 et avec d107 si eux memes sont mauvais aussi). Cette méthode risque d’être longue et fastidieuse (d’autant que j’ai au moins 5 cellules (soit jusqu’à d109) à concatener avec chacune des états différents). Ceci me permettrait de faire en page de garde (dans la cellule b2 par exemple) un résumé du genre: «* voici le résultat: le test1; le test3 à 40% sont mauvais*»

    Par contre je souhaiterai l’ecrire en macro plutot que de voir «*apparaitre les resultats dans une cellule E104*» et je me dis qu’avec un tableau je pourrais mieux gérer la concaténation. Mais mon soucis c’est où mettre cette macro qui vient scruter les cellules ? Et comment s’active t’elle sans passer par un bouton dans la feuille1? Pour un pro ça doit être évident mais lorsqu’on ne maîtrise pas excel cela est moins...
    Dans worksheet_change, dans un module ?

    Je pourrais mettre cela dans worksheet_change mais on dirait que je reviens au même problème de ce matin sur le post worksheet_change. A savoir ralentissement si la feuille recalcule a chaque modif de quelconque cellule.

    Comment s’y prendre, ?je ne sais pas si je suis bien clair ?

    Merci par avance.

  2. #2
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 306
    Par défaut
    Je vais essayer de me créer une fonction dans un module.
    Puis cette fonction sera appelée dans la cellule b2

    La fonction aura comme arguments: la range désirée, le critére ici «*mauvais*» et puis un séparateur
    Dans cette fonction je balaierai chacune des cellules en fonctions des arguments passés et sera enregistrée dans une chaîne de caractère...

    J’essayeri demain, histoire de voir si je m’oriente vers la bonne solution...

  3. #3
    Expert éminent 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
    Par défaut
    La fonction CONCATENER() n'est conservée dans Excel que pour des raisons de compatibilité ascendante mais elle est complètement obsolète.
    Il est beaucoup plus simple d'utiliser l'opérateur &.

    C'est deux formules sont équivalentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =CONCATENER(A1;A2;A3)
    =A1&A2&A3
    CONCATENER() pourrait avoir un intérêt si elle acceptait une zone comme paramètre. Ce n'est malheureusement pas le cas et chaque élément doit être spécifié individuellement.
    C'est un défaut que pallie la fonction CONCAT mais elle n'est disponible qu'à partir d'Excel 2016.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Bonjour,
    Avec une fonction personnalisée comme par exemple celle qui suit à copier dans un module Standard
    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
    Function CONCAT_MAUVAIS(Plage As Range) As String
    Dim C As Range
    Dim A$
    '---
    For Each C In Plage
      If InStr(1, UCase(C), "MAUVAIS") > 0 Then
        A$ = A$ & C & " / "
      End If
    Next C
    If A$ <> "" Then
      A$ = Trim(A$)
      A$ = Mid(A$, 1, Len(A$) - 3)
    Else
      A$ = "Tout bon"
    End If
    CONCAT_MAUVAIS = A$
    End Function
    Fichiers attachés Fichiers attachés

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 306
    Par défaut
    Pmo2017 et Menhir,

    Merci pour vos interventions, je regarderai cela lundi prochain. J’ai fait une fonction dans un module qui s’appelle concatif(concatrange, criteriarange as variant, criteria as string et separateur as string


    Currentstring =«*»
    For i=1 to concatrange.count
    If criteriarange(i)=criteria (ici «*mauvais*»)

    Currenstring=currentstring & concarange(i) & separateur
    Next i

    Concatif=currenstring

    Sauf que je dois mettre davanatge de conditions car mes cellules on parfois l’etat «*mauvais*» parfois l’etat «*usagé*» parfois etat «*a reparer*» creer par une liste deroulante de vzlidation de donnee

    Qui est consideré comme mauvais et je dois fzire des possibilites de phrase selon les etats. Des ces dites cellules

    Je tacherai de prednre des photos pour mieux expliciter le probleme

    Merci

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    Alors peut-être comme suit
    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
    Function CONCAT_MAUVAIS(Plage As Range, Plage_criteres As Range) As String
    Dim C As Range
    Dim C2 As Range
    Dim A$
    '---
    For Each C In Plage
      For Each C2 In Plage_criteres
        If InStr(1, UCase(C), UCase(C2)) > 0 Then
          A$ = A$ & C & " / "
        End If
      Next C2
    Next C
    If A$ <> "" Then
      A$ = Trim(A$)
      A$ = Mid(A$, 1, Len(A$) - 3)
    Else
      A$ = "Tout bon"
    End If
    CONCAT_MAUVAIS = A$
    End Function
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. Macro pour concatener + RechercheV sur VBA
    Par hda1708 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/02/2017, 16h33
  2. [XL-2010] Fonction WeekDay fonctionne sur une macro, pas dans une autre
    Par eric4459 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/09/2014, 18h10
  3. PB pour Appel fonction dans DLL sur Builder3
    Par Fbartolo dans le forum C++Builder
    Réponses: 15
    Dernier message: 10/03/2005, 13h58
  4. Réponses: 10
    Dernier message: 03/02/2005, 14h09
  5. ma fonction marche plus sur le serveur...
    Par CDRIK dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/10/2004, 05h24

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