[Macro] Supprimer des mots dans une sélection

[Résolu/Fermé]
Signaler
Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016
-
Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016
-
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

3 réponses

Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 septembre 2021
3 221
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

Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016

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

J'espère que ça marche.
Utilisateur anonyme >
Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016

 
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.  😊
 
Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016
> Utilisateur anonyme
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.
Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 septembre 2021
3 221
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

Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016

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.
Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 septembre 2021
3 221 >
Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016

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é...
Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016
>
Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 septembre 2021

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...
Messages postés
16513
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
20 septembre 2021
3 221
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... ;-)


Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016

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?
Messages postés
9
Date d'inscription
mardi 30 août 2016
Statut
Membre
Dernière intervention
9 septembre 2016

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.