Contenu cellule excel

Signaler
Messages postés
50
Date d'inscription
vendredi 31 décembre 2004
Statut
Membre
Dernière intervention
3 août 2007
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
Bonjour,

j'aurai voulu savoir s'il était possible d'avoir les champs d'une cellule excel (séparés par une entrée à la ligne) séparemment.
En fait, dans une cellule excel, j'ai le nom de plusieurs personnes séparés par une entrée à la ligne.
Dans une macro, j'ai besoin d'effectuer un traitement pour chacun de ces noms.
Je ne sais pas comment faire ?

Si vous avez une idée, merci d'avance.

12 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
52
Salut,
Regarde si Split ne pourrait pas répondre à ta question.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut,

oui, je pense que Ju a raison (salut Julien).
Je précise juste que le caractère 'délimiter' (afin de splitter) est le Chr(10) [et pas le vbNewLine ou vbCrLf] pour une cellule excel

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Salut,
Je préciserai que vbCrLf  fonctionne pour la mise en forme dans une cellule Excel
Mais pas pour le rechercher dans une cellule ou il faut effectivement utiliser Chr(10)
JML
 Partageons notre savoir et nos acquis
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
salut JML,

beh moi j'ai pas de chance sur ce genre de chose... Là je suis sur un pc (je viens de vérifier) qui atteste tes dires.
Par contre, sur mon pc, j'ai le petit carré !! Ca doit dépendre d'une config

@++

<hr width="100%" size="2" />( Nouveau forum : Exclusivement Office & VBA/STRONG>
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
salut Mortalino,
En fait j'ai eu aussi ce souci mais je ne saurai te dire quand et comment il a été résolu
j'utilise excel 2003 mais au moins 2 fois par semaine il y a des patchs qui s'installent sur le Pc !!!
Bonne journée
JML
 Partageons notre savoir et nos acquis
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Possible, vu que jai bloqué les MAJ de Microsoft ^^
A la limite, je réactiverai le temps de faire les MAJ, on verra bien si ça change quelque chose.
bonne journée également

@++





<hr width="100%" size="2" />


( Nouveau forum : Exclusivement Office & VBA
Messages postés
50
Date d'inscription
vendredi 31 décembre 2004
Statut
Membre
Dernière intervention
3 août 2007

Split renvoie un tableau donc si je récupère le résultat de la fonction Split dans un tableau, comment accéder au iè élément de ce tableau.
En fait mon problème est de récupérer dans un tableau ce que renvoie la fonction Split.
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
J'sais pas mais si le but c'est d'exploiter des listes de noms dans une cellule, peut être qu'une boucle sur le contenu de la cellule en recherchant (Chr(10) jusqu'au dernier caractère devrait faire l'affaire

Ou alors j'ai perdu le fil depuis le message initial. Si c'est le cas j'ai bien besoin de ces vacances qui commencent ce soir
JML
 Partageons notre savoir et nos acquis
Messages postés
50
Date d'inscription
vendredi 31 décembre 2004
Statut
Membre
Dernière intervention
3 août 2007

    Dim i As Integer
    Dim tabDest() As String
    tabDest = Split(Range("AL" & Selection.Row), Chr(10))
    Do While tabDest(i) <> "" ...

Voila le début de mon code.
Apparemment le compilateur n'accepte pas : il me dit que l'indice i n'appartient pas à la sélection ???
J'ai besoin d'exploiter chaque élément du tableau renvoyé par Split, à part.
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Avec Split j'sais pas mais ça ça marche
______________________
Option Explicit
Sub JML_Test()
Dim I As Integer, TabDest() As String, FinCellule As Boolean, ChaineDeDonnee, DebLectChaine
  Range("A1").Select
  FinCellule = False
  DebLectChaine = 1
  ChaineDeDonnee = ActiveCell.Value
  Do While FinCellule = False
    If InStr(DebLectChaine, ChaineDeDonnee, Chr(10)) > 0 Then
      I = I + 1
      ReDim Preserve TabDest(I)
      TabDest(I) = Mid(ChaineDeDonnee, DebLectChaine, InStr(DebLectChaine, ChaineDeDonnee, Chr(10)) - DebLectChaine)
      DebLectChaine = 1 + InStr(DebLectChaine, ChaineDeDonnee, Chr(10))
    End If
    If DebLectChaine > Len(ChaineDeDonnee) Then
      FinCellule = True
    ElseIf InStr(DebLectChaine, ChaineDeDonnee, Chr(10)) = 0 Then
      I = I + 1
      ReDim Preserve TabDest(I)
      TabDest(I) = Mid(ChaineDeDonnee, DebLectChaine, Len(ChaineDeDonnee))
      FinCellule = True
    End If
  Loop
End Sub

Maintenant si c'est pour faire un tableau au lieu d'affecter dans un tableau tu peux directement affecter dans des cellules en faisant tourner les variables qui vont bien

JML
 Partageons notre savoir et nos acquis
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Avec Split j'sais pas mais ça ça marche
______________________
Option Explicit
Sub JML_Test()
Dim I As Integer, TabDest() As String, FinCellule As Boolean, ChaineDeDonnee, DebLectChaine
  Range("A1").Select
  FinCellule = False
  DebLectChaine = 1
  ChaineDeDonnee = ActiveCell.Value
  Do While FinCellule = False
    If InStr(DebLectChaine, ChaineDeDonnee, Chr(10)) > 0 Then
      I = I + 1
      ReDim Preserve TabDest(I)
      TabDest(I) = Mid(ChaineDeDonnee, DebLectChaine, InStr(DebLectChaine, ChaineDeDonnee, Chr(10)) - DebLectChaine)
      DebLectChaine = 1 + InStr(DebLectChaine, ChaineDeDonnee, Chr(10))
    End If
    If DebLectChaine > Len(ChaineDeDonnee) Then
      FinCellule = True
    ElseIf InStr(DebLectChaine, ChaineDeDonnee, Chr(10)) = 0 Then
      I = I + 1
      ReDim Preserve TabDest(I)
      TabDest(I) = Mid(ChaineDeDonnee, DebLectChaine, Len(ChaineDeDonnee))
      FinCellule = True
    End If
  Loop
End Sub

Maintenant si c'est pour faire un tableau au lieu d'affecter dans un tableau tu peux directement affecter dans des cellules en faisant tourner les variables qui vont bien

JML
 Partageons notre savoir et nos acquis
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
Si tu te sers de Split, tu pourrais écrire quelque chose comme
For I = 0 to UBound(TabDest)
...
Next

Tu peux aussi remplacer le 0 par LBound(TabDest)

MPi