exporter des données en colonnes depuis des données en ligne

arno38000

XLDnaute Nouveau
Bonjour

J ai parcouru pas mal de post sur ce forum afin de trouver des infos sur ma recherche. j arrive à trouver quelques pistes mais mon niveau de debutant me bloque rapidement.

Voila ce que je tente de réaliser. j ai essayé d utiliser l enregistreur de macros mais sans trop de resultat.

Je possede un tableau dans un onglet (B), avec des données simples du type :
NOM Prenom Telephone Mail etc...
Ces données sont en lignes.

Je dois pouvoir exporter ces données (idéalement grâce à un bouton), ligne par ligne, dans un second onglet (A), mais cette fois en colonne.
Pour corser le tout, je dois pouvoir indiquer l'emplacement dans ce nouvel onglet (A) ou les données doivent se placer (doivent etre exportées). Pour être plus précis, les données de la ligne 1 dans l onglet (B) se placeront dans l onglet (A) à partir de la case C5; les données de la ligne 2 se placeront dans l onglet (A) à partir de la case D17.

Pourquoi l exportation via un bouton; tout simplement nous sommes deux à utiliser ce document et cela permet d automatiser l exportation de façon transparente pour un personne qui est encore bien moins doué que moi en informatique !

J'hésite entre crier A l aide ou au secours !
Donc si vous aviez une idée de comment résoudre mes recherches, un énorme merci.
De mon coté je cherche, et si j arrive à trouver, je partage.

Bonne journée
 

job75

XLDnaute Barbatruc
Re : exporter des données en colonnes depuis des données en ligne

Re,

Bon, vous avez interverti les feuilles, mais pas grave.

1) Si le nombre de lignes à copier ne dépasse pas 4, pas besoin de macro, il suffit de formules avec les fonctions TRANSPOSE et INDEX.

Dans ce cas cherchez d'abord par vous-même et revenez si vous n'y arrivez pas.

2) Si le nombre de lignes peut être quelconque, il faut une macro et se donner une règle pour savoir où l'on colle les lignes transposées.

Dans votre fichier actuellement il n'y a pas de règle puisqu'il faut coller en C5 H5 D16 F25 de la feuille B...

Donc dans ce cas, revenez avec une règle.

A+
 

arno38000

XLDnaute Nouveau
Re : exporter des données en colonnes depuis des données en ligne

Re,
ok je vais regarder ces fonctions; pour vous répondre le nombre de lignes est "infini", donc ces dernières risquent de ne pas suffirent.
Par contre plus je regarde mon tableau plus je me dis qu il faut effectivement que j affecte des cellules (des emplacements) qui ne bougent pas. C est cela que vous appelez "une regle" ?
merci pour votre aide

Arno
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : exporter des données en colonnes depuis des données en ligne

Re,

Une "règle" c'est par exemple :

- les lignes paires sont transférées en colonnes B/C, les lignes impaires en colonnes E/F

- les tableaux commencent en ligne 2 puis se décalent de 8 lignes à chaque fois.

Voyez le fichier joint et cette macro lancée par le bouton (Alt+F11) :

Code:
Sub Exporter()
Dim titres, i As Long, lig As Long, col As Byte
titres = Array("NOM", "PRENOM", "ADRESSE", "Téléphone", "Mail", "Infos diverses")
With Sheets("B") 'nom à adapter
  .Rows("2:" & .Rows.Count).Delete 'RAZ
  For i = 2 To Sheets("A").Cells(Rows.Count, "A").End(xlUp).Row
    lig = 2 + 8 * (Int(i / 2) - 1) '2 => 1ère ligne renseignée
    col = 2 + 3 * (i Mod 2) '2 => 1ère colonne renseignée
    .Cells(lig, col).Resize(6) = Application.Transpose(titres)
    .Cells(lig, col + 1).Resize(6) = Application.Transpose(Sheets("A").Rows(i).Resize(, 6))
    Sheets("A").Cells(i, 5).Copy .Cells(lig + 4, col + 1) 'pour copier le lien hypertexte
  Next
  .Activate 'facultatif
End With
End Sub
A+
 

Pièces jointes

  • testarno38000(1).xls
    44.5 KB · Affichages: 89
Dernière édition:

arno38000

XLDnaute Nouveau
Re : exporter des données en colonnes depuis des données en ligne

Re,

De mon coté je me focalisais sur la compréhension des fonctions transpose et index, et me voila maintenant avec un code "de compétition" ! :D
Alors comme je suis debutant il faut m expliquer un peu plus doucement que les autres.
J ai telecharge votre fichier (merci). Je voulais lancer la macro via le bouton, mais rien.
J ai essayé de suivre ce que vous indiquiez alt+f11 en pensant que cela pourrait lancer la macro, mais cela lance visual basic. Qu est ce que je fais de mal ?

