> Tous les forums > Forum Bureautique
 Pb vba..Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Jumpty
  Posté le 12/01/2022 @ 17:06 
Aller en bas de la page 
Astucien

Hello à tous.

(et bonne année a vous)

Dans excel

je cherche à faire un traitement sur plusieurs cellules contiguës a l'aide d'un bouton (donc VBA)

Je cherche a remplacer " - " (espace trait espace) par un simple espace " "

Exemple :

11 - 10 - 6 - 9 - 2 - 5 devient => 11 10 6 9 2 5

Tous ces chiffres sont placés dans une seule cellule et je ne peux pas faire autrement....

mais il y a plusieurs cellules du même type...

-

j'ai réussi a faire le traitement pour une cellule..

Private Sub Bt1_Click()
Dim Tmp
Tmp = ActiveCell.Value
ActiveCell.Value = Replace(Tmp, " - ", " ")
End Sub

mon petit pb est que je souhaiterais traiter plusieurs cellules contigües d'un coup..

pour cela, dans la feuille excel je sélectionne les cellules contigües (plusieurs cellules) et ensuite je souhaiterais cliquer sur le bouton qui devrait faire le traitement..

mais là...

je ne vois pas comment faire ...

comment récupérer la valeur des "ranges" sélectionnées et comment y appliquer le traitement...

-

je vois l'algorithme mais pour le traduire en vba ????

'principe
'1) on sélectionne dans la feuille active plusieurs cellules contigües

en vba

récupérer cette sélection

ensuite

'2) pour chaque cellule
'2) mettre le texte de la cellule dans une variable "Tmp"
'3) remplacer les caractères indésirables dans cette variable "Tmp"
'4) remettre cette chaine dans la cellule préalablement sélectionnée
'5) passer à la cellule suivante
'6) recommencer pour toutes les cellules préalablement sélectionnées
'6) fin pour

Je vous joins le fichier ..

https://www.cjoint.com/c/LAmqtfhaCKT

Merci de votre aide à tous.

Pas évident le VBA .....



Modifié par Jumpty le 12/01/2022 17:19
Publicité
poussebois
 Posté le 12/01/2022 à 17:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Grand Maître astucien

Bonjour ,

Pourquoi veux-tu passer par du VBA ?

Si tu sélectionnes la zone voulue, que tu tapes ctrl-f, et que tu remplaces "espace-tiret-espace" par"espace", ça ne marche pas ?

@ +

Brownie0169
 Posté le 12/01/2022 à 17:59 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Comme te le dis Poussebois, Ctrl + F est bien le plus simple...

Jumpty
 Posté le 12/01/2022 à 19:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

ce fichier est un exemple.....

il y a plein d'autres choses dans la page...

qui ne doit pas etre modifié ....

apolinaire
 Posté le 13/01/2022 à 11:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour Jumpty,

Voici un petit bout de code VBA qui te permet de récupérer une à une les adresses des cellules sélectionnées sur la feuille active.

Une fois que tu connais l'adresse de la cellule, à toi d'appliquer ton traitement. Il faudra bien sûr supprimer ou mettre en commentaire la ligne MsgBox qui n'est là que pour tester différents Range.

Private Sub CellulesDeLaSélection()
Dim columnsRange As Excel.Range
Set columnsRange = ThisWorkbook.ActiveSheet.Range(Selection.Address).Columns
Dim cell As Excel.Range
For Each cell In columnsRange.Cells
MsgBox cell.Address
'Insérer ici les lignes de code pour le traitement cellule par cellule.
'La méthode cell.Address donne l'adresse absolue de la cellule
'comme par exemple : $C$4
Next
End Sub

Jumpty
 Posté le 13/01/2022 à 13:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Re Debrief,

Ton code s'applique à toutes les cellules de la feuille entière.......

ce n'est pas exactement ce que je souhaite..

-

Voici ce que je souhaiterais :

sélectionner par exemple 2 cellules contigües ou 3 ou 4

