Modification d'une macro excel: cellule de destination

Résolu/Fermé
azilal99 Messages postés 3 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 16 décembre 2012 - 15 déc. 2012 à 17:34
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 16 déc. 2012 à 13:14
Bonjour,

J'ai hésité en choisissant le forum: je suis à la limite entre la bureautique et la programmation VBA :)
Voilà mon (petit) souci.
J'ai créé une macro qui me permet de travailler une chaîne de caractères récupérée sur le net. A savoir (en gros)
- remplacer les tirets longs par des virgules et enlever les caractères inutiles
- convertir le résultat en utilisant la virgule comme séparateur.

La macro fonctionne bien à ceci près que j'aimerais bien que le résultat de la conversion s'affiche sur la ligne où j'ai déposé ma chaîne de caractères. Malheureusement la macro m'affiche ça sur la ligne où je me trouvais quand je l'ai créée. Voilà la macro en question:


Sub mise_en_forme()
'
' mise_en_forme Macro
' Macro enregistrée le 15/12/2012 par QG
'
' Touche de raccourci du clavier: Ctrl+m
' Remplace les chaînes de caractères "pts -- " par des virgules, supprime
' les espaces et convertit la chaîne résultante en utilisant la virgule
' comme séparateur

Cells.Replace What:="pts -- ", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Cells.Replace What:=" ", Replacement:="", LookAt:=xlPart, SearchOrder:= _
xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Selection.TextToColumns Destination:=Range("B10"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False, 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), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1 _
), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array _
(20, 1), Array(21, 1), Array(22, 1)), TrailingMinusNumbers:=True
End Sub

Je suppose que le problème se situe au niveau du "Destination:=Range("B10") mais je ne sais pas par quoi remplacer ce Range pour arriver à afficher le résultat sur ligne de la cellule active.
Quelqu'un peut-il m'aider?

Merci d'avance.




A voir également:

2 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié par eriiic le 15/12/2012 à 17:48
Bonjour,

si tu veux remplacer la cellule active :
Destination:=activecell
Si tu veux une colonne précise même ligne :
Destination:=cells(activecell.row, "B")

eric

PS:
et si tu mets :
Dim c as range
For each c in selection
' tout ton code...
next c
end sub

et que tu remplaces cells. par c. dans ton code, toute les cellules sélectionnées seront traitées (plutôt que de le faire une par une)

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
1
azilal99 Messages postés 3 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 16 décembre 2012
15 déc. 2012 à 18:40
Cré vain diou, ça c'est de la réactivité! :D

Pour l'affichage ça marche. Grand merci.

Dans la réalité, je traite les lignes une par une mais je vais quand même modifier la macro pour les fois où j'accumulerai du retard ;-)

Je reviendrai après donner le résultat de ma saisie.
0
azilal99 Messages postés 3 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 16 décembre 2012
16 déc. 2012 à 13:07
J'ai essayé en vain de modifier la macro comme tu me le conseilles.
Mais je suis têtu et en regardant de plus près j'ai réalisé que la fonction "Remplacer" agit sur toute la feuille (ou le classeur, au choix) et que la boucle n'était pas utile pour cette partie.
Restait la partie conversion avec la virgule comme séparateur. J'ai finalement eu l'idée de faire un essai en sélectionnant toutes les cellules contenant les chaînes de caractères à mettre en forme avant de lancer la macro initiale ( avec la modif sur la destination quand même) et ça fonctionne.
Il me reste à comprendre pourquoi ;-) Et ceci est une autre histoire...
Encore merci.
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
16 déc. 2012 à 13:14
Pourquoi ?
Et bien parce que le remplacement se fait sur la sélection si elle fait plus d'une cellule ;-)
Si tu fais comme ça plutôt que de boucler, tu cours le risque de remplacer toutes les cellules alors que tu ne veux en traiter qu'une.
Mais si toute la feuille est à traiter tout le temps pas de soucis.

eric
0