"défusionner" les éléments d'1 cellule e

Bonjour,

J'ai un gros fichier excel d'adresses de contacts répertoriés de la manière suivante : colonne titre colonne nom colonne prénom et la colonne adresse comporte tous les éléments (CP, Ville).
Je souhaite dissocier les éléments CP Ville pour les mettre automatiquement dans une colonne séparée du reste de l'adresse.
à part le faire manuellement (et cela va me prendre des heures), je suis certaine qu'il doit exister une formule bien spécifique sur excel pour réaliser cette opération de façon automatique et plus rapide!
quelqu'un d'expert sur excel peut-il m'aider? en plus c'est urgent c'est pour le boulot!!
merci par avance pour votre aide - précieuse :-)
Configuration: Mac OS X - Excel 2004
Safari 525.18

8 réponses

  1. Contributeur
    ... sauf si en A2 au lieu de DUPONT JACQUES on avait LE METAYER DE GAYAC CHARLES ANTOINE !

    Au post 3 il est précisé "je souhaite dissocier les éléments d'une cellule en trois colonnes distinctes : composants de l'adresse, cp, et ville à partir d'une cellule ou j'ai ces trois éléments réunis - avec de surcroît - un retour à la ligne".

    Mais à part ça, ton explication est claire et efficace ...
    1. Ptit exemple :

      En a1 saisir NOM
      En B1 saisir PRENOM

      En A2 saisir DUPONT JACQUES
      En A3 saisir DURAND MARCEL

      Le but étant de séparer automatiquement les noms et prénoms de telle sorte que les prénoms s'inscrivent dans les cellules B2 et B3.

      1) Sélectionner A2 et A3
      2) Dans le menu cliquer sur Données/Convertir
      3) Choisir "Délimité" puis "Suivant"
      4) Comme les nom et prénom sont séparés par des espaces, décocher dans séparateurs "tabulations" et cocher "espace"
      5) Cliquer sur suivant
      6) Indiquer dans le format des données qu'il s'agit de texte en cochant la case correspondante
      7) Et enfin "Terminé"

      Normalement... C'est bon...
      1. Euh... Et avec l'option "convertir" (données/convertir) simplement ça ne fonctionne pas ?
        1. Contributeur
          Depuis juillet 2008, une solution a certainement été trouvée ...
          Mais si tu as une proposition avec "convertir", donne-la ; ça pourrait servir à quelqu'un d'autre !
      2. Contributeur
        et une autre qui te retourne la partie de l'adresse qui t'interesse :
        Function adr(cel As Range, partie As Integer)
            Dim i As Long, j As Long, rep As String
            For i = 1 To Len(cel)
                If Mid(cel, i, 1) >= "0" And Mid(cel, i, 1) <= 9 Then
                    j = j + 1
                Else
                    j = 0
                End If
                If j = 5 Then Exit For
            Next i
            If j <> 5 Then i = 4
            i = i - 4
            If i = 0 Then
                rep = cel.Value
            Else
                Select Case partie
                Case 1
                    rep = Left(cel, i - 1)
                Case 2
                    rep = Mid(cel, i, 5)
                Case 3
                    rep = Mid(cel, i + 6)
                End Select
            End If
            adr = rep
        End Function

        n° et voie : =adr(A1,1)
        Code postal : =adr(A1,2)
        Commune : =adr(A1,3)

        Si pas de code postal valide l'adresse est retournée intégralement dans les 3 cas.
        eric
        1. Contributeur
          Bonjour,

          Voici une fonction personnalisée à coller dans un module qui te donne la position de la 1ère chaine de 5 chiffres consécutifs (ou 0 si inexistante) :
          Function posCP(cel As Range)
              Dim i As Long, j As Long
              For i = 1 To Len(cel)
                  If Mid(cel, i, 1) >= "0" And Mid(cel, i, 1) <= 9 Then
                      j = j + 1
                  Else
                      j = 0
                  End If
                  If j = 5 Then Exit For
              Next i
              If j <> 5 Then i = 4
              posCP = i - 4
          End Function


          A partir de là tu peux extraire tes 3 éléments de l'adresse :
          n° et voie : =GAUCHE(A1;posCP(A1)-1)
          Code postal : =STXT(A1;posCP(A1);5)
          Commune : =STXT(A1;posCP(A1)+6;50)

          eric
          1. Contributeur
            Si chaque cellule de la colonne D:D "CP+Adresse" est composée de 5 caractères pour le code postal et un espace avant l'adresse, c'est que celle-ci commence au 7ème rang.
            Par conséquent la formule en colonne E:E sera =GAUCHE(D:D;5)
            et en colonne F:F ce sera =STXT(D:D;7;99)
            1. MERCI MERCI beaucoup pour votre aide et pour la formule elle fonctionne super bien mais simplement pour dissocier le code postal et la ville situés dans une même cellule initialement... je garde cependant cette formule en mémoire, bien utiles pour modifier d'autres fichiers....

              Je me suis peut-être mal exprimée mais je souhaite dissocier les éléments d'une cellule en trois colonnes distinctes : composants de l'adresse, cp, et ville à partir d'une cellule ou j'ai ces trois éléments réunis - avec de surcroît - un retour à la ligne!

              c'est peut-être trop complexe pour que le logiciel arrive à comprendre cette requête, mais on ne sait jamais je relance la recherche !!! après tout ces logiciels ne sont utilisés dans la vie quotidienne qu'à un millième de leurs capacités!!!

              merci en tous cas, et bonne retraite aux Antilles, chanceux ;-)

              Sandra
            2. Contributeur
              @ermelinda31Sandra (un prénom que j'aime bien ...)

              Bonjour, et désolé, j'avais mal compris ton exposé :
              "la colonne adresse comporte tous les éléments (CP, Ville)" signifiait que la colonne "Adresse" comportait aussi le CP et le nom de la ville, et moi j'ai interprété ne comportait que le CP et la ville.
              Du coup ça devient beaucoup plus difficile, sans macro ! Et quasiment impossible, avec un retour à la ligne ! Mais heureusement, eriiic était là ...
              Pourrais-tu me faire voir 2 ou 3 lignes de ton fichier, pour que je puisse quand même tenter de trouver une formule ?

              Cordialement.