puis appliquer le code

=> code à appliquer uniquement sur ces 2 3 ou 4 cellules et pas les autres..

-

il n'y a pas de code qui permet de récupérer la zone sélectionnée et ensuite appliquer le code ?

apolinaire
 Posté le 13/01/2022 à 14:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Jumpty a écrit :

Re Debrief,

Ton code s'applique à toutes les cellules de la feuille entière.......

ce n'est pas exactement ce que je souhaite..

-

Voici ce que je souhaiterais :

sélectionner par exemple 2 cellules contigües ou 3 ou 4

puis appliquer le code

=> code à appliquer uniquement sur ces 2 3 ou 4 cellules et pas les autres..

-

il n'y a pas de code qui permet de récupérer la zone sélectionnée et ensuite appliquer le code ?

C'est exactement ce que je t'ai proposé avec mon code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

apolinaire
 Posté le 13/01/2022 à 14:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

D'ailleurs j'ai essayé sur ton classeur et ça fonctionne très bien en fonction de la sélection que l'on a effectuée :

apolinaire
 Posté le 13/01/2022 à 14:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Autre exemple avec une sélection différente :

apolinaire
 Posté le 13/01/2022 à 15:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Un indice : il n'y a qu'une seule ligne de code à ajouter au code que j'ai proposé ici, pour que ça fonctionne. Longueur de la ligne de code : 38 caractères. Faut juste trouver les 38 bons caractères.



Modifié par apolinaire le 13/01/2022 15:02
Jumpty
 Posté le 13/01/2022 à 16:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Merci debrief,

ton code marche bien .

pour info pourquoi cette ligne "If VarType(Cellule.Value) = vbString" ?

Sub ETE_E()
Dim Cellule As Range

If TypeOf Selection Is Range Then
For Each Cellule In Selection.Cells
If VarType(Cellule.Value) = vbString Then
Cellule.Value = Replace(Cellule.Value, " - ", " ")
End If
Next Cellule
End If
End Sub

Pour info apolinaire.

quelle est cette ligne de code ?



Modifié par Jumpty le 13/01/2022 16:04
apolinaire
 Posté le 13/01/2022 à 16:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Jumpty a écrit :

Merci debrief,

J'ajouterai : Merci Apolinaire de t'être cassé la cul pour moi. (Apolinaire)

Pour info apolinaire.

quelle est cette ligne de code ?

Enfin tu daignes te manifester. Mais putain de bordel de merde, quand vous ne comprenez pas (toi et les autres), dites-le ! Il n'y a aucune honte à ne pas comprendre. Ceux qui essaient d'aider le font après un travail personnel, qui demande de l'investissement, qu'ils offrent gracieusement à ceux qui crient au secours et en retour, plus de son plus d'image parce que la gars, ben... il a pas compris.

Bon, je te donne la solution. Mais c'est la dernière fois que je me fais baiser sur ce forum. La prochaine fois, les demandeurs iront se faire voir s'ils ne se manifestent pas suite à mes réponses.

Private Sub CellulesDeLaSélection()
Dim columnsRange As Excel.Range
Set columnsRange = ThisWorkbook.ActiveSheet.Range(Selection.Address).Columns
Dim cell As Excel.Range
For Each cell In columnsRange.Cells
cell.Value = Replace(cell, " - ", " ")
Next
End Sub

