Copier/coller/transposer

Bonjour, je suis toujours en quête d'amélioration de fichiers données et je bute (encore) sur un truc tout bête.

Je voudrais récupérer dans une colonne contenant une serie de nom, chaque nom pour le coller sur une autre feuille mais en ligne.

J'ai adapté une macro que Dan m'a gentiment faites sur mesure et j'arrive à extraire mes nom dans la feuille cible mais uniquement en colonne. (fichier joint)

Je vous avouerai que l'idéal pour moi serai de transposer chaque nom et de fusionner avec la cellule voisine.

Mais je n'arrive même pas à trouver le code qui pourrait me transposer ces noms par collage spécial simplement sur une ligne.

Pourriez vous m'aider à compléter?

31transposition.zip (27.92 Ko)

Salut,

un exemple :

Pour transposer la plage A1-> A11 vers la ligne C12.

Pour l'appeler :

Sub test()
transposeetFusionne Range("A1", "A11"), Range("C12")
End Sub

La fonction :

Function transposeetFusionne(source As Range, target As Range)
Dim c As Range

For Each c In source
    target = c.Value
    Range(target.Address, target.Offset(0, 1).Address).merge
    Set target = target.Offset(0, 1)
Next
End Function

Merci bien ça fonctionne très bien!

Autre question, j'ai essayé de rendre le range dynamique dans ta sub.

J'ai modifié comme suit:

Sub test()

Dim Cel As Range, plage As Range

Dim Derlig As Integer

Dim j As Long

Derlig = Sheets("cible").Range("A65536").End(xlUp).Row

For j = 1 To Derlig

Set plage = Sheets("cible").Range("A1" & j)

On Error Resume Next

For Each Cel In plage

If Cel <> "" Then transposeetFusionne Range("plage"), Range("C12")

Next Cel

Next

End Sub

mais (évidemment) ça donne rien.

tu peux m'aider?

Bon j'y suis presque mais pas encore.

La sub Liste_Markers() cherche et importe correctement ce qu'il faut dans la colonne A de la feuille "cible".

La Sub Transposition() exécute la fonction transposeetFusionne correctement si la plage qui pointe sur la colonne A est fixe de type "A1:A11".

Je n'arrive pas à rendre cette plage dynamique ou à défaut pointer la colonne entière et ne travailler que sur les cellules contenant une information.

Au mieux en déclarant les variable et en remplaçant ("A1:A11") par ("A1" & j) je n'obtient que le dernier de la "plage" dans ma transposition.

(c'est un peu le bronx dedans car j'essaye justement de la "dynamiser" )

Bref comment exécuter la fonction transposeetFusionne sur plage dynamique de la colonne A ou au moins sur toutes les cellules "nonvides"

Je joint un fichier exemple.

Merci.

27transposition2.zip (28.28 Ko)

Re,

Je regarde.

Pour t'aider tout de suite :

Sinon tu peux utiliser la fonction avec différentes plages:

Si la plage total est A1=>A18

Si la cellule A11 est vide par exemple alors tu peux lancer la fonction comme suit pour enlever la cellule vide

transposeetFusionne Range("A1:A10,A12:A18"), Range("C2")

Cela demande un peu de dev pour construire ces unions de plages.

Sinon (plus bourin)

tu supprimes les lignes avant de lancer le transpose...

Sub Macro1()
Derlig = Sheets("cible").Range("A65536").End(xlUp).Row
For i = Derlig To 1 Step -1
    If Range("A" & i).Value = "" Then  'on la supprime
        Range("A" & i).Delete
    End If
Next
End Sub

Damien

Le probleme n'est pas qu'il risque d'y avoir des cellule vide dans mon range (puisque la 1ere sub liste correctement), c'est que cette liste peut varier de 1 jusqu'à 30.

Je pourrais évidemment lister sur un range de A1:A30 mais j'aurai alors une série de cellule vide transposées si ma liste n'est pas pleine...c'est esthétiquement dommage.

Une solution barbare serait de fixer un range large au départ et une fois la transposition effectuée, rajouter une commande pour supprimer toutes les colonnes "vides"...

Merci pour le coup de main en tout cas.

Ok.. Donc :

Tu n'as pas de cellule vide au milieu des autres, ton seul problème est de definir la plage contenant des données ?

Essayes cela :

sub test()
Dim plage As Range
Set plage = Range("A1", Range("A65536").End(xlUp))
transposeetFusionne plage, Range("C12")
end sub

Cela correspond a ton besoin ?

Damien

C'est exactement ça!

J'étais sur beaucoup plus compliqué et avec une mauvaise syntaxe, ça tourne au poil!

Merci

Rechercher des sujets similaires à "copier coller transposer"