Convertir puis concacétener dans un ordre précis

Bonjour à la communauté,

Coincé par excel, je me lance et fais appel à votre aide.

Je cherche à extraire des chaînes de caractères au sein de plusieurs cellules séparées par des virgules puis à les concaténer dans leur ordre respectif.

Je m’explique car c’est plus compliqué qu’il n’y paraît :

Trois cellules de départ sur une même ligne:

Guernica/ La Classe de danse/ La Vie

Picasso/ Degas/ Picasso

1937/ 1874/ 1903

Je souhaiterai arriver au résultat suivant :

Trois cellules contenant :

Guernica/ Picasso/ 1937

La Classe de danse/ Degas/ 1874

La Vie/ Picasso/ 1903

Et ce n’est pas fini… je rencontre parfois des cellules avec 3 œuvres d’art distinctes comme ici, comme des cellules qui peuvent en contenir une seule ou bien dix.

Le seul point commun est le séparateur « / » mais du coup il peut y en avoir zéro comme il peut y en avoir plusieurs.

Quelqu’un voit-il une solution pour résoudre ce problème qui me fait arracher les cheveux ?

Merci d’avance pour votre aide !

bonjour

pour que quelqu'un puisse t'aider

fred

Bonjour Fred,

Ci-joint un fichier concerné !

Merci !

11classeur1.xlsx (9.43 Ko)

Bonjour,

Mais quel résultat souhaites-tu obtenir ?

Ceci :

dknoig2

ou cela :

xzgxisp

Bonjour MFerrand,

C'est la première image qui présente le résultat escompté !

Horizontalement comme ici, ou verticalement ?

Vertical serait idéal

Fonction personnalisée (matricielle)

Function TITAUTDAT(tad As Range)
    Dim T(), tmp, i%, j%, n%
    Application.Volatile
    If tad.Cells.Count < 3 Then
        TITAUTDAT = CVErr(xlErrNA): Exit Function
    End If
    tmp = tad.Cells(1)
    If InStr(tmp, "/") Then
        tmp = Split(tmp, "/"): n = UBound(tmp): ReDim T(n)
        For i = 0 To n
            T(i) = Trim(tmp(i))
        Next i
        For j = 2 To 3
            tmp = Split(tad.Cells(j), "/")
            For i = 0 To n
                T(i) = T(i) & "/ " & Trim(tmp(i))
            Next i
        Next j
    Else
        ReDim T(0): T(0) = Trim(tmp)
        For i = 2 To 3
            tmp = Trim(tad.Cells(i))
            T(0) = T(0) & "/ " & tmp
        Next i
    End If
    TITAUTDAT = T
End Function

Sélectionner autant de cellules en ligne que de résultats attendus.

Taper la fonction : argument : la plage de 3 cellules source.

Valider par Ctrl+Maj+Entrée

Pour un résultat vertical : remplacer dans la fonction la ligne renvoyant le résultat :

    TITAUTDAT = T

par :

    TITAUTDAT = WorksheetFunction.Transpose(T)

et faire une sélection verticale (au lieu de horizontale) avant de taper la fonction.


Ok ! Tu sais comment modifier...

12yek-classeur1.xlsm (18.48 Ko)

Excellent, merci beaucoup !

Je vais essayer de personnaliser un peu car il m'arrive fréquemment d'avoir à chercher ce résultat avec des fichiers de ce type mais avec plus ou moins (souvent plus) de trois colonnes.

Serait-il possible de me montrer le même code adapté à quatre colonnes, afin que je puisse voir ce qu'il faut que je modifie en fonction du nombre de colonnes concernées ?

Merci encore pour ton aide précieuse !

Ton schéma repose sur 3 colonnes ayant chacune un type de contenu : Titres, Auteurs, Dates.

Une ou plusieurs autres colonnes casse ce schéma de correspondance colonne-type de contenu. Il s'agira alors d'un problème entièrement différent, à traiter selon ses caractéristiques...

Si tu as bien regardé, la fonction que j'ai proposé affiche une erreur (#N/A) si la plage mise en argument comporte moins de 3 cellules. Et si elle en comporte plus, seules les 3 premières sont considérées.

Cordialement.

Bonjour MFerrand.

Merci pour ces précisions.

Je comprends mieux le fonctionnement.

En revanche cela me conduit à nouveau sur la problématique initiale. J'ai transmis un exemple simple pour la compréhension mais je suis généralement confronté à des tableurs un peu plus conséquents (en général un peu moins de 300 colonnes pour environ 2500 lignes).

Je pensais à tort que la macro serait configurable, grosse erreur de débutant on dirait.

Sur un point de vue théorique, partant sur le principe d'un tableur à 300 colonnes pour environ 2500 lignes, penses-tu qu'une macro de ce type puisse fonctionner ? Sachant que toutes les colonnes ne comporteront pas de séparateurs mais cela ne semble pas problématique au vu de ta macro.

Le nombre de cellules ne sera-t'il pas une trop grande contrainte pour l'ordinateur ? Je suppose que cela prendra du temps mais ce sera toujours mieux qu'à la main.

Si cela était techniquement possible, est-ce une bonne idée de partir sur la logique de ta macro ou vaut-il mieux partir sur autre chose ?

Je te remercie encore pour ton aide.

Bonjour,

Le problème que tu as posé a été traité au moyen d'un type de procédure appelée fonction personnalisée, soit une procédure fonction conçue pour fonctionner dans les même conditions que les fonctions de feuilles de calcul d'Excel : on tape le nom de la fonction dans une (ou plusieurs si matricielle) cellule(s), on lui fournit les arguments nécessaires au calcul demandé, le plus souvent sous forme de références des cellules qui les contiennent, et elle renvoie le résultat là où on l'a placée.

Méthode souple, s'intégrant parfaitement aux modes de travail habituels avec Excel.

On peut aussi traiter une question selon une macro classique qu'on lance, à laquelle on désigne implicitement l'emplacement où elle doit opérer par la feuille active au moment du lancement, on peut lui faire déterminer en cours d'exécution son champ plus précis d'intervention, elle traite les données qui lui sont soumises, et soit modifie les données de départ au profit du résultat voulu, soit fournit un résultat à un autre emplacement.

Je pensais à tort que la macro serait configurable

Une procédure est toujours configurable... selon les cas de figure prévus lors de sa conception !

Dans le cas précédent, on fournit une plage de 3 cellules à la fonction : elle sait que la 1re contient des titres, la deuxième des auteurs, et la troisième des dates (années), et ce qu'elle doit faire avec pour fournir le résultat attendu.

Une procédure peut traiter une plage de 300 colonnes sur 2500 lignes, peu de chose en soi, si l'on est en mesure de lui dire ce qu'elle doit faire précisément, quels éléments elle doit traiter et comment, et les critères lui permettant de les identifier à coup sûr...

Dès que l'on peut indiquer une situation de départ, la situation voulue à l'arrivée, et les critères qui permettront de passer d'une situation à l'autre, la mise en place d'une procédure est toujours possible...

Cordialement.

Rechercher des sujets similaires à "convertir puis concacetener ordre precis"