NB : comme pour le code de Debrief (que j'ai testé), les sélections peuvent être disjointes.

Jumpty
 Posté le 13/01/2022 à 17:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Re, apolinaire

dsl de cette incompréhension je faisais des tests ...

merci à vous deux.

cela va m'aider à comprendre un peu mieux le vba.

car pas évident à appréhender

Merci encore de tout votre aide

PappyYves
 Posté le 14/01/2022 à 15:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Dim c As Range
For Each c in Selection
...
Next

Fonctionne sur toutes les cellules selectionnées, ligne colonne, on n'en n'a pas besoin.

Pourquoi chercher compliqué quand on peut faire simple ?

PappyYves
 Posté le 14/01/2022 à 17:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Debrief,

Ta proposition de 14h58 hier était pour moi la plus pertinente et la plus simple, dans la question posée par Jumpty, il me semblait qu'il allait travailler sur une selection de cellules, parce que s'il voulait faire son opération sur une feuille, le plus simple est la commande "Remplacer".

Je vois qu'il y a pas mal de spécialistes de VBA Excel, je reviendrai sûrement vers vous un de ces jours.

Merci à tous

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
239,99 €Solution Wifi 6 Mesh Netgear Orbi Pro Mini SXK30 (AX1800, couverture jusqu'à 375 m²) à 239,99 €
Valable jusqu'au 24 Mai

Amazon fait une belle promotion sur le Kit Wifi 6 Mesh Netgear Orbi Pro Mini SXK30B3 qui passe à 239,99  alors qu'on le trouve ailleurs à partir de 337 €. Avec Orbi, vous bénéficiez d’un Wifi étendu n’importe où chez vous sans perte de connexion. Ce Kit Orbi avec un routeur à brancher sur votre box et deux satellites vous permettra de couvrir jusqu’à 375 m² grâce à son Wifi 6 AX1800. 

Profitez d’un streaming simultané et sans interruptions de films, jeux, appels vidéo ou téléchargez/transférez des fichiers à une vitesse Wifi de 1,8 Gbit/s.

Vos équipements (jusqu'à 40) peuvent se déplacer entre les différents modules Orbi sans avoir à se reconnecter.

Toute la surface de votre maison sera couverte par un réseau ultra rapide, vous offrant ainsi des performances Wifi inégalées partout où vous allez. Vous avez besoin d’une couverture supérieure ? Il vous suffit d’ajouter un satellite Orbi pour étendre instantanément votre couverture Wifi.


> Voir l'offre
649,99 €Microsoft Surface Laptop 3 13,5 pouces tactile (Core i5, 8 Go, SSD 128 Go) à 649,99 €
Valable jusqu'au 24 Mai

Fnac fait une promotion sur le tout récent ordinateur portable Microsoft Surface Laptop 3 13 pouces tactile qui passe à 649,99 € alors qu'on le trouve ailleurs autour de 749 €. Cet ordinateur de très grande qualité dispose d'un écran tactile de 13 pouces 2736x1824 pixels, de 8 Go de RAM, d'un processeur Intel Core i5 1035G7, d'un SSD de 128 Go (qui est facilement remplaçable si besoin). Il ne pèse que 1,2 kg et offre une autonomie jusqu'à 9h. Le tout tourne sous Windows 10 Pro.


> Voir l'offre
7,74 €Clé d'acquisition vidéo HDMI WisFox à 7,74 €
Valable jusqu'au 24 Mai

Amazon fait une promotion sur la clé d’acquisition vidéo HDMI WisFox qui passe à 7,74 € grâce à un coupon de réduction à activer sur la page du produit. Cette clé d'acquisition HDMI vous permettra d’enregistrer en Full HD 1080P la sortie d'un flux HDMI d'un périphérique sur un ordinateur via un port USB. Vous pourrez ainsi par exemple capturer la vidéo d'une console, d'un smartphone, d'un magnétoscope, d'un boitier TV, d'un camescope, etc.

Fonctionne avec Windows / Android / Mac OS et la plupart des logiciels tiers tels que VCL, OBS, PotPlayer, AMCap.


> Voir l'offre

Sujets relatifs
Macro VBA pb serveur
PB SommeProd en VBA
pb macros vba/Excel97 sous Vista
excel + VBA pb de prog sur une fonction
macro VBA pb de synthaxe
pb dans formule VBA excel
Excel 2016 erreur 1004 dans vba
VBA excel
controle textbox excel vba
Bureautique Excel VBA
Plus de sujets relatifs à Pb vba..
 > Tous les forums > Forum Bureautique