Séparer sous VBA les mots d'une cellule conca
Résolu/Fermé
A voir également:
- Séparer sous VBA les mots d'une cellule conca
- Aller à la ligne dans une cellule excel - Guide
- Excel cellule couleur si condition texte - Guide
- Excel compter cellule couleur sans vba - Guide
- Verrouiller une cellule excel - Guide
- Séparer pdf - Guide
3 réponses
Mytå
Messages postés
2973
Date d'inscription
mardi 20 janvier 2009
Statut
Contributeur
Dernière intervention
20 décembre 2016
951
9 nov. 2011 à 23:48
9 nov. 2011 à 23:48
Salut le forum
Données > Convertir > utliser le # comme délimlteur
Mytå
Données > Convertir > utliser le # comme délimlteur
Mytå
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
10 nov. 2011 à 08:37
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 :
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
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 +
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 +
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
10 nov. 2011 à 09:50
10 nov. 2011 à 09:50
Si tu as 350 lignes de données, déclare ton tableau comme ceci :
Dim Tabl(349) As String
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
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 311
11 nov. 2011 à 17:45
11 nov. 2011 à 17:45
Bonjour
Code à adapter à ton classeur
Maquette sur 3 colones et 25 lignes , départ tableau en A1 à a adapter
https://www.cjoint.com/?3KlrSzBs4TW
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