Boucle liste vers tableau

Bonjour à toutes et tous,

Je viens vers vous une nouvelle fois car je ne suis vraiment pas doué avec les boucles pourtant je pense que ce n'est pas si compliqué que ça mais je n'arrive pas à gérer les destinations.

Voila mon "problème" je voudrais avoir une macro qui compte les lignes remplies à partir de la 14 de la colonne B du tableau de la feuille 1 et les colle dans le tableau de la feuille 2. Sachant qu'une colonne feuille 2 ne peut pas excéder 8 lignes. S'il y a plus de 8 lignes remplies en feuille 1 il faudra passer le numéro 9 dans la première ligne de la colonne suivante etc. Pour plus de clarté je vous joint la feuille xls en question.

Je reste bien sur disponible si vous avez des questions.

Je vous remercie pour votre aide.

Bonjour,

Joindre un fichier contenant deux tableaux ... vides ça ne va pas aider beaucoup !
Donne un exemple de ce qui figure en colonne B de la feuille 1 (y a-t-il des cellules vides ?) et inscris "à la main" les résultats attendus en feuille 2

PS : au cas où une solution sans macro existerait, tu n'es pas intéressé ?

Bonjour U.Milité,

En effet, je comprends que les tableaux vide soient compliqués à appréhender.

Voila une exemple de remplissage. sachant que les autres colonnes ne joue aucun rôle particulier.

N'hésite pas à me dire s'il il te faut plus de remplissage.

Pour ta question, l'idée est de limiter l'action humaine afin de limiter les erreurs de recopie. Je pourrais utiliser l'enregistreur de macro pour faire un truc moche mais fonctionnel. Mais par vos exemples VBA j'espère aussi apprendre et pouvoir plus tard faire mes propres codes.

Un grand merci pour ton aide.

Re-bonjour,

Essaie, en B2 de la feuille2 :

=SIERREUR(INDEX('1'!$B$14:$B$32;LIGNES($1:1)+(COLONNES($A:A)-1)*8);"")

à recopier jusqu'en B13, puis copier l'ensemble vers la droite.
Comme je n'ai pas compris ta réponse au sujet d'une solution sans macro, je vais au plus simple !

Bonjour U.Milité,

je ne connaissais pas la fonction "INDEX" (je vais la regarder de plus près, elle pourrait me resservir) et en effet pour transposer des valeurs c'est très pratique. La solution que tu proposes est donc même mieux qu'une macro dans ce cas la, pas besoin de manip supplémentaire.

Merci beaucoup pour ta solution qui fonctionne magnifiquement bien.

U.Milité,

Si ce n'est pas trop abuser serait-il possible de rajouter dans ta formule (que je n’appréhende pas encore très bien) un truc comme un SI(ESTVIDE pour que les cases vide en colonne B feuille 1 apparaissent vides en feuille 2 et non avec un 0

Également, et je suis désolé j'aurais du le faire dès le début (je te joint le fichier complet pour que tu vois), est il possible dans ta formule de faire définir la valeur maximale de la plage par un comptage de ligne ( un truc comme "Rows.Count"). Dans l'idéal j'aimerai étendre ta formule à tout le tableau en feuille 2 pour pouvoir la verrouiller ensuite afin qu'aucune erreur ne puisse être malencontreusement introduite dans se tableau qui servira de référence. Mais comme tu le verra certaines lignes de la colonne B sont déjà occupées si j’étends dès le départ la plage jusqu'à la ligne 110(nombre de case maximale du tableau en feuille 2) ça rempli le tableau en feuille 2 de valeurs inappropriées.

Voila, si tout cela est possible ce serait vraiment super. Mais si ce n'est pas le cas on fera autrement ta solution est déjà très très bien.

Encore un grand merci pour ton aide.

Salut,

Dans l'absolu, je dirais qu'il ne devrait rien y avoir sous ton tableau en feuille 1 (ce sont les données de B33 à B110 qui "polluent" les résultats en feuille 2).

