Transformation tableau

nypon

XLDnaute Nouveau
Bonsoir,

Je suis novice en VBA et je n'arrive pas à faire les boucles que je veux.
Je travail actuellement sur la mise en forme d'un fichier excel qui comporte 2 feuilles : '

ESP pour' "espèce" et 'DECOMP' pour la feuille qui décompose le 1er tableau.

La feuille 'ESP' contient un nombre limité d'espèce qui ne change pas.
A chacune de ces espèce est associé une direction et une activité.
J'ai donc 3 espèces (A,B et C) et un index pour chaque ligne.

Ce que je veux faire, c'est les mettre en ligne mais une transposition ne suffit pas.

J'aimerais lui dire de me créer pour chaque index 3 lignes (en fonction du nombre d'espèce) et de récupérer les données qui correspondent pour chaque ligne.

Vous trouverez un exemple en fichier joint.
J'espère que vous pourrez m'aider.

A bientôt,
Cordialement,
 

Pièces jointes

  • ESP.xls
    20 KB · Affichages: 63

nypon

XLDnaute Nouveau
Re : Transformation tableau

Bonsoir,

Merci de répondre aussi vite,
En fait, je ne veux pas absolument de macro mais n'est-ce pas compliqué de faire cela "tout en formules" si le tableau devient plus grand ?

Mon idée était de faire des itérations au cas ou des données venaient à être ajoutées pour faire évolué facilement le tableau.

Je ne suis pas "fermé" sur les solutions que vous proposez, si vous avez une solution qui fonctionne, je suis preneur.

Je vous remercie,
à bientôt,
Cordialement
 

hoerwind

XLDnaute Barbatruc
Re : Transformation tableau

Bonjour,

Comme il n'y a pas d'amateur pour te proposer une solution par macro, en voici une en pièce jointe par formules.

Tout ajout ou modification sur la première feuille (ESP) est automatiquement répercuté sur l'autre feuille.

Des formules similaires peuvent être écrites sur base de la fonction DECALER, mais il a bien fallu en choisir une.
.
 

Pièces jointes

  • Transposer.zip
    7.3 KB · Affichages: 46
  • Transposer.zip
    7.3 KB · Affichages: 45
  • Transposer.zip
    7.3 KB · Affichages: 42

nypon

XLDnaute Nouveau
Re : Transformation tableau

Bonjour,

Je vous remercie pour cette réponse.
Je suis en formation aujourd'hui alors je ne pourrais regarder cela que vers midi.
Je vous tiens au courant.
Merci beaucoup

Bien cordialement,
 

nypon

XLDnaute Nouveau
Re : Transformation tableau

Bonjour Hoerwind,

Désolé pour le temps de réponse. J'ai testé le tableau le jour même de l'envoie mais j'ai oublié de vous tenir au courant.

les formules fonctionnent très bien, j'ai testé d'ajouter de nouvelles données, et ça marche. Je n'ai pas encore essayé d'ajouter de nouvelles espèces mais je pense que d'adapter la formule pour 4 espèces ou 5 doit être à ma portée.

Si j'ai besoins d'automatiser plus avant, j'essaierais d'intégrer la formule dans du code VB mais ce n'est pas d'actualité.

Je vous remercie de votre intérêt pour mon problème,

A bientôt,

cordialement,
 

nypon

XLDnaute Nouveau
Re : Transformation tableau

Bonsoir,

