Modification d'une macro excel: cellule de destination
Résolu
azilal99
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
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.
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:
- Macro destination
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Cdg heure d'arrivée a destination shein - Forum Consommation & Internet
- Convertir chiffre en lettre excel sans macro ✓ - Forum Excel
2 réponses
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.
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.
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.
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.
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.
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.
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
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