Identifier un caractere

Résolu
ralfoose Messages postés 3 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 7 mars 2008 - 6 mars 2008 à 16:12
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008 - 7 mars 2008 à 15:06
   Bonjour à tous,

Pour faire court, mon job évolue et je dois évoluer avec :) Cela passe par la mise en place d'outils de repporting utilisant les macros Excel que je ne maîtrise pas trop. A la fac, on nous a appris le Pascal, j'ai donc des bases de prog mais ça s'arrête malheureusement là...

Je cherche à formater un tableau excel comme suite :
Certaines lignes contiennent des cellules de type "300x250 / 728x90", je voudrais avoir à la place deux lignes qui ne contiendrait plus qu'une seule info, "300x250" pour l'une et "728x90" pour l'autre.

Concrêtement, je pense utiliser une boucle sur l'ensemble des lignes de mon tableau afin de détecter ce caractère. Compter son nombre d'occurence et insérer autant de ligne que d'occurence. La premiere ligne reprendrait le texte avant le caractere et la seconde, le texte après.

Je cherche mais ne trouve pas les outils me permettant de faire cette manip de mise en forme.
Pouvez-vous m'aider à identifier le caractère ?
Apres je compte et stocke le nombre de fois où il est utilisé dans une variable qui me permettra de créer autant de lignes supplémentaires.
Et là j'ai besoin de vous à nouveau pour récupérer le contenu de part et d'autre du caractère "/", les stocker et les coller dans les lignes nouvellement crées.

Je ne suis pas sur d'être très clair donc n'hésitez pas à me contacter pour toute précision.

Merci déjà à tout ceux qui ont lu mon post jusqu'au bout, et un énorme merci  ceux qui pourront m'aider.

Bonne journée,
Cordialement.

6 réponses

_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008
7 mars 2008 à 10:27
Effectivement. Tu veux qu'à la fin ça donne çà :
Ligne1 : 300x250
Ligne2 : 728x90
Ligne3 : 300x250
Ligne4 : 728x90
(etc)

1/Tu fais une boucle sur toutes les feuilles
sub nnnnnnnnnnn()
with worksheets
' parcours de chaque feuille de ton classeur
for f=1 to .count
  ' Parcours de chaque colonne de la feuille parcourue
  for j=1 to NbColonnesFeuille
    ' Parcours de chaque ligne de la feuille parcourue
    for i=1 to NbLignesFeuille
     (ici tu traites chacune de tes cellules)
     .item(i).Cells(i,j).value 'voici pour accéder à chacune de tes cellules
     next i
  next j
next f
end with
end sub
(boucles valables sous condition que la structure de tes feuilles sont identiques : même nb lignes, même nb colonnes, sinon, faudra remplacer les for i et for j par un Tant Que avec un boolean pour sortir de la boucle, du genre si j'ai atteint la fin de la ligne/colonne finAtteinte = true)

2/Pour découper ta cellule, je te laisse chercher dans l'aide d'Excel (va chercher dans les fonctions qui traitent les chaînes de caractères). Tu auras 2 variables format1="300x250" : format2="728x90"

3/Après je suppose que tu mets tout çà dans une nouvelle feuille (dans ce cas, mets ta feuille en dernière et fait un for f=1 to .count-1
Pour accéder à ta dernière feuille : .item(.count) et ensuite tu colles format1 et format2 dans une nouvelle boucle, comme ceci

  for i=1 to 2
    if i mod 2 <>0 then
      .item(.count).cells(i,1).value = format1
   else
     .item(.count).cells(i,1).value = format2
   end if
  next i
______________________________
Enfin, tu me diras quelle note t'as mise ta prof pour ce TP/Projet LOL

_____________________________________________________________
Coder et coder sont 2 choses différentes. La 1ère consiste à arriver au but coûte que coûte. La 2nde est de trouver la solution de manière élégante.
3
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008
6 mars 2008 à 17:25
Y a plus simple qu'une macro, mais je sais pas si tu vas comprendre :
1/Sélectionne toutes les cellules concernées et fait copier-collage spécial(texte sans mise ne forme) dans Word.
2/Fait un Ctrl+H.
3/Dans la zone Rechercher, tapes : " / " (espace/espace) sans les guillemets (of course).
4/Dans la zone Remplacer par : tape ^t
5/Lance le tout et t'obients le résultat voulu ou presque.
6/Dans ton Word, Fait un Ctrl+A et colle-le dans une feuille Excel, et voilà.

3mn, il m'a fallu !

_____________________________________________________________
Coder et coder sont 2 choses différentes. La 1ère consiste à arriver au but coûte que coûte. La 2nde est de trouver la solution de manière élégante.
0
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008
6 mars 2008 à 17:27
n.b. Excel reconnaît la tabulation comme séparateur de cellules. Donc je t'ai fait remplacer tous tes " / " par des tabulations.

_____________________________________________________________
Coder et coder sont 2 choses différentes. La 1ère consiste à arriver au but coûte que coûte. La 2nde est de trouver la solution de manière élégante.
0
ralfoose Messages postés 3 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 7 mars 2008
6 mars 2008 à 18:57
Merci Fabien pour cette solution, mais ce que je cherche à faire doit être intégré dans une macro qui reformate un classeur entier. Ca doit impérativement passer par une macro ...

Domage, j'aurai aimé que ce soit aussi simple à faire que la solution suggérée :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ralfoose Messages postés 3 Date d'inscription jeudi 6 mars 2008 Statut Membre Dernière intervention 7 mars 2008
7 mars 2008 à 14:32
Merci _Fabien pour cette piste, je vais chercher dans cette direction !

C'est mon boss qui va être content :)
0
_Fabien Messages postés 119 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 28 avril 2008
7 mars 2008 à 15:06
Ah beh tu m'enverras un chèque !

_____________________________________________________________
Coder et coder sont 2 choses différentes. La 1ère consiste à arriver au but coûte que coûte. La 2nde est de trouver la solution de manière élégante.
0
Rejoignez-nous