Tu peux convertir ta plage A13:H32 en Tableau (Insertion > Tableau > Vérifier que la sélection est correcte et cocher la case "Mes données ont des en-têtes", si elle ne l'est pas). De cette manière, chaque fois que tu ajouteras un N° en colonne A, le tableau se redimensionnera (mais si les lignes suivantes contiennent toujours des données, il faudra être prudent en complétant le tableau, sinon tu risques d'écraser ces valeurs !!).

Une fois la plage convertie en Tableau, nomme la plage B14:B32 (par exemple "ListeID") et utilise ce nom dans la formule :

=SIERREUR(INDEX(ListeID;LIGNES($1:1)+(COLONNES($A:A)-1)*8);"")

Pour la question des 0 au lieu des cellules vides, il y a plusieurs solutions :

  • MFC, pour appliquer à la police la même couleur que le remplissage, si la cellule = '0'
  • format de cellule personnalisé pour ne pas afficher les valeurs à '0'
  • si la feuille 1 peut contenir des '0' qui, eux, devraient être visibles en feuille 2, on peut modifier la formule en :
    =SIERREUR(INDEX(ListeID;LIGNES($1:1)+(COLONNES($A:A)-1)*8);"")&""
    =SIERREUR(SI(INDEX(ListeID;LIGNES($1:1)+(COLONNES($A:A)-1)*8)="";"";INDEX(ListeID;LIGNES($1:1)+(COLONNES($A:A)-1)*8));"")

Rebonjour U. Milité,

J'adore Excel, je le découvre depuis quelques mois seulement mais c'est un outils extraordinaire. Vous qui le maitrisés, vous avez de l'or dans les mains

Pour en revenir à notre sujet, tout fonctionne parfaitement bien, le tableau à entête avec la plage définie qui permet l'extension "automatique" et la formule modifiée qui ne fait plus apparaitre les zéros.

Ça fonctionne tellement bien que je voudrais du coup dans une autre feuille remplacer la macro par ta formule "INDEX". Le principe est le même mais dans l'autre sens, on passe d'un tableau à une liste. j'ai essayé ce matin de le faire en me basant sur ta formule mais je n'ai pas réussi. Les explications sur internet n'ont pas l'air de traiter ce genre là.

Si tu veux bien m'aider sur ce dernier point, je mets en pièce jointe l'exemple du tableau 2 retranscrit en liste en feuille 3

Mille mercis pour tout le temps que tu as consacré à mon problème.

Re et re et re, encore,

Le principe est le même mais dans l'autre sens, on passe d'un tableau à une liste

Quelque chose doit m'échapper
S'il s'agit de "reconstituer" la colonne B de la feuille 1, pourquoi repartir de la feuille 2 ?? Il suffit d'écrire

=SIERREUR(INDEX(ListeID;LIGNES($1:1));"")

... pour autant que tu aies converti en tableau et nommé la plage, en feuille 1, comme indiqué précédemment

Oui en effet ce serait bête.

Je parle d'un autre tableau, il a la même structure car le plan de travail est adaptable mais n'a pas les mêmes valeurs, ce sont vraiment deux choses indépendantes. Dans le classeur qui doit passer en liste, la feuille 1 n'existe pas le format de départ est le tableau qui correspond au plan de travail. En revanche l'appareil lui ne reconnait pas le format tableau, il faut donc passer en liste pour lui injecter.

Est ce que j'ai été plus compréhensible?

Teste, en A1 de ta 3e feuille :

=INDEX('2'!$B$6:$M$13;MOD(LIGNES($1:1)-1;8)+1;(LIGNES($1:1)-1)/8+1)

restera ensuite à masquer les '0', mais je te laisse adapter (je ne sais pas quel système tu as utilisé).
Si tu coinces, tu sais où nous trouver

En voyant ta solution je me dis que je suis encore très loin de comprendre ce que tu as fait.

Sache en tout cas que tout fonctionne parfaitement bien. L'ajout du masque des zéro via le <&""> fonctionne très bien aussi.

Je te renouvelle mes plus sincères remerciements pour tout le temps que tu as consacré à mes problèmes?

Rechercher des sujets similaires à "boucle liste tableau"