Identification d'une suite de chiffre

Résolu
Bonjour,
Dans un fichier Excel,
comment, à partir d'une colonne "adresse", identifier la suite des 5 chiffres composant le "code postal" (celle-ci pouvant se trouver à n'importe quelle position de la cellule) et la copier dans une colonne contiguë)
Merci

13 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour
    Sans passer par VBA je ne vois qu'une solution avec manip selon cet exemple à adapter sous condition:

    1°) qu'il n'y ait pas dans vos adresses de valeurs numériques isolées supérieures au code postal, (c'est probable)
    2°) que les éléments de votre adresse soit séparés par des blancs

    Dans ce cas
    __copier la liste et coller la en A sur une autre feuille
    __sélectionnez A:A / Ruban / Données / Convertir
    __ choisir l'option " délimité" " / Suivant / Espace / Terminer
    (si les textes sont séparées par autre chose que des blancs, utilisez ce séparateur
    les composants de l'adresse se répartissent sur plusieurs colonnes

    au delà de la dernière colonne remplie,(en Z pour l'exemple) placez cette formule:

    =INDEX(A1:Y1;EQUIV(MAX(A1:Y1);A1;Y1;0)

    cette formule tirée sur la hauteur utile vous renverra le code dans la colonne Z. Il faudra ensuite faire un copier coller "valeur" depuis Z sur la colonne souhaitée pour supprimer les formules

    ... à moins bien sur qu'une bonne âme plus douée vous fasse une proposition en VBA, ce qui serait nettement plus technique!
    Crdlmnt
    1. le système me répond qu'il y a une errreur dans la formule
      =INDEX(A1:Y1;EQUIV(MAX(A1:Y1);A1;Y1;0)
  2. Merci pour votre réponse rapide
    Je vais essayer...
    Mais, n'étant pas un spécialiste d'Excel, cela risque d'être long !
    Je vous tiens au courant !
    Cordialement
    1. le système me répond qu'il y aune erreur dans la formule
      =INDEX(A1:Y1;EQUIV(MAX(A1:Y1);A1;Y1;0) ?
      1. Contributeur
        ... et il a raison, remplacez le A1;Y1 final par A1:Y1 avec : au lieu de ;
        C'est une faute de frappe de ma spécialité
        excuses
        crdlmnt
        1. Bonjour à tous,

          une proposition de formule matricielle (à valider par CTRL+MAJ+ENTER) :

          =STXT(A6;MIN(SI((SIERREUR(--STXT(A6;LIGNE(INDIRECT("$1:$"&NBCAR(A6)-4));5)<=99999;FAUX))*((SIERREUR(--STXT(A6;LIGNE(INDIRECT("$1:$"&NBCAR(A6)-4));5)<=99999;FAUX))=(SIERREUR(--STXT(A6;LIGNE(INDIRECT("$1:$"&NBCAR(A6)-4));5)>1000;FAUX)))*(ESTNUM(--STXT(A6;LIGNE(INDIRECT("$1:$"&NBCAR(A6)-4));1))=(SIERREUR(--STXT(A6;LIGNE(INDIRECT("$1:$"&NBCAR(A6)-4));5)<=99999;FAUX)))*((ESTNUM(--STXT(A6;LIGNE(INDIRECT("$1:$"&NBCAR(A6)-4))+4;1)))=(SIERREUR(--STXT(A6;LIGNE(INDIRECT("$1:$"&NBCAR(A6)-4));5)<=99999;FAUX)));LIGNE(INDIRECT("$1:$"&NBCAR(A6)-4));""));5)

          prise comme ça, ça fait peur, mais en décomposant, cette formule vérifie :

          pour chaque indice allant de 1 à nbcar(A6) - 4
          1) le caractère à cet indice est-il un chiffre
          2) le caractère à indice + 4 est-il un chiffre
          3) la chaîne de 5 caractères de indice à indice + 4 est-elle comprise entre 01000 et 99999
          4) si c'est le cas, récupérer l'indice de cette situation sinon mettre ""
          5) prendre le min de ces indices (au cas où il y en aurait plusieurs)
          6) retourner la sous-chaîne de 5 caractères à partir de cet indice_min

          remarque : si les codes postaux apparaissent toujours en 2ème occurrence (je ne vois pas trop pourquoi mais sans tes données on peut tout imaginer) remplacer le min par un petite.valeur( ,2)

          cordialement
          1. Encore merci de votre aide :
            j'ai bien réussi à créer les différentes colonnes et les codes postaux ont bien été isolés !
            Cependant quand j'entre la formule "=INDEX(A1:Y1;EQUIV(MAX(A1:Y1);A1:Y1;0) j'ai encore une erreur en retour
            Cordialement
            1. Contributeur
              Bonjour alaion

              en fait, la formule que je vous ai proposée fonctionne, j'ai testé, mais avec l'essai ci joint, je m'aperçois qu'elle est trop beaucoup trop compliquée....!!

              essayez donc simplement avec =MAX(A1:Y1), ça revient au même!

              Voyez ce que donne le principe ici (la formule est = MAX(B2:L2) pour s'ajuster aux besoins de l'exemple.

              https://www.cjoint.com/?DBehIx21Mul

              et revenez si ça ne fonctionne pas chez vous, mais dites moi quelle est l'erreur signalé par Excel et donnez quelques précisions sur la configuration de vos données (colonnes occupées après conversion/ position de la ,formule etc, formule) car vues les données que vous traitez, je pense que vous ne pouvez pas transmettre le fichier.
              Crdlmnt

              crdlmnt
              1. Encore une fois merci pour votre aide...
                Mon fichier étant effectivement un fichier réel, je suis obligé de le modifier pour le transmettre.
                Je suis indisponible pour un moment mais je vais vous adresser avant demain un fichier "modifié" (extrait de 6000 lignes Excel) et vous donner les éléments que vous demandez !
                Cordialement
                1. Contributeur
                  Si cela vous convient mieux, passer le lien en message privé en cliquant sur mon pseudo.
                  A +
                  1. Contributeur
                    Bonjour à tous,

                    en un peu plus court mais avec moins de contrôles :
                    =TEXTE(MAX(SI(ESTNUM(--STXT(A1;LIGNE(1:150);5));--STXT(A1;LIGNE(1:150);5);0));"00000")
                    formule matricielle à valider avec shift+ctrl+entrée

                    Peut suffire si il n'y a pas d'autres nombres à 4 chiffres et plus dans l'adresse.

                    eric
                    1. Je remercie tous ceux qui ont bien voulu m'aider dans la résolution de mon problème.
                      Cordialement