[Macro] Supprimer des mots dans une sélection

Résolu/Fermé
Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016 - Modifié par Altays le 30/08/2016 à 10:48
Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016 - 2 sept. 2016 à 10:40
Bonjour,

Je suis en train de m'arracher les cheveux sur une macro Excel, et j'en viens à demander votre aide.

J'ai une énorme liste de produits et je souhaite supprimer dans les cellules sélectionnées le texte figurant dans une cellule précise.
Par exemple :


J'aimerais sélectionner manuellement la plage A5 : A8 et ensuite utiliser une macro qui supprime dans la sélection les valeurs présente dans A4 et de rajouter dans la collonne B une commentaire, afin d'obtenir quelque chose comme ça :


Et ainsi de suite, sachant que la cellule de référence sera toujours celle juste en-dessus de la plage sélectionnée.

Merci d'avance,

Altays

Edit : Voici le lien vers l'exemple :
https://www.cjoint.com/c/FHEiUc4nrZU

A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
30 août 2016 à 10:34
bonjour,

Pour faciliter notre travail merci de mettre un extrait de ton classeur
pour cela
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci par un clic droit sur le lien proposé dans le message de réponse

Dans l’attente

0
Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016
30 août 2016 à 10:47
https://www.cjoint.com/c/FHEiUc4nrZU

J'espère que ça marche.
0
Utilisateur anonyme > Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016
Modifié par albkan le 30/08/2016 à 18:57
 
Bonjour Altays,

J'ai fait ton exercice uniquement par rapport à ton 1er message ; je n'ai pas
téléchargé tes 2 fichiers car j'ai trouvé que ton énoncé initial est très clair.

Je te propose ce fichier Excel 2007 : c'est une solution qui fait ce que tu veux
sans avoir à faire de sélection préalable. Ouvre le fichier et fais juste Ctrl e.

Dis-moi ce que tu en penses, et si ça te convient ; mais si tu veux absolument
faire une sélection préalable, ma solution n'ira pas. Tu verras que ça parcourt
les lignes de la dernière ligne du tableau à la ligne n° 3 (ordre impératif !).

Si ton problème est réglé, merci d'aller en haut de page, juste sous le titre
de ton 1er message, pour cliquer sur « Marquer comme résolu ».

Cordialement.  😊
 
0
Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016 > Utilisateur anonyme
31 août 2016 à 07:26
Je te remercie beaucoup mais j'ai un soucis.
Je n'arrive pas à ouvrir le lien que tu as mis, je tombe sur un message d'erreur "Not found".
Pour la sélection manuelle, je pars du principe que c'est impératif, car il y a quelques "subtilités". Certaines lignes correspondent aux critères indiqués mais il ne faut pas que la macro les prennent en compte.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
31 août 2016 à 09:38
Bonjour,

merci pour ton classeur qui m'a aidé les "subtilités" sans précisions m'inquiètent :-)
si tu le désires on pourrait vérifier une sélection valable de cellules

ci dessous code écrit rapidement valable jusqu'à 255 lignes à modifier
Option Explicit
'---------------------------------------------
Sub supprimer_mots()
Dim plage As Range, cptr As Byte, T_in, T_out
'choix de la plage à modifier
Set plage = Application.InputBox(prompt:="sélectionnez la plage à modifier", Type:=8)
'mémorisation des données dans la plage sélectionnée
T_in = plage
ReDim T_out(1 To UBound(T_in), 1 To 2)
'modification de la plage mémorisée
For cptr = 1 To UBound(T_in)
T_out(cptr, 1) = Split(T_in(cptr, 1))(2) & " " & Split(plage(cptr, 1))(3)
T_out(cptr, 2) = "sous-catégorie"
Next
'restitution
plage.Resize(UBound(T_in), 2) = T_out
Set plage = Nothing
End Sub

0
Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016
Modifié par Altays le 31/08/2016 à 11:20
Merci, mais ça marche qu'à moitié. Dans quelques cas, le code fonctionne parfaitement bien, mais dans d'autres il me supprime des mots qu'il ne devrait pas (car pas présent dans la cellule supérieure) ou n'en supprime pas.

http://www.cjoint.com/c/FHFiEQ0oDqU

(J'ai oublié de mettre "sous-catégorie" dans la colonne Commentaires du second tableau pour les produits concernés. Et j'ai déjà la macro pour changer le fond.)

Voici un exemple concret de ma liste avec ce que je désire obtenir.
Les "subtilités" dont je parle, c'est par exemple le "Chewing-gum, toutes sortes sans sucre" juste après les autres chewing-gum, des produits différents mais avec un nom très proche. J'ai peur qu'avec une automatisation complète de la macro, elle ne fasse pas la distinction, c'est pour cette raison que je souhaite sélectionner manuellement la plage de données à modifier.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016
31 août 2016 à 11:24
Désolé, mais je me suis basé sur ton exemple; ton dernier envoi ne lui correspond pas...
quand je disais que tes "subtilités" m'inquiétait...

dans tous les forums d'entraide, il est vital de donner un reflet exact de la réalité en mettant de noms bidons si besoin de confidentialité...
0
Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
1 sept. 2016 à 07:26
Je m'excuse mille fois. C'est la première fois que j'utilise un forum d'aide et je pensais que mon exemple était suffisamment précis...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
1 sept. 2016 à 08:33
Bonjour,

OK, comme c'est nouveau pour toi...

lorsque tu réalises ce genre de tableau, il est indispensable de garder la structure de tes désignations
dans "Chewing-gum sans sucre" la séparation se fait par virgule
dans "Fruchtpastillen" , les lignes 13 et 14 n'ont pas de virgule...

Dans mon code ci dessous , Vba séparant les différents mots suivant les virgules, il note aucune séparation dans ces 2 lignes et ne fait rien (ou plante)

je sais, c'est pointilleux et casse-pied!

Option Explicit
'---------------------------------------------
Sub selectionner_mots()
Dim plage As Range, cptr As Byte, T_in, T_out
'choix de la plage à modifier
Set plage = Application.InputBox(prompt:="Avec la souris, sélectionnez la plage à modifier", Type:=8)
'mémorisation des données dans la plage sélectionnée
T_in = plage
ReDim T_out(1 To UBound(T_in), 1 To 2)
'modification de la plage mémorisée
For cptr = 1 To UBound(T_in)
T_out(cptr, 1) = Split(T_in(cptr, 1), ",")(1)
T_out(cptr, 2) = "sous-catégorie"
Next
'restitution
plage.Resize(UBound(T_in), 2) = T_out
Set plage = Nothing
End Sub


En espèrant que... ;-)


0
Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016
Modifié par Altays le 1/09/2016 à 10:19
Arf, je me suis réjouit trop vite. Elle fonctionnait sur les premières lignes que j'ai essayé, mais maintenant je rencontre des problèmes.
Si j'ai bien compris le code, la macro sépare les mots en fonction des virgules et non pas de la cellule référence. Ce n'est pas possible de lui faire effacer dans les cellules sélectionnées uniquement les termes présents dans la cellule du dessus?
0
Altays Messages postés 9 Date d'inscription mardi 30 août 2016 Statut Membre Dernière intervention 9 septembre 2016
Modifié par Altays le 2/09/2016 à 11:15
Voila, avec une bonne dose d'huile de coude, j'ai réussi à faire ce que je désirais.
Bon un pro en macro me crucifierait sur place car c'est du vrai bricolage, mais ça fonctionne.

En tout cas, merci pour votre aide.
0