Séparer sous VBA les mots d'une cellule conca

Résolu
Pepito -  
 pepito -
Bonjour,

Je désire savoir s'il y'a une formule VBA pour séparer mes cellules qui se présentent toutes cette forme Ex « E1 : oui#j'ai un chien »
Je voudrais garder le « oui » dans la case E1 et séparer le « j'ai un chien » dans la case F1. (Le dièse est le séparateur dans toutes les cellules- apres le dièse j'ai des phrases).
Afin de pouvoir insérer le tt dans une boucle en VBA.

Merci beaucoup pour votre aide précieuse!!

Cordialement

3 réponses

  1. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
     
    Salut le forum

    Données > Convertir > utliser le # comme délimlteur

    Mytå
    1
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    La solution de Myta est la bonne solution. Il n'est effectivement pas utile de passer par VBA pour si peu...
    Mais si tu tiens à intégrer ceci dans une procédure plus importante, voici une petite méthode de manipulation de caractères directement en mémoire, sans passer par la feuille (sauf pour le remplissage de la variable tableau bien sur...) :
    Exemple sur les cellules de E1 à E20 :
    Sub test()
    Dim Tabl(19) As String
    Dim AvantDiese As String, ApresDiese As String
    Dim Lig As Long
    
    For Lig = 1 To 20
        Tabl(Lig - 1) = Range("E" & Lig)
    Next
    For Lig = 1 To 20
        AvantDiese = Split(Tabl(Lig - 1), "#")(0)
        ApresDiese = Split(Tabl(Lig - 1), "#")(1)
        Debug.Print AvantDiese & " / " & ApresDiese
    Next
    End Sub
    1
    1. Pepito
       
      Bonjour à vous deux et merci pour vos réponses,
      Je sais bien que la solution de Myta est la plus simple. Toutefois je ne suis pas utilisateur final et je dispose de 40 colonnes pleines (ayant chacune la même contenance que E) et 350 lignes pour chaque.
      PS / entre chaque colonne pleine j'ai une colonne vide pour accueillir le commentaire « J'ai un chien ».
      Je vais donc essayer d'adapter ta formule Pijaku est je vous tiens au courant.
      Merci
      A +
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Si tu as 350 lignes de données, déclare ton tableau comme ceci :
      Dim Tabl(349) As String
      0
    3. pepito
       
      Salut Pijaku,
      Pijaku, j'ai essayé la formule mais aucun effet ne se produit , je pense que la fonction split ne s'effectue pas correctement. Personnellement j'ai fait quelques recherches mais je n'ai pas déterminé la source de l'erreur ( même sur un fichier test ).
      0
    4. pepito
       
      J'ai finalement réussi à adapter ta formule , ça marche du tonnerre ( je m y suis mal pris au début) il faut dire que j'ai un niveau plutot moyen en VBA: mais bon j'apprends des tonnes de gens comme vous !!
      voilà mon rendu si cela intéresse qq 'un :

      Sub séparateur()

      Dim Tabl() As String

      Dim AvantDiese, ApresDiese, cible, contenir As String
      Dim Lig, col, MaxLigne, Maxcolonne As Long

      ThisWorkbook.Worksheets("D").Activate

      ThisWorkbook.Worksheets("D").Select

      cible = "#"

      MaxLigne = ThisWorkbook.Worksheets("B").Range("F3").Value
      Maxcolonne = ThisWorkbook.Worksheets("B").Range("F2").Value
      '' mes compteurs renvoient le nombre de lignes et nombre de colonnes à traiter dans deux cellules ( procédure qui est propre à mon projet mais ça peu être une bonne idée quand on traite beaucoup de formulaires on même temps)-cela n'est nécessaire est reste à adapter selon les cas.


      For Lig = 1 To MaxLigne

      For col = 5 To Maxcolonne * 2 Step 2 'car j'ai une colonne vide entre deux colonnes pleines pour accueillir le commentaire "j'ai un chien"
      contenir = InStr(Cells(Lig, col), cible)
      If contenir<> 0 And Cells(Lig, col) <> "" Then ' recherche le caractère # s'il le trouve pas il fait rien
      AvantDiese = Split(Cells(Lig, col), "#")(0)
      ApresDiese = Split(Cells(Lig, col), "#")(1)

      Cells(Lig, col) = AvantDiese
      Cells(Lig, col + 1) = ApresDiese
      End If

      Next col

      Next Lig


      end sub
      0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Code à adapter à ton classeur

    Option Explicit
    Const nb_col As Byte = 6  ' les 3 constantes à adapter
    Const nb_lig As Integer = 25
    Const dep As String * 4 = "$A$1"
    Sub separer_diese()
    Dim col_dep As Byte, lig_dep As Byte
    Dim col As Integer, lig As Integer, cptr As Integer
    Dim T_2col As String, separe
    
    
    ReDim T_col(nb_lig, 2)
    With Sheets("essai") 'a adapter
         col_dep = .Range(dep).Column
         lig_dep = .Range(dep).Row
         Application.ScreenUpdating = False
         
         'extraction par colonne
         For col = col_dep To col_dep + nb_col - 1 Step 2
              'extaction par ligne
              cptr = 0
              For lig = lig_dep To lig_dep + nb_lig - 1
                   separe = Split(.Cells(lig, col), "#")
                   T_col(cptr, 0) = separe(0)
                   T_col(cptr, 1) = separe(1)
                   cptr = cptr + 1
              Next
               'restitution
              .Cells(lig_dep, col).Resize(nb_lig, 2) = T_col    'restitution
         Next col
         .Activate
      End With


    Maquette sur 3 colones et 25 lignes , départ tableau en A1 à a adapter
    https://www.cjoint.com/?3KlrSzBs4TW
    1
    1. pepito
       
      Merci Michel,
      Ta formule m'a été d'une grande aide, j'ai beaucoup appris entre la tienne et celle de Pijaku , j'ai adapté un peu la formule de Pijaku et elle a très bien fonctionné, merci pour ton aide précieuse et le super fichier bien soigné que tu as adressé!!
      A +
      0