XL 2013 formule

matte

XLDnaute Junior
bonjour,
pourriez vous me dire si il est possible de prendre le contenue de ma cellule A6 qui contient ce qui est entre parenthèse (Oiseau de Paradies : 8 – 15 – 6 – 4 – 12 – 9 – 1 – 2) pour écrire le nom en cellule C6 et les n° en cellules C7,C8,C9,C10,C11,C12,C13,C14 ?
SVP y a t'il quelqu'un qui pourrai m'aider ...
merci
 

djidji59430

XLDnaute Barbatruc
Bonjour à tous,

Tu selectionnes ta cellule puis données==>Convertir et tu choisis comme séparateur les :
tu as 2 cellules
tu sélectionnes la 2ème, puis comme précédemment; mais en choisissant le - comme separateur.


Crdlmt
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour @matte, djidji,

tu as écrit : « j'ai une liste plutôt longue en colonne A6 et faire ainsi serait bien
trop long ; en plus lors de la copie en cellules, tirets et " : " doivent disparaitre »

dans c'cas, faudrait une solution VBA ; exemple pour l'énoncé initial :

VB:
Sub Essai()
  [A1].TextToColumns [A1], 1, OtherChar:=":"
  [B1].TextToColumns [B1], 1, OtherChar:="–"
End Sub
résultat :

Image.jpg

soan
 

matte

XLDnaute Junior
oui, j'avait bien compris ;d'ailleurs merci je ne savez pas, pour ne jamais l'avoir utiliser avant que c'était possible, mon but était de savoir si une formules pouvais le faire, personnellement je suis plutôt nul pour cela .
avec une formule je peu crée un tableau qui va me permettre de traiter les nombreuse feuille de mon classeur
 

soan

XLDnaute Barbatruc
Inactif
peux-tu envoyer un fichier exemple sans données confidentielles ?

si tu mets 10 ou 20 lignes, ça suffira ; mais fais comme dans ton vrai fichier :
ça doit commencer à la même ligne pour l'en-tête, idem pour les données,
et ça doit aussi être dans les même colonnes.


soan
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Matte, Djidji, Soan,
Un PJ un simple essai avec :
VB:
Sub Transfert()
Application.ScreenUpdating = False
DerLig = Range("A65500").End(xlUp).Row
Range("C6:K" & DerLig).ClearContents
For L = 6 To DerLig
    tablo = Split(Cells(L, "A"), " – ")
    tablo2 = Split(tablo(0), " : ")
    Cells(L, "C") = tablo2(0)
    Cells(L, "D") = tablo2(1)
    For i = 1 To 7
        Cells(L, i + 4) = tablo(i)
    Next i
Next L
End Sub
 

Pièces jointes

  • essaie -.xlsm
    18.9 KB · Affichages: 5

soan

XLDnaute Barbatruc
Inactif
Bonjour sylvanu, matte, le fil,

juste pour le fun, une version VBA avec TextToColumns :

VB:
Option Explicit

Sub Essai()
  Dim cel As Range, dlg&, lig&: Application.ScreenUpdating = 0
  dlg = Cells(Rows.Count, 1).End(3).Row: If dlg < 6 Then Exit Sub
  With Application
    .ScreenUpdating = 0: .DisplayAlerts = 0
    For lig = 6 To dlg
      Cells(lig, 1).TextToColumns Cells(lig, 3), 1, OtherChar:=":", _
        FieldInfo:=Array(Array(1, 1), Array(2, 1))
      Cells(lig, 4).TextToColumns Cells(lig, 4), 1, OtherChar:="–", _
        FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), _
        Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1))
    Next lig
    .DisplayAlerts = -1
  End With
End Sub
malheureusement, c'est obligatoire de mettre l'argument Field,
et avec les Array() multiples, je trouve que ça détruit l'intérêt !
la solution de sylvanu est donc meilleure que la mienne.


---------------------------------------------------------------------

peut-être qu'un intervenant sait s'il est possible de simplifier
des Array() de Array() ? si oui, merci d'indiquer comment.

nota bene : j'ai déjà essayé sans le champ Field ; ça marche
1 coup sur 2, comme si VBA oubliait comment répartir sur
les bonnes colonnes.


soan
 

Pièces jointes

  • Exo matte.xlsm
    19.5 KB · Affichages: 3

soan

XLDnaute Barbatruc
Inactif
je propose cette version avec Split() :

VB:
Option Explicit

Sub Essai()
  Dim tbl, dlg&, lig&: Application.ScreenUpdating = 0
  dlg = Cells(Rows.Count, 1).End(3).Row: If dlg < 6 Then Exit Sub
  Range("C6:K" & dlg).ClearContents
  For lig = 6 To dlg
    With Cells(lig, 1)
      tbl = Split(.Value, " : "): .Offset(, 2) = tbl(0)
      tbl = Split(tbl(1), " – "): .Offset(, 3).Resize(, 8) = tbl
    End With
  Next lig
End Sub
(noter qu'il y a un seul tableau, nommé tbl)

soan
 

Pièces jointes

  • Exo matte.xlsm
    19.1 KB · Affichages: 2

soan

XLDnaute Barbatruc
Inactif
mon code VBA précédent faisait le travail demandé sur
la feuille active ; celui-ci le fait sur la feuille "Feuil1" :


VB:
Option Explicit

Sub Essai()
  Dim tbl, dlg&, lig&: Application.ScreenUpdating = 0
  With Worksheets("Feuil1")
    dlg = .Cells(Rows.Count, 1).End(3).Row: If dlg < 6 Then Exit Sub
    .Range("C6:K" & dlg).ClearContents
    For lig = 6 To dlg
      With .Cells(lig, 1)
        tbl = Split(.Value, " : "): .Offset(, 2) = tbl(0)
        tbl = Split(tbl(1), " – "): .Offset(, 3).Resize(, 8) = tbl
      End With
    Next lig
  End With
End Sub
(remplacer "Feuil1" par le nom de feuille désiré)

soan
 

Pièces jointes

  • Exo matte.xlsm
    19.3 KB · Affichages: 3

Statistiques des forums

Discussions
312 115
Messages
2 085 443
Membres
102 889
dernier inscrit
monsef JABBOUR