Renvoyer contenu d'une cellule avec "alt+entrée" en + lignes

Bonjour,

Je dispose d'un tableau de relevé de non-qualité qui est alimenté quotidiennement.

Pour avoir un meilleur visuel de ces non-qualité, je dois les mettre en page sur un document reprenant les données pour chaque N° de fiches afin de l'exporter en pdf.

Problème, certaines cellules contiennent des renvois à la ligne avec "alt + entrée", ces cellules sont à éclater sur plusieurs lignes (à chaque retour) pour ne pas "flinguer" la mise en page dans un premier temps, mais aussi pour permettre de venir completer ligne à ligne la partie retouche avec le coût, l'opérateur retoucheur etc...

Ci-joint un fichier exemple

D'avance merci

44test-nc.xlsx (19.33 Ko)

Bonsoir,

Essayer :

Sub Lister()
    Dim c As Range, i%, n%, txt
    With Worksheets("DOC IMPRESSION")
        n = .UsedRange.Rows.Count
        For Each c In .Range("B8:B" & n)
            If InStr(c.Value, Chr(10)) > 0 Then
                txt = Split(c.Value, Chr(10))
                For i = 0 To UBound(txt)
                    .Range("B" & c.Row + i) = txt(i)
                Next i
            End If
        Next c
    End With
End Sub

Cordialement.

NB- Cela supprime les formules dans ces cellules, évidemment.

Bonjour et merci,

Je me doutais bien qu'il fallait passer par une macro...

Mais je pense que je l'emploie mal, car lorsque je change le n° de fiche, il n'y a plus de changement dans le doc, les lignes restent telle qu'elles...

Je n'y pipe que dalle aux macros, j'ai quand même essayé de la modifier mais là "pas marche !"

Dans l'idéal, il faudrait une RAZ du doc au moment où l'on sélectionne un nouveau constat source....

De plus, serait-ce possible d'avoir l'explication du déroulement de la macro svp, j'aimerais comprendre l'action

17test-nc-v1.xlsm (25.12 Ko)

Tu n'as pas lu mon NB !

Pour avoir la même utilisation qu'avec des formules, il faut éliminer toutes les formules et constituer à chaque fois le doc à imprimer par macro... Déclenchement automatique de la macro lors du changement du contenu de G3... (procédure évènementielle).

Ah ! Donc j'ai effacé les formules de mes zones en fluo, puis si je change le N° en G3, cela devrait remplir ces zones, alors que non !

J'ai probablement zappé une étape... mais je ne comprends pas où.

Je recherche et reviens pour résultat !

L'étape manquante est qu'il faut écrire la procédure !

Laquelle à partir de la mention en G3 ira chercher la ligne concernée de ta base, en prélèvera les données pour les placer où il faut chacune dans ton doc...

Pour pouvoir l'écrire, il faut d'abord analyser la situation, voir les adresses source et cible de chaque donnée à transférer, déceler les régularités qui permettront des itérations propres à éviter un code trop long (transfert élément par élément), trouver des regroupements permettant d'aller plus vite au but... y introduire évidemment le traitement voulu antérieurement... Cela ne se fait donc pas instantanément au pied levé !

Je ne comprends pas tes "??" ! Le boulot est à faire, tant qu'il n'est pas fait, il n'aura pas d'effet !

Je ne comprends pas, j'ai enregistré la macro : ok

Je fais "exécuter la macro" : ok le doc se remplit selon le n° de constat en G3

mais si je change le n°, les cellules reprenant les infos ref etc se remplissent correctement, mais les cellules concernées par la macro ne changent pas.

Moi je voudrais bien écrire la procédure, mais comment ? Je me sens un peu "quiche" pour le coup !

Tu ne comprends pas que pour faire fonctionner selon une autre méthode, il faut rebâtir pour que l'ensemble fonctionne autrement... !

Il y a peut-être une méthode plus bénigne : faire une macro sous forme de fonction personnalisée, que tu introduis là où tu risques d'avoir une chaîne multiligne à traiter, dans les formules concernées.

Function LISTER(txt As String)
    Dim Lst() As String, tx, i%, n%
    Application.Volatile
    tx = Split(txt & Chr(10), Chr(10))
    n = Application.Caller.Rows.Count - 1
    ReDim Lst(n, 0)
    For i = 0 To UBound(tx)
        If i <= n Then
            Lst(i, 0) = tx(i)
        Else
            Exit For
        End If
    Next i
    LISTER = Lst
End Function

Cette fonction s'utilise comme les fonctions d'Excel.

Au cas particulier, tu vas par exemple l'utiliser sur la formule en B9. Je suppose que tu as bien coloré en jaune le nombre de lignes potentiellement utilisables. Donc tu sélectionnes préalablement la plage B9:B11. La formule qui s'y trouve déjà apparaît :

=SIERREUR(RECHERCHEV($G$3;TABLEAU_NC;12;FAUX);"")

La fonction LISTER a comme argument la chaîne éventuellement à éclater, qui dans ta formule est renvoyée par RECHERCHEV.

Tu modifies la formule pour que cette chaîne soit en argument d'une fonction LISTER :

=SIERREUR(LISTER(RECHERCHEV($G$3;TABLEAU_NC;12;FAUX));"")

Ceci fait tu valides, mais LISTER étant une fonction matricielle, tu valides la formule matriciellement par la combinaison de touches Ctrl+Maj+Entrée. La formule s'encadre d'accolades et le résultat apparaît.

Tu fais la même chose partout où tu as coloré en jaune...

Ton fonctionnement reste un fonctionnement par formules. Et le doc change quand tu modifies G3.

Cordialement.

27plum39-test-nc.xlsm (26.05 Ko)

C'est tout à fait ce que je voulais, de plus avec les explications c'est top, vraiment merci.

Je vais m'appliquer à rebâtir le doc pour maîtriser.

Merci pour le temps que tu as consacré à mon problème !

Rechercher des sujets similaires à "renvoyer contenu alt entree lignes"