Séparer les mots des cellules

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. 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
    1. 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
      1. 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
        1. Ca ne fonctionnera pas avec Excel 2019. Une solution par macro ?

          Daniel


          1
          1. 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
            1. Bonjour,
              Ça m'a l'air bien ...je test

              0
              1. 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. 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
              2. 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
                1. 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
                  1. 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
                    1. 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
                      1. 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
                        1. impeccable !!!
                          Merci beaucoup de ta patience

                          0
                          1. Bonjour,

                            Peux-tu partager le fichier de juillet ?

                            Daniel


                            0