Je relance ce post car je me suis rendu compte que les formules ne répondent pas vraiment à ma question (pour l'instant et par une mauvaise communication de ma part). J'ai essayé d'ajouter des colonnes et je n'ai pas réussit à adapter ces formules très complexes pour moi.
De plus, toutes les colonnes et les lignes ne seront pas remplies dans le tableau 1.

Voici un exemple de ce que j'ai :

IND|ESP1|D |A|ESP2|D|A|ESP3|D|A| NB |
================================
1 | 2 |5 |V| | | | 4 | |T| 2 |
2 | | | | 1 |5|R| | | | 1 |
3 | | | | | | | 3 |7 |T| 1 |

et de ce que je veux en faire :

ID | ESP | NB | D | A |
========================
1 | ESP1 | 2 | 5 |V |
2 | ESP3 | 4 | | T |
3 | ESP2 | 1 | 5 | R |
4 | ESP3 | 3 | 7 | T |

Il y a un exemple en pièces jointes (un peu différent de celui-ci)
Mais je traduit quand même ce que je veux faire (ça peut peut-être m'aider à comprendre le future code) sauf que j'arrive pas à le faire :

dans le tableau 1, parcourir la ligne 2 et des qu'il y a quelque chose dans la colonne "ESP1", récupérer l'entête et l'intégrer dans la colonne "ESP" du tableau 2 ensuite récupérer les valeurs des deux prochaines colonnes de la ligne 2 dans le tableau 1 et les intégrer dans le tableau 2 dans les colonnes du même nom.
Continuer à parcourir la ligne 2 et dès qu'il y a quelque chose dans la colonne "ESP2", récupérer l'entête et l'intégrer dans la colonne "ESP" du tableau 2 ensuite récupérer les valeurs des deux prochaines colonnes de la ligne 2 dans le tableau 1 et les intégrer dans le tableau 2 dans les colonnes du même nom...

J'ai fait une formule pour compter le nombre d'espèce par ligne en me disant que ça pourrait faciliter le nombre de ligne à intégrer. Cependant, je me dis aussi qu'une des solution est de définir les colonnes "ESP.." du tableau 1 à parcourir pour toutes les lignes et dès qu'il rencontre une valeur, alors il prends l'entête de cette colonne et récupère les données automatiquement des 2 autres colonnes pour les intégrer dans le tableau 2 en fonction du nom de colonne (Je sais ça répète un peu, mais je me demande quelle est la meilleure solution)... !

Enfin, tout ça pour vous demander votre aide.

Je vous remercie,

Bien cordialement,
 

Pièces jointes

  • TRANSPOSER.xls
    17.5 KB · Affichages: 48
  • TRANSPOSER.xls
    17.5 KB · Affichages: 48
  • TRANSPOSER.xls
    17.5 KB · Affichages: 48

pierrejean

XLDnaute Barbatruc
Re : Transformation tableau

Re

la macro commentée (si pas clair ne pas hesiter a revenir)

Code:
Sub report()
'effacement feuil3
Sheets("Feuil3").Range("A2:F65536").ClearContents
'1ere ligne de la feuil3 a servir
ligne = 2
'1er numero a noter
num = 1
'lire les lignes de la feuille
For n = 2 To Range("A65536").End(xlUp).Row
'verifier s'il y a une inscription au moins dans les colonnes 2 a 13
  For m = 2 To 13
     tot = tot & Cells(n, m)
  Next m
 'si oui
  If tot <> "" Then
  'balayer les colonnes
  For m = 2 To 13
  's'il y a quelque chose
    If Cells(n, m) <> "" Then
    'et s'il s'agit d'une des colonnes 2 5 8 11
      If m Mod 3 = 2 Then
      'ecrire en feuil3
        Sheets("Feuil3").Cells(ligne, 1) = num
        Sheets("Feuil3").Cells(ligne, 2) = Cells(1, m)
        Sheets("Feuil3").Cells(ligne, 3) = Cells(n, m)
        Sheets("Feuil3").Cells(ligne, 4) = Cells(n, m + 1)
        Sheets("Feuil3").Cells(ligne, 5) = Cells(n, m + 2)
        Sheets("Feuil3").Cells(ligne, 6) = Cells(n, 1)
      ' ligne et numero suivant
        ligne = ligne + 1
        num = num + 1
      End If
    End If
  Next m
 End If
Next n
'voir le resultat
Sheets("Feuil3").Select
End Sub
 

nypon

XLDnaute Nouveau
Re : Transformation tableau

Bonjour Pierre-Jean,

Merci infiniment.

J'ai testé la formule hier soir et en ajoutant des données, ça me convient.
Il faut que j'approfondisse pour bien comprendre le code et aussi pour que ça réponde à tous mes besoins lorsque je vais adapter les macros à mon cas sur un tableau préxistant.

En lisant vos explications (merci, ça va m'aider à comprendre), j'ai l'impression que ma démarche de départ telle qu'expliqué dans mon long mail était pas tout à fait la bonne.

Je n'hésiterais pas à vous demander des explications si je n'arrives pas à comprendre quelque chose.

En passant, connaissez-vous un tutoriel sympa qui permette de s'initier aux boucles en VBA ?

En tout cas je vous remercie et à bientôt.

Bien cordialement,

Nypon
 

pierrejean

XLDnaute Barbatruc
Re : Transformation tableau

Re
En y regardant de plus pres , la macro peut etre simplifiée :

Code:
Sub report()
Sheets("Feuil3").Range("A2:F65536").ClearContents
ligne = 2
num = 1
For n = 2 To Range("A65536").End(xlUp).Row
  For m = 2 To 13 Step 3
    If Cells(n, m) <> "" Then
        Sheets("Feuil3").Cells(ligne, 1) = num
        Sheets("Feuil3").Cells(ligne, 2) = Cells(1, m)
        Sheets("Feuil3").Cells(ligne, 3) = Cells(n, m)
        Sheets("Feuil3").Cells(ligne, 4) = Cells(n, m + 1)
        Sheets("Feuil3").Cells(ligne, 5) = Cells(n, m + 2)
        Sheets("Feuil3").Cells(ligne, 6) = Cells(n, 1)
        ligne = ligne + 1
        num = num + 1
    End If
  Next m
Next n
Sheets("Feuil3").Select
End Sub
 

nypon

XLDnaute Nouveau
Re : Transformation tableau

Bonjour Pierre-Jean.

Encore merci pour le bout de code, ça fonctionne à merveille.
Je me suis rendu compte en lisant les commentaires de votre code que la colonne "COMPTE" que j'avais créé n'est pas utilisée. Tant mieux.
J'ai essayé ensuite d'ajouter des lignes et des colonnes. cela fonctionne à merveilles. Je n'ai pas encore mis en application sur mon cas concret car je voudrais bien comprendre le code et il y a des choses qui m'échappe :

1) A quelle moment vous lui dites qu'il doit faire cela sur les données de la feuille 1 ?

==> Vous avez créé un bouton depuis la boite à outils contrôle et celui-ci la macro avec le code que vous avez créé !?
Suffit-il que le bouton soit créé dans la feuille pour qu'il prenne automatiquement ses données comme référence !?

2) Dans le code lui même, pouvez vous me dire si j'interprète bien ce que vous avez fait. J'ai mis les commentaires tels que je les ai compris en bleu :

Code:
Sub report()
[COLOR="Blue"]'nom de la variable[/COLOR]
Sheets("Feuil3").Range("A2:F65536").ClearContents
[COLOR="Blue"]'effacement des données de la feuilles 3 en laissant l'entête[/COLOR]
ligne = 2
[COLOR="Blue"]'ma variable 'ligne' pour servir la 2eme ligne de la feuille 3[/COLOR]
num = 1
[COLOR="Blue"]'1er numéro à noter pour réaliser mon autoincrémentation dans la colonne A => si on souhaite commencer à 1[/COLOR]
For n = 2 To Range("A65536").End(xlUp).Row
[COLOR="Blue"]'pour la ligne 2 dans la colonne A, dans la dernière cellule vide[/COLOR]
  For m = 2 To 13 Step 3
[COLOR="Blue"]'pour les colonne 2 à 13 les parcourir 3 par 3[/COLOR]
    If Cells(n, m) <> "" Then
[COLOR="Blue"]'regarder dans chaque cellule et si une cellule n'est pas vide alors[/COLOR]
        Sheets("Feuil3").Cells(ligne, 1) = num
[COLOR="Blue"]'remplir dans la feuille 3 à la cellule (2,1) la variable 'num' soit "1"[/COLOR]
        Sheets("Feuil3").Cells(ligne, 2) = Cells(1, m)
[COLOR="Blue"]'remplir la feuille 3 à la cellule (2,2)  la valeur de la cellule (1,2) [de la feuille 1][/COLOR]
        Sheets("Feuil3").Cells(ligne, 3) = Cells(n, m)
[COLOR="Blue"]'remplir dans la feuille 3 à la cellule(2,3) mettre la valeur de la cellule(2,2)[de la feuille 1][/COLOR]
        Sheets("Feuil3").Cells(ligne, 4) = Cells(n, m + 1)
[COLOR="Blue"]'dans la feuille 3 à la cellule(2,4) remplir avec les données de la cellule (2,3+1) [de la feuille 1][/COLOR]
        Sheets("Feuil3").Cells(ligne, 5) = Cells(n, m + 2)
[COLOR="Blue"]'dans la feuille 3 à la cellule(2,5) mettre les données de la cellule (2,3+2)[de la feuille 1][/COLOR]
        Sheets("Feuil3").Cells(ligne, 6) = Cells(n, 1)
[COLOR="Blue"]'dans la feuille 3 à la cellule (2,6) mettre les valeurs de la cellue (2,1) préalablement remplie par l'autoincrémentation (soit "1") pour cette ligne.s'il y a plusieurs colonne de remplies, il fait la boucle de la colonne 2 à 13 en sautant les colonnes de 3 en 3[/COLOR]
        ligne = ligne + 1
[COLOR="Blue"]'une fois que c'est fait pour la première ligne, il passe à la seconde en ajoutant 1 aux valeurs de la variable ligne. [/COLOR]
        num = num + 1
[COLOR="Blue"]'Idem pour incrémentation.[/COLOR]
    End If
[COLOR="Blue"]'fermeture de la boucle IF[/COLOR]
  Next m
[COLOR="Blue"]'Fermeture de la boucle FOR1[/COLOR]
Next n
[COLOR="Blue"]Fermeture de la boucle FOR2[/COLOR]
Sheets("Feuil3").Select
[COLOR="Blue"]'Sélectionne la feuille 3[/COLOR]
End Sub
'fin de la macro

Je pense avoir bien compris le code créé maintenant mais quand il s'agit de créer sois-même le code à partir de ce que je veux c'est une autre paire de manche. il y a une logique de construction de ces tableau que j'ai encore du mal à cerner.

Je vous remercie encore, cela me permet de progresser grâce à votre bon vouloir et celui de toutes les personnes du forum.
A très bientôt j'espère.
Nypon
 

pierrejean

XLDnaute Barbatruc
Re : Transformation tableau

Re

1) Effectivement, la macro etant lancée par le bouton , il s'ensuit que l'on est sur la feuille ou est ledit bouton

2) je ne ferais que cette modification

For n = 2 To Range("A65536").End(xlUp).Row
'pour chaque ligne, de la ligne 2 colonne A à la dernière cellule non vide
 

nypon

XLDnaute Nouveau
Re : Transformation tableau

Merci pour la réponse.

La nuance à son importance.

Je viens de me rendre compte de quelque chose.
En fait, il ne parcours les 2 colonnes après celle de référence que s'il y a des données dans la colonne de référence => For m = 2 To 13 Step 3
Mais si j'avais voulu qu'il parcours toutes les colonnes (imaginons qu'il puisse y avoir des données dans les colonnes "D" et "A" sans que la colonne "ESP.." ne soit remplie) alors il aurait fallut faire un
"For m = 2 To 13 Step 1 ? n'est ce pas ?

Bonne journée et à bientôt.

Nypon
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 976
dernier inscrit
kaizertv2001@gmailcom