VBA explication codage

Bonjour,

Peut-on me (Traduire, m'expliquer, vulgariser) en clair, ces lignes

Merci

Nonno

 WiNonnoth Range("Tableau8").ListObject  'ce tableau
               .ListRows.Add(1).Range.Resize(, 17).Value = Application.Transpose(Sheets("Formulaire").Range("B4:B20").Value)

          End With

Bonjour,

With Range("Tableau8").ListObject
.ListRows.Add(1).Range.Resize(, 17).Value = Application.Transpose(Sheets("Formulaire").Range("B4:B20").Value)
End With


Explication détaillée:
With Range("Tableau8").ListObject: indique que le code va intervenir sur l'objet "ListObject" qui représente le tableau structuré "Tableau8" dans la feuille active.

.ListRows.Add(1): ajoute une nouvelle ligne en haut du tableau structuré ("Tableau8"). L'argument 1 signifie qu'une seule ligne sera ajoutée.

.Range.Resize(, 17): Ajuste la taille de la plage de la nouvelle ligne ajoutée pour qu'elle couvre 17 colonnes. La virgule avant la valeur "17" , signifie que le nombre de lignes n'est pas spécifié, ce qui signifie que seule la largeur (17 colonnes) est définie.

.Value = Application.Transpose(Sheets("Formulaire").Range("B4:B20").Value): Détail de cette partie :
Sheets("Formulaire").Range("B4:B20").Value récupère les valeurs de la plage "B4:B20" de la feuille nommée "Formulaire".
Application.Transpose(...) transpose les valeurs récupérées pour qu'elles s'adaptent à la nouvelle ligne ajoutée (une ligne au lieu d'une colonne).
Enfin, .Value = ... affecte les valeurs transposées à la plage de la nouvelle ligne ajoutée dans la table "Tableau8".

En résumé, ce bout de code, ajoute une nouvelle ligne en haut de la table "Tableau8" et y insère les valeurs de la plage "B4:B20" de la feuille "Formulaire", en les transposant pour qu'elles correspondent à la largeur de la nouvelle ligne ajoutée.

Est-ce plus clair?

Cdlt

bonjour Nonno, Arturo83,

quelque petites choses

With Range("Tableau8").ListObject: indique que le code va intervenir sur l'objet "ListObject" qui représente le tableau structuré "Tableau8" dans la feuille active.

Tableau8 peut se trouver n'importe où, pas nécessairement la feuille active. Donc si vous testez cette macro avec le TS dans "FeuilleX" et ca fonctionne, puis vous déplacez le TS vers FeuilleY, il ne faut pas changer la macro. Une restriction : cela ne fonctionne que dans des modules normaux, pas dans les modules des feuilles.

.ListRows.Add(1)

on ne peut insérer qu'une ligne à la fois (si on veut plusieurs, il faut utiliser un loop, sauf on insère en dessous le ts, là, c'est possible en une fois, logique!!) et le 1, c'est l'index, donc on insère une nouvelle ligne à la position de la ligne 1

.Range.Resize(, 17)

On insère toujours une nouvelle "listrow" complète, donc autant de colonnes que le tableau contient, mais on utilisera que les 17 premières cellules pour écrire les 17 valeurs de la feuille "formulaire". Ce n'est pas nécessaire de commencer dans la première cellule de la nouvelle listrow, si on veut commencer à la 3ième (relatif = C1), on écrit .ListRows.Add(1).Range.Range("C1").Resize(, 17).Value. Ces 17 , si on commence à la 3ième cellule et on utilise 17 celulles = du 3ième au 19ième, si cette 19ième cellule est hors du tableau, cela peut poser des problèmes, le tableau essayera 'd'ajuster ces dimensions et si cela n'est pas possible ....

j'aime ces constructions (un petit peu plus complex) parce que je déteste de déclarer des variables qu'on n'utilise qu'une fois. Au début, c'est peut-être difficile, mais c'est comme assembler des blocs de Lego pour créer quelque chose plus grand. Avec chaque point dans votre "lego" vous ajoutez un niveau en dessus.

Bonjour Arturo, Bonjour Bart

Merci à tous les deux, c'est du coup un peu plus clair pour moi, même si je ne comprends pas tout.

Autre question, est-ce que l'insertion prends compte les valeurs uniquement ou des formats aussi?

Il y a écrit: "Value" donc, les valeurs uniquement.

Mais le plus simple, c'est de faire des essais et vous verrez bien le résultat qui en découle.

Cdlt

re,

seulement les valeurs, mais si vous voulez tout, peut-être ceci (je ne l'ai pas testé, parce que c'est midi)

Sub test2()
     Sheets("Formulaire").Range("B4:B20").Copy
     Range("Tableau8").ListObject.ListRows.Add(1).Range.Resize(, 17).PasteSpecial xlAll, Transpose:=True
End Sub

Merci pour toutes vos explications, je vais tester ça.

Cordialement

Nonno

Rechercher des sujets similaires à "vba explication codage"