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 Concatener avec conservation MEF


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Octobre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Octobre 2023
    Messages : 4
    Par défaut Fonction Concatener avec conservation MEF
    Bonjour à tous.

    Je cherche à développer une fonction excel sous VBA qui permettrait de concatener le texte de plusieurs cellules (jusque là, fonction identique à CONCATENER(args) ), mais qui conserve également la mise en forme du texte de chacune des cellules.
    J'ai réussi à créer une fonction qui concatene le texte des cellules et qui stocke les differents paramètres de MEF des cellules dans un array mais je ne sais pas si cest possible de faire en sorte que la fonction applique elle même les différentes mises en forme au résultat qu'elle retourne.
    Est-ce réalisable selon vous?

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 436
    Par défaut
    Bonjour,

    Un post qui traite de ce sujet: VBA code to concatenate and preserve formatting

    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Octobre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Octobre 2023
    Messages : 4
    Par défaut
    Le problème c'est que ce n'est pas une fonction donc les ranges sont fixes.
    Créer une procédure, je saurais faire si les adresses de cellules étaient toujours les mêmes. mais je cherche une solution dynamique

  4. #4
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,
    elle même les différentes mises en forme au résultat qu'elle retourne.
    Je crois que ce qu'il te manque c'est ThisCell objet range qui représente la cellule qui contient la fonction au moment de son évaluation.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function QuiSuisJe() As String
    QuiSuisJe = Application.ThisCell.Address
    End Function
    Sauf que sauf erreur tu ne peux pas à la volée modifier le format de la cellule (voir aussi application.caller avec la même limite). Il faudrait alimenter une pile etc. c'est chaud.

  5. #5
    Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Octobre 2023
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Octobre 2023
    Messages : 4
    Par défaut
    Oula... tu m'as perdu là

    j'vais creuser pour voir si ThisCell peut m'aider.
    En attendant voici mon ébauche de code :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
        Function CONCATENERMEF(p As Range) As String
     
        Dim NbCar As Integer
        Dim i As Integer, j As Integer
        Dim FormatF() As Variant ' Tableau pour stocker les paramètres de mise en forme
     
     
        ' Initialiser la chaîne de texte concaténée
        Concat = ""
        i = 0
     
     
     
          'On redimensionne la table en fonction du nombre de cellule
        ReDim FormatF(1 To p.Cells.Count, 1 To 7) ' 7 paramètres de mise en forme
     
         'Boucler sur chaque cellule de la plage
        For Each c In p
     
            ' la chaîne concaténée
                Concat = Concat & c.Text
     
     
                ' Copier les paramètres de mise en forme du caractère actuel dans le tableau
                 i = i + 1
                FormatF(i, 7) = Len(c.Text)
                FormatF(i, 1) = c.Font.Name
                FormatF(i, 2) = c.Font.Size
                FormatF(i, 3) = c.Font.Color
                FormatF(i, 4) = c.Font.Bold
                FormatF(i, 5) = c.Font.Italic
                FormatF(i, 6) = c.Font.Underline
     
        Next c
     
        For j = 1 To i
                Debug.Print FormatF(i, 1)
                Debug.Print FormatF(i, 2)
                Debug.Print FormatF(i, 3)
                Debug.Print FormatF(i, 4)
                Debug.Print FormatF(i, 5)
                Debug.Print FormatF(i, 6)
                Debug.Print FormatF(i, 7)
        Next j
     
        ' Retourner le résultat
        CONCATENERMEF = Concat
     
     
    End Function
    L'idée serait de pouvoir reformater le résultat "Concat" en même temps. Grâce au tableau, je récupère la longueur de chaine ainsi que les paramètres de MEF de chaque cellule
    Dans le classeur ci-joint, des exemples de type de format que je souhaiterais transmettre à la cellule concaténée
    Classeur1.xlsmClasseur1.xlsm

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    en me repenchant sur le sujet...

    C'est perdu d'avance avec une formule : on ne peut pas poser de mise en forme "caractère par caractère" sur une formule, seulement sur un texte simple.

    La solution passera forcément par un sub VBA qui va poser le résultat du concat dans la cellule et donc qui n'aura pas, lui, de problème particulier pour poser les formats en même temps.

    La difficulté (ou pas) étant alors
    1. de paramétrer au mieux le VBA pour qu'il identifie la range cible et les colonnes source, fonction de ce que tu cherches en termes de souplesse de mise en oeuvre / mise à jour
    2. de trouver un déclencheur (bouton, événement...) pour lancer ce VBA.

Discussions similaires

  1. [XL-2016] Fonction vlookup avec conservation du format
    Par PIbou72 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/11/2019, 09h47
  2. Disparition automatique d'une fonction avec conservation des données
    Par evelyno dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/11/2018, 18h42
  3. Appliquer Fonction Concatener et Fonction No.Semaine avec VBA
    Par ti_mouton dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/06/2015, 08h53
  4. probleme avec fonction concatenation de tableaux
    Par Septembre84 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 17/04/2008, 14h27
  5. Fonction If avec rs.eof problème
    Par M1000 dans le forum ASP
    Réponses: 5
    Dernier message: 24/03/2004, 17h10

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