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

Résolu/Fermé
Pepito - 9 nov. 2011 à 18:42
 pepito - 13 nov. 2011 à 20:20
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
A voir également:

3 réponses

Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 946
9 nov. 2011 à 23:48
Salut le forum

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

Mytå
1
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 747
10 nov. 2011 à 08:37
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 747
10 nov. 2011 à 09:50
Si tu as 350 lignes de données, déclare ton tableau comme ceci :
Dim Tabl(349) As String
0
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
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 302
11 nov. 2011 à 17:45
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
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