Copier partie d'une chaine de caractère, dans la ligne en dessous

Bonjour à tous,

Je découvre ce forum qui ressemble à une mine d'or, pour les paumés d'Excel comme moi !

Je vous soumet mon besoin:

je dois copier une partie de la chaîne de caractère d'une cellule, et la coller dans la cellule du dessous, pour remplacer la chaîne qui est fausse.

<text lang="en">Daphnia magna (Invertebrate)</text>

<text lang="fr">Alburnus albidus costa (Invertébrés)</text>

</specie_i1>

<specie_i2>

<text lang="en">Daphnia cucullata (Invertebrate)</text>

<text lang="fr">Alburnus albidus costa (Invertébrés)</text>

</specie_i2>

<specie_i3>

etc etc (il y a 500 espèces différentes...)

et voici ce que je veux:

<text lang="en">Daphnia magna (Invertebrate)</text>

<text lang="fr">Daphnia magna (Invertébrés)</text>

</specie_i1>

<specie_i2>

<text lang="en">Daphnia cucullata (Invertebrate)</text>

<text lang="fr">Daphnia cucullata (Invertébrés)</text>

</specie_i2>

<specie_i3>

remplacer Alburnus albidus costa qui s'est copié à la place de tout les noms par le bon nom.

J'imagine qu'il doit être possible d'automatiser la tâche avec une macro ?

(le fichier d'origine est un XML, que j'ai copié dans Excel)

Un grand merci à la personne qui pourra m'aider !

Bonjour,

Peux-tu nous envoyer un fichier reprenant votre exemple afin que l'on puisse savoir à quoi ressemble ton fichier de base svp ?

Les colonnes utilisées, les données qu'il y a dans chacune des cellules de la colonnes etc ...

Ceci nous permettra de te sortir une macro qui convienne directement à ton fichier et qui n'aura pas besoin d'être adapté.

Merci

A plus !

le voici, merci !

43trad.xlsx (16.74 Ko)

Re,

voilà une proposition de macro à tester sur une copie de ton fichier original.

Sub trad()

    For Each cel In Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)
        If cel Like "*Alburnus albidus costa*" Then
            Espece = Range("B" & cel.Row - 1).Value
            Nom = Mid(Espece, InStr(2, Espece, ">", 1) + 1, InStr(2, Espece, "<", 1) - InStr(2, Espece, ">", 1) - 1)
            cel.Value = Replace(cel, "Alburnus albidus costa", Nom)
        End If
    Next cel

End Sub

A plus

Magnifique, ça a fonctionné !

Merci beaucoup pour le gros gain de temps

J'aimerai approfondir,

Pourrais tu détailler la macro pas à pas, si c'est possible ? J'aimerai comprendre ce qu'elle fait, histoire de l'adapter si je dois m'en resservir.

je comprend quelques instructions, par exemple: For Each cel In Range ==> pour chaque cellule dans la colonne B, si la cellule contient tel ou tel chaine de caractère, alors ... après ca devient flou pour moi

Je sais pas si ma demande est très claire.

Merci

Bien sur sans problème :

Sub trad()

    For Each cel In Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row) 
    'Pour chaque cellule de la colonne B jusqu'à la dernière cellule non vide

        If cel Like "*Alburnus albidus costa*" Then
        'Si la cellule contient la chaine de caractères (Alburnus ...),
        'les * permettent de dire (peu importe ce qu'il y a avant ou après)

            Espece = Range("B" & cel.Row - 1).Value 
            'Espece = la cellule une ligne au dessus de celle comprenant (Alburnus...)

            'Mid renvoie une chaine de caractères contenant un nombre indiqué de caractères extraits d'une chaîne de caractères ; Mid ( string, start [, length ])
            'InStr  indique la position de la première occurrence d'une chaîne dans une autre, ici (>) ; InStr ([ start , ] string1 , string2 [, compare ])
            'Idem pour (<)
            'On obtient Mid(Espece, 6, 15) par exemple,
            'donc Nom sera égale à la chaine de caractères entre le 6ème et le 21ème caractères de Espece
            Nom = Mid(Espece, InStr(2, Espece, ">", 1) + 1, InStr(2, Espece, "<", 1) - InStr(2, Espece, ">", 1) - 1)

            cel.Value = Replace(cel, "Alburnus albidus costa", Nom)
            'Replace, remplace une chaine de caractères par une autre

        End If
    Next cel

End Sub

Voilàn j'espère que c'est clair, sinon tu peux toujours aller ici https://msdn.microsoft.com/fr-fr/vba/language-reference-vba/articles/mid-function si tu veux plus d'infos sur les fonctions vba.

N'hésite pas si tu as besoin.

A plus !

Rechercher des sujets similaires à "copier partie chaine caractere ligne dessous"