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,

    Peux-tu partager le fichier de juillet ?

    Daniel


    0
    1. impeccable !!!
      Merci beaucoup de ta patience

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

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

                      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. 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. 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