Supprimer des éléments dans une colonne, infos mélangé

Bonjour,

J'aimerais supprimer des éléments sur une colonne en particulier contenant 10 000 lignes, sur cette colonne est référencé des noms de villes mais avec un numéro code dans la même cellule, par exemple :

A1 : ABC01 - Paris
A2 : DEF02 - Marseille

Sauf que parfois, ce fameux code n'est pas avant le nom de ville mais après :

A1000 : Nantes - ZZS001
A3000 : Toulon - 001AAZ

ces codes n'ont pas une structure définit non plus, parfois il y a des lettres avec des chiffres, parfois que des chiffres.

C'est pourquoi je sollicite votre aide car je ne sais pas trop comment traiter, je souhaite garder uniquement le nom de ville et virer les autres éléments.

Merci pour votre aide.

Configuration: Windows / Firefox 62.0

7 réponses

  1. Bonjour,

    Si tous les noms des villes sont sous la forme Nom Propre (Première lettre en majuscule et le reste en minuscules, et les lettres des codes en majuscules)
    Essayez ceci en B1 et à tirer vers le bas
    =SUBSTITUE(A1;SI(OU(CODE(STXT(A1;TROUVE(" - ";A1;1)-2;1))<97;CODE(STXT(A1;TROUVE(" - ";A1;1)-2;1))>122);GAUCHE(A1;TROUVE(" - ";A1;1)+2);STXT(A1;TROUVE(" - ";A1;1);10));"")
    Cdlt
    0
    1. Bonjour Frenchie83, merci pour la réponse,

      j'avais oublié de préciser mais malheureusement, toutes les lettres (noms et les codes) sont en majuscules..
      0
  2. Bonjour

    Avec une fonction personnalisée à mettre dans un module de l'éditeur VBA
    Function decoupage(plage As Range)
    r = Application.WorksheetFunction.Find("-", plage.Value)
    If IsNumeric(Mid(plage.Value, r - 2, 1)) Then a = Right(plage.Value, Len(plage.Value) - r - 1) Else a = Left(plage.Value, r - 2)
    decoupage = a
    End Function


    S’utilise comme toute fonction selon la syntaxe =decoupage(cellule à traiter)

    Cdlmnt
    Via
    0
    1. Bonjour à tous les deux

      Peut être avec une petite macro
      https://www.cjoint.com/c/IBwoKvcqNWB

      Cdlmnt
      0
      1. Bonjour et merci,

        lorsque j'utilise cette macro, j'ai un message d'erreur indiquant "l'indice n'appartient pas à la sélection"
        0
      2. lorsque j'utilise cette macro, j'ai un message d'erreur indiquant "l'indice n'appartient pas à la sélection"
        Avec mon fichier ou avec le tien ?
        0
    2. RE,
      Toujours avec une formule en B1 à valider avec CTRL + SHIFT + ENTREE (A condition qu'il y ait au moins un chiffre dans le code)

      =SI(ESTNUM(STXT(GAUCHE(A1;TROUVE(" - ";A1;1));EQUIV(0;(ESTERREUR(STXT(GAUCHE(A1;TROUVE(" - ";A1;1));LIGNE(INDIRECT("1:"&NBCAR(GAUCHE(A1;TROUVE(" - ";A1;1)))));1)*1)*1);0);NBCAR(GAUCHE(A1;TROUVE(" - ";A1;1)))-SOMME((ESTERREUR(STXT(GAUCHE(A1;TROUVE(" - ";A1;1));LIGNE(INDIRECT("1:" & NBCAR(GAUCHE(A1;TROUVE(" - ";A1;1)))));1)*1)*1)))*1);STXT(A1;TROUVE(" - ";A1;1)+3;10);GAUCHE(A1;TROUVE(" - ";A1;1)))

      Cdlt
      0
      1. Re Frenchie,

        j'ai le message d'erreur suivant lorque j'applique ça : impossible d'entrer la formule spécifiée car elle utilise plus de niveaux d'imbrication que ne l'autorise le format de fichier actuel.
        0
    3. Voici le fichier
      https://mon-partage.fr/f/QFd44DgK/
      0
      1. Merci beaucoup de ton aide Frenchie mais ça ne fonctionne pas...

        J'ai réutilisé ton tableau avec quelques lignes de mon fichiers pour que tu puisses voir : https://mon-partage.fr/f/QA0HeQ2O/
        0
    4. Tu ne dis rien sur ma fonction personnalisée qui fonctionne très bien
      L'as tu seulement essayée ?
      0
      1. Salut via55

        un petit pb si la valeur à traiter est 02AAA - Marseille
        j'ai eu la même idée (post #4), mais j'ai testé la présence d'un numérique dans toute la première demi-chaine

        Bonne soirée
        0
      2. Bonsoir ccm

        Tu as raison ! Donc faisable en testant en premier tous les caractères de la 1ere demi chaîne
        0
    5. Bonjour,

      Correctif à la formule (dans la précédente formule je pensais qu'il y avait un espace avant et après chaque tiret)
      Nouvelle formule en B1 à valider aver CTRL + SHIFT + ENTREE et à tirer vers le bas:
      =SI(ESTNUM(STXT(GAUCHE(A1;TROUVE("-";A1;1)-1);EQUIV(0;(ESTERREUR(STXT(GAUCHE(A1;TROUVE("-";A1;1)-1);LIGNE(INDIRECT("1:"&NBCAR(GAUCHE(A1;TROUVE("-";A1;1)-1))));1)*1)*1);0);NBCAR(GAUCHE(A1;TROUVE("-";A1;1)-1))-SOMME((ESTERREUR(STXT(GAUCHE(A1;TROUVE("-";A1;1)-1);LIGNE(INDIRECT("1:" & NBCAR(GAUCHE(A1;TROUVE("-";A1;1)-1))));1)*1)*1)))*1);STXT(A1;TROUVE("-";A1;1)+1;30);GAUCHE(A1;TROUVE("-";A1;1)-1))

      De plus, il faut activer le calcul itératif dans le paramétrage des options EXCEL,
      -Cliquer sur le bouton OFFICE en haut à gauche
      -Sélectionner Formules
      -Dans le premier paragraphe "Mode de calcul", cocher Activer le calcul itéraif" et fixer le nombre maximal d'itérations à 1


      Avec le fichier:
      https://mon-partage.fr/f/XfbkVJH6/

      Cdlt
      0