L avantage de mettre à disposition un exemple comme celui a le merite de m aider à comprendre le fonctionnement d une macro, encore merci, et bonne soirée

arno
 

job75

XLDnaute Barbatruc
Re : exporter des données en colonnes depuis des données en ligne

Bonjour arno38000, le forum,

Nous sommes bien sûr dans le cas 2) de mon post #4.

1) D'abord il faut que les macros soient activées (cherchez sur le forum si vous ne savez pas faire).

2) Ensuite Alt+F11 permet d'aller dans VBA. Double-clic en haut à gauche pour aller sur une feuille.

Dans Module1 j'ai un peu modifié la macro, avec les variables F1 et F2 c'est plus clair :

Code:
Sub Exporter()
Dim F1 As Worksheet, F2 As Worksheet, titres, i As Long, lig As Long, col As Byte
Set F1 = Sheets("A") 'nom à adapter
Set F2 = Sheets("B") 'nom à adapter
titres = Array("NOM", "PRENOM", "ADRESSE", "Téléphone", "Mail", "Infos diverses")
F2.Rows("2:" & F2.Rows.Count).Delete 'RAZ
For i = 2 To F1.Cells(F1.Rows.Count, "A").End(xlUp).Row
  lig = 2 + 8 * (Int(i / 2) - 1) '2 => 1ère ligne renseignée
  col = 2 + 3 * (i Mod 2) '2 => 1ère colonne renseignée
  F2.Cells(lig, col).Resize(6) = Application.Transpose(titres)
  F2.Cells(lig, col + 1).Resize(6) = Application.Transpose(F1.Rows(i).Resize(, 6))
  F1.Cells(i, 5).Copy F2.Cells(lig + 4, col + 1) 'pour copier le lien hypertexte
Next
F2.Activate 'facultatif
End Sub
3) Le bouton lance la macro grâce à cette autre macro en feuille A (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub CommandButton1_Click()
Exporter 'lance la macro
End Sub
4) Noter qu'en feuille B les colonnes C et F sont mises au format Spécial Numéro de téléphone.

Fichier (2).

Nota important : sur Excel 2007/2010 vous pouvez enregistrer votre fichier avec l'extension .xlsm, surtout pas .xlsx.

.xlsx n'accepte pas les macros.

A+
 

Pièces jointes

  • testarno38000(2).xls
    36 KB · Affichages: 60

arno38000

XLDnaute Nouveau
Re : exporter des données en colonnes depuis des données en ligne

Bonsoir
Pour le lancement des macros, c est OK, je faisais une mauvaise manip.
Merci pour le code !
L avantage de "fonctionner" comme cela c est que cela permet de décortiquer ce dernier de fond en comble. Du coup j avance.
J ai pu faire pas mal de modifications, et surtout j avance dans la compréhension.

Je viens de creer un nouvel exemple avec quelques modifs, ajout de familles, déplacement de l exportation des données et quelques broutilles.

Maintenant je vais chercher comment garder la mise en forme (Gras, couleurs de textes etc..) lors de l exportation depuis les données en lignes.
Par contre dans mon exemple je vais avoir besoin d ajouter un clip art ou un fichier image dans la zone comprise entre D2 et D10.
J ai placé une image dans cette zone avant de cliquer sur mon bouton, et cette dernière disparait après l exportation; ou du moins mon fichier image se trouve réduite en D2.
Je me demande si il faut que je gere " l insertion " de cette zone image comme les autres données, directement depuis mes lignes de données dans "l onglet" base de données.
A votre avis ?

et encore merci de l enorme coup de main
 

Pièces jointes

  • arno38testfor.xls
    45 KB · Affichages: 98

job75

XLDnaute Barbatruc
Re : exporter des données en colonnes depuis des données en ligne

Re,

Pour la remise à zéro, au lieu de supprimer les lignes par :

Code:
F2.Rows("2:" & F2.Rows.Count).Delete 'RAZ
vous pouvez seulement effacer les données par :

Code:
F2.Rows("2:" & F2.Rows.Count).ClearContents 'RAZ
Vous pouvez aussi modifier la propriété de l'image : Ne pas déplacer ou dimensionner avec les cellules.

A+
 

job75

XLDnaute Barbatruc
Re : exporter des données en colonnes depuis des données en ligne

Re,

Si l'on veut aussi copier toutes les mises en forme (polices, couleurs) on peut faire un Collage spécial/Transpose :

Code:
Sub Exporter()
Dim F1 As Worksheet, F2 As Worksheet, i As Long, lig As Long, col As Byte
Set F1 = Sheets("base donnees")
Set F2 = Sheets("resultat")
Application.ScreenUpdating = False
F2.Rows("2:" & F2.Rows.Count).Clear 'RAZ (efface tout)
For i = 2 To F1.Cells(F1.Rows.Count, "A").End(xlUp).Row
  lig = 2 + 11 * (Int(i / 2) - 1)
  col = 2 + 4 * (i Mod 2)
  F1.Rows(1).Resize(, 10).Copy
  F2.Cells(lig, col).PasteSpecial xlPasteAll, Transpose:=True
  F1.Rows(i).Resize(, 10).Copy
  F2.Cells(lig, col + 1).PasteSpecial xlPasteAll, Transpose:=True
Next
Application.CutCopyMode = False
Application.Goto F2.[A1], True
End Sub
Mais bien sûr cela prend bien plus de temps (si beaucoup de lignes) que de copier uniquement les valeurs.

Votre fichier joint.

A+
 

Pièces jointes

  • arno38testfor(1).xls
    45 KB · Affichages: 66

arno38000

XLDnaute Nouveau
Re : exporter des données en colonnes depuis des données en ligne

Ok
la nuance entre "delete" et "ClearContents" c est d un cote delete pour suppression et ClearContents pour effacement c est bien cela ? il s agit d une nuance ou cela a son importance ? de mon coté c est transparent, je ne vois pas de différence.

Pour les photos, effectivement il est possible de les intégrer après avoir exporté les données et en modifiant les propriétés de chaque image, à savoir "ne pas déplacer ni modifier avec les cellules.". C est fastidieux, il faut donc que j arrive à ajouter dans l onglet "base de données" en bout de ligne (K2; K3 etc...) une image. Il faut que j arrive à trouver si il est aussi possible d exporter une image.
Je vais tester....

Bonne soirée
 

job75

XLDnaute Barbatruc
Re : exporter des données en colonnes depuis des données en ligne

Re,

Au post #11 j'utilise Clear qui efface tout, contenu et mise en forme.

Quand vous vous posez des questions sur des instructions, ayez le reflexe d'utiliser l'aide VBA...

A+
 

arno38000

XLDnaute Nouveau
Re : exporter des données en colonnes depuis des données en ligne

Effectivement je n utilisais pas l aide de VBA, mais plus celle d excel ou de google !

Sinon votre dernier bout de code sur la copie du format marche parfaitement. Je fais quelques nouvelles modifs (pour le comprendre) et pour l adapter à mes besoins.

Pour les images, l automatisation ne fonctionne pas "basiquement". Je cherche, je cherche...

encore merci
 

job75

XLDnaute Barbatruc
Re : exporter des données en colonnes depuis des données en ligne

Bonjour arno38000,

Peut-être avez- vous trouvé pour les images ?

Si l'option Couper, copier et trier les objets avec les cellules est bien cochée, il suffit de copier la cellule.

Dans le fichier (2) joint, 2 images WordArt en J3 et J5. La macro :

Code:
Sub Exporter()
Dim F1 As Worksheet, F2 As Worksheet, s As Shape, i As Long, lig As Long, col As Byte
Set F1 = Sheets("base donnees")
Set F2 = Sheets("resultat")
Application.ScreenUpdating = False
F2.Rows("2:" & F2.Rows.Count).Clear 'RAZ (efface tout)
For Each s In F2.Shapes 'supprime les objets en colonnes C et G
  If s.TopLeftCell.Column = 3 Or s.TopLeftCell.Column = 7 Then s.Delete
Next
For i = 2 To F1.Cells(F1.Rows.Count, "A").End(xlUp).Row
  lig = 2 + 11 * (Int(i / 2) - 1)
  col = 2 + 4 * (i Mod 2)
  F1.Rows(1).Resize(, 10).Copy
  F2.Cells(lig, col).PasteSpecial xlPasteAll, Transpose:=True
  F1.Rows(i).Resize(, 9).Copy '9 suffit ici (on copie ensuite la colonne 10)
  F2.Cells(lig, col + 1).PasteSpecial xlPasteAll, Transpose:=True
  F1.Cells(i, 10).Copy F2.Cells(lig + 9, col + 1) 'pour copier l'objet
Next
Application.Goto F2.[A1], True
End Sub
A+
 

Pièces jointes

  • arno38testfor(2).xls
    51.5 KB · Affichages: 103

Discussions similaires

Réponses
8
Affichages
440
Réponses
4
Affichages
213

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 187
dernier inscrit
ebenhamel