Séparer les mots des cellules

Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   -  
danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,
Je souhaiterais séparer les mots d'une cellule en plusieurs cellules.

Marées


Windows / Chrome 148.0.0.0

15 réponses

  1. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Avec excel 2024 ou Excel 365, une seule formule :

    =EXCLURE(REDUCE("";SIERREUR(SUBSTITUE(TEXTE.AVANT(D2:D205;" ";3);"Marée ";"");D2:D205);LAMBDA(x;y;SI(OU(NBCAR(y)<>NBCAR(SUBSTITUE(y;"basse";""));NBCAR(y)<>NBCAR(SUBSTITUE(y;"haute";"")));ASSEMB.V(x;NOMPROPRE(FRACTIONNER.TEXTE(y;;" ")));ASSEMB.V(x;y))));1)

    Daniel 


    1
  2. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287
     

    Ca ne fonctionnera pas avec Excel 2019. Une solution par macro ?

    Daniel


    1
  3. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287
     

    Essaie celle-ci (résultat à partir de I3) :

    Sub test()
      Dim Tbl(), C As Range, I As Long, Tabl
      I = -1
      For Each C In Range("D2", Cells(Rows.Count, 4).End(xlUp))
        If IsNumeric(Right(C, 1)) Then
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = C
        Else
          Tabl = Split(C, " ")
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = Application.Proper(Tabl(1))
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = Tabl(2)
        End If
      Next C
      Range("I3").Resize(UBound(Tbl)) = Application.Transpose(Tbl)
    End Sub
    

    Daniel


    1
  4. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Essaie :

    Sub test()
      Dim Tbl(), C As Range, I As Long, Tabl
      I = -1
      For Each C In Range("T5", Cells(Rows.Count, "T").End(xlUp))
        If IsNumeric(Right(C, 1)) Then
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = C
        Else
          Tabl = Split(C, " ")
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = Application.Proper(Tabl(1))
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = Tabl(2)
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = Tabl(3)
        End If
      Next C
      Range("S5").Resize(UBound(Tbl)) = Application.Transpose(Tbl)
    End Sub
    

    Daniel


    1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287
     

    Voici la macro commentée :

    Sub test()
      Dim Tbl(), C As Range, I As Long, Tabl
      I = -1
      'Boucle sur les cellules de la colonne T
      For Each C In Range("T5", Cells(Rows.Count, "T").End(xlUp))
        'si la position de droite est numérique
        '(cas de la date ou du coefficient de marée)
        If IsNumeric(Right(C, 1)) Then
          'ajout du contenu de la cellule dans la table
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = C
        Else
          'sinon, on découpe le contenu de la cellule là où il y a un  espace
          'on ajoute une à une les parties obtenues sauf la première (tbl(0) = "Marée")
          Tabl = Split(C, " ")
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = Application.Proper(Tabl(1))
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = Tabl(2)
          I = I + 1
          ReDim Preserve Tbl(I)
          Tbl(I) = Tabl(3)
        End If
      Next C
      'Ecriture de la table sur la feuille
      'le fait d'utiliser une table plutôt que d'écrire directement sur la feuille
      'fait gagner du temps
      Range("S5").Resize(UBound(Tbl)) = Application.Transpose(Tbl)
    End Sub
    

    La macro se base sur l'utilisation de la commande "Split" pour découper le contenu de la cellule en plusieurs segments :

    La ligne :

    Tabl = Split("Marée basse 00h00 1.72m", " ")

    donne :

    Daniel


    1
  7. brucine Messages postés 24849 Date d'inscription   Statut Membre Dernière intervention   4 170
     

    Bonjour,

    Le souci est qu'on ne sait pas d'où sont extraites les valeurs de la colonne D.

    à partir de ces données brutes, modifier les intitulés colonne A en conséquence, entrer les formules des colonnes E2 à E8, sélectionner ce bloc de 7 cellules et le copier autant de fois que nécessaire vers le bas.

    https://cijoint.org/r/MBbCBfFb#VHSvNLBTo1DHOEwELntqIjQ4zPHifnksnCxyxBTDTaA=

    0
  8. Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   25
     

    Bonjour
    Les valeurs de la colonne D sont extraites du site suivant:
    Heures des marées
    il faut mettre la page du site la plus petite possible.
    Je sélectionne de Lundi 1 à 69 du Mardi 30.
    Je copie et je mets ça dans la cellule D1
     

    0
  9. Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   25
     

    je mets cette formule dans quelle cellule ?
    J'ai Excel 2019.

    Sinon, j'ai cette macro pour 1 jour (macro de novice)

    Sub Marées()
    '
    ' Marées Macro
    '
    
    '
        Range("H1").Select
        Selection.Copy
        Range("L1").Select
        ActiveSheet.Paste
        Range("H2").Select
        Application.CutCopyMode = False
        Selection.TextToColumns Destination:=Range("H2"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 1), Array(5, 1), Array(11, 1), Array(17, 1)), _
            TrailingMinusNumbers:=True
        Range("H3").Select
        Selection.TextToColumns Destination:=Range("H3"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 1), Array(5, 1), Array(11, 1), Array(17, 1)), _
            TrailingMinusNumbers:=True
        Range("I2:K2").Select
        Selection.Copy
        Range("L2").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
        Range("I3:K3").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("L5").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
        Range("H4").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("L8").Select
        ActiveSheet.Paste
        Range("H5").Select
        Application.CutCopyMode = False
        Selection.TextToColumns Destination:=Range("H5"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 1), Array(5, 1), Array(11, 1), Array(17, 1)), _
            TrailingMinusNumbers:=True
        Range("H6").Select
        Selection.TextToColumns Destination:=Range("H6"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 1), Array(5, 1), Array(11, 1), Array(17, 1)), _
            TrailingMinusNumbers:=True
        Range("I5:K5").Select
        Selection.Copy
        Range("L9").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
        Range("I6:K6").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("L12").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=True
        Range("H7").Select
        Application.CutCopyMode = False
        Selection.Copy
        Range("L15").Select
        ActiveSheet.Paste
    End Sub
    
    0
  10. Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   25
     

    Bonjour,
    Ça m'a l'air bien ...je test

    0
  11. Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   25
     

    J'ai testé...impeccable...mais....

    Pour mettre la macro dans mon fichier
    il faut que le résultat soit en S5 à place de I3 (ça fonctionne)
    Mettre la liste de départ en T5 au lieu de D2, et là, ça ne fonctionne plus.
    Que faut-il modifier ?

    0
    1. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287
       

      Bonjour,

      Essaie :

      Sub test()
        Dim Tbl(), C As Range, I As Long, Tabl
        I = -1
        For Each C In Range("T5", Cells(Rows.Count, "T").End(xlUp))
          If IsNumeric(Right(C, 1)) Then
            I = I + 1
            ReDim Preserve Tbl(I)
            Tbl(I) = C
          Else
            Tabl = Split(C, " ")
            I = I + 1
            ReDim Preserve Tbl(I)
            Tbl(I) = Application.Proper(Tabl(1))
            I = I + 1
            ReDim Preserve Tbl(I)
            Tbl(I) = Tabl(2)
          End If
        Next C
        Range("S5").Resize(UBound(Tbl)) = Application.Transpose(Tbl)
      End Sub
      

      Il faut indiquer "T" ou 20 dans :

      For Each C In Range("T5", Cells(Rows.Count, "T").End(xlUp))

      au lieu de "D" (ou 4)

      Daniel

      1
  12. Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   25
     

    Merci
    Impeccable !!!!!
    J'aurais pu aller plus loin, je n'ai pas vu de "T" ailleurs.
    Je n'ai pas fait le rapprochement que le chiffre 4 correspondait à la colonne "T".
    Merci encore

    0
  13. Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   25
     

    Bonjour Daniel
    Pas de problème, ça fonctionne, mais.....
    J'ai oublié 4 mots dans le résultat que je voulais. :-((
    J'ai essayé de voir la macro pas à pas, mais ça ne fonctionne pas, je ne vois rien bouger.
    Je t'envoie un nouveau fichier (j'espère que ça va être possible de modifier ?)

    MaréesTest-7Juin

    0
  14. Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   25
     

    Bonjour,
    Impeccable !!!
    Pourtant j'ai tout essayé, à chaque fois j'avais des espaces....
    Questions: Peux tu m'expliquer la macro ?

    Dim Tbl(), C As Range, I As Long, Tabl


     

    0
  15. Guy72 Messages postés 983 Date d'inscription   Statut Membre Dernière intervention   25
     

    impeccable !!!
    Merci beaucoup de ta patience

    0
  16. danielc0 Messages postés 2191 Date d'inscription   Statut Membre Dernière intervention   287
     

    Bonjour,

    Peux-tu partager le fichier de juillet ?

    Daniel


    0