Extraire cellule

Bonjour a tous

mon soucis est le suivant j 'aimerais via vba deconcatener une cellules avec les formules je sais ,mais j 'essaye de progresser en vba et la je bloque ....

MERCI D 'AVANCE

7exemple.xlsx (8.45 Ko)

Bonsoir,

Tu offres un exemple où seul le nom de la rue aura à faire l'objet d'un traitement spécifique, or on peut penser que l'on pourrait trouver :

  • des noms composés de plus d'un mot,
  • des prénoms comprenant plusieurs prénoms,
  • des numéros affublés de Bis, Ter ou autre mention, ou simplement absents,
  • des noms de voie autre que Rue ou absents,

un échantillonnage un peu plus significatif de ta base serait donc souhaitable pour examiner l'ensemble des particularités à détecter et prendre en considération lors du traitement.

Cordialement.

Bonsoir MFERRAND

ta remarque est exact ,mais le but pour l 'instant est afin que je progresse est d arriver a resoudre mon soucis actuelle pour que j' essaye par la suite de traiter les particularites seule .

par la suite ,je pense decomposer la cellules qui comporteras le 8ter par exemple

merci d 'avance de ton aide

Eh bien voilà une méthode sur laquelle tu peux te pencher :

- splitter la chaîne à traiter (sur l'espace par défaut) :

    ch = Split(.Range("A5"))

Le point devant Range, destiné à référer à la feuille (laquelle à mettre sous bloc With).

- remonter les éléments jusqu'à ce qu'on trouve "RUE" :

    For i = UBound(ch) - 1 To 1
        If ch(i) <> "RUE" Then
            ch(UBound(ch)) = ch(i) & " " & ch(UBound(ch))
            ch(i) = ""
        Else
            Exit For
        End If
    Next i

On ajoute les éléments dans le dernier en les supprimant.

- recomposer la chaîne avec un autre séparateur :

    ch = Join(ch, "@")

On aura 2 ou plus "@" à la suite là où l'on a supprimé des éléments.

- réduire les successions de séparateurs à 1 :

    Do While InStr(1, ch, "@@") > 0
        ch = Replace(ch, "@@", "@")
    Loop

- resplitter sur le nouveau séparateur :

    ch = Split(ch, "@")

On obtient un tableau qu'il n'y a plus qu'à affecter.

- affecter :

    .Range("E5").Resize(, UBound(ch) + 1).Value = ch

Voilà ! Tu as quasiment tout ton code écrit, ne te reste que les déclarations de procédure (Sub...) et de variable (ch, i) [ch ne doit pas être typée, et i en Integer (i%)], et mentionner la feuille.

Bien sûr, pour traiter plusieurs lignes, il sera sans doute préférable d'utiliser Cells, après dimensionnement du tableau à traiter, ajouter une variable de boucle... mais tout ça c'est du banal, concentre-toi sur la méthode de traitement de la ligne...

Cordialement.

merci

du Grand mferrand

Rechercher des sujets similaires à "extraire"