Rendre une colonne dynamique dans la formule Range("D" & ligne)

Bonjour

Imaginons que j'ai un tableau ci-dessous.

titre1titre2titre3titre4colonne1colonne2
id1110111001009
id2220212002009
id3330313003009
id4440414004009
id5550515005009
id6660616006009
id7770717007009
id8880818008009

Je veux lire les infos dans colonne1 et les multiplier par 5.

je stocke le résultat dans un tableau intermédiaire.

puis j'affiche les résultats de ce tableau.

j'ai le code VBA ci-dessous qui est adapté à la position de mon tableau dans excel (le tableau commence à la conne H)

Sub calculer()

Dim tableau(7, 0) 'tableau 8 lignes et 1 colonnes

For ligne = 0 To 7 'pour lire et calculer

tableau(ligne, 0) = Range("H" & ligne + 2) * 5

Next

For ligne = 0 To 7 'pour afficher les résultats

Range("P" & ligne + 2) = tableau(ligne, 0)

Next

End Sub

le problème, c'est que si je décide des colonnes entre titre4 et colonne 1, le VBA ne fonctionne plus.

comment je peux rendre Range("H" & ligne + 2) dynamique?

Dans un autre cas, j'utilise la colonne H et je cherche le max

j'ai donc un "range (H:H)" dans ma formule VBA mais j'ai définir un nom à la colonne pour l'appeler dans le code .

image

Lé decalage des colonnes ne me gene pas dans ce cas.

Mais dans le 1er cas, je ne sais pas quoi faire.

une piste?

5fichier1.xlsm (18.77 Ko)

Bonjour,

Si j'ai bien compris vous cherchez à multiplier les valeurs de plusieurs colonnes par un facteur en passant par un array, dans ce cas, en partant du principe que votre plage de valeur s'étend de D2 à E9 (j'ai copier votre tableau à partir de A1) :

Sub calculer()
Dim tableau As Variant, C As Byte, L As Byte
tableau = [D2:E9] 'Plage à multiplier
For C = LBound(tableau, 2) To UBound(tableau, 2)
    For L = LBound(tableau, 1) To UBound(tableau, 1)
        tableau(L, C) = tableau(L, C) * 5 'Facteur de multiplication
    Next L
Next C
[P2].Resize(UBound(tableau), 2) = tableau 'Première cellule de la plage de résultat
End Sub

A adapter.

Cdlt,

Bonjour

Bonjour à tous

j''ai compris autre chose mais j'ai sûrement tort :

Si on ajoute des colonnes entre celle de "Titre 4", et de colonne1la macro ne marche plus

Si c'est là ton problème, il te faut nommer le tableau de la "colonne1"

14fichier1-v1.xlsm (23.63 Ko)

Bye !

Bonjour gmb,

Non je pense que tu as raison ! J'ai relu la phrase dans tous les sens, le "je décide des colonnes entre titre4 et colonne 1" mais n'ai pas réussi à la déchiffrer. Mais au vu de ton interprétation c'est fort possible qu'il manque un "d'insérer" !

Bon au moins ça m'aura permis de travailler un peu sur les arrays !

Cdlt,

oui j'ai oublié le mot "insérer".

je décide d'insérer des colonnes entre titre4 et colonne 1

je regarde votre solution et je vous poserai des questions car y a un truc que je comprends pas

Bonjour

Bonjour à tous

j''ai compris autre chose mais j'ai sûrement tort :

Si on ajoute des colonnes entre celle de "Titre 4", et de colonne1la macro ne marche plus

Si c'est là ton problème, il te faut nommer le tableau de la "colonne1"

dans le fichier-joint, dans le code vba, j'ai 2 questions!

question1

il y a un "&" après la variable ligne que je comprends pas

image

A quoi ca sert "Dim ligne&" ?

question2

aussi dans "tableau (ligne,1)" pourquoi tableau est en 2 dimensions?

il vient d'où le ",1"?

image

pourquoi il n'y a pas que "tableau (ligne)" puisqu'on déclare un tableau qui ne présente que une seule colonne?

merci

la solution est presque bonne, il reste juste un probleme.

si jamais j'ai des lignes vides, ca ne marche plus.

j'aimerai que s'il y a des lignes vides, ca enregistrre quand meme la cellule.

or avec les cellules vide, le comptage du nombre de cellule pour dimensionner le tableau n'est pas correct et ca fausse donc l'enregistrement des valeurs.

commet faire svp?

Bonjour

il y a un "&" après la variable ligne que je comprends pas

Ce symbole, collé après la variable équivaut à écrire « As Long » : c’est plus vite écrit !

dans "tableau (ligne,1)" pourquoi tableau est en 2 dimensions?

parce que tableau est ici une variable tableau et une variable tableau défini à partir d'un tableau de feuille de calcul a 2 dimensions : des lignes et des colonnes (ici une seule colonne)

si jamais j'ai des lignes vides, ca ne marche plus.

Nouvelle version pour tenir compte de ça :

13fichier1-v2.xlsm (22.54 Ko)

Bye !

merci c'est très clair.

question bonus:

Si jamais dans le le futur, je veux insérer des lignes au desus du tableau (c'est à dire décaler mon tableau vers le bas) , la taille de Range("colonne1") n'est plus la meme c'est ca?

Comme ca prend la derniere ligne, je dois tenir compte des lignes insérées qui sont au-dessus si je comprends le code VBA ci-dessous

tableau = Range("Colonne1").Resize(Cells(Rows.Count, cln).End(xlUp).Row, 1)

je pose une question en l'air : c'est possible de tenir compte des instetions de ligne au dessus du tableau?

Si jamais dans le le futur, je veux insérer des lignes au desus du tableau...

Dans ce cas, utilise cette nouvelle version. Tu pourras alors ajouter les lignes et les colonnes que tu voudras. Le résultat sera toujours aux mêmes lignes que le tableau de départ et 5 colonnes plus à droite.

9fichier1-v3.xlsm (24.14 Ko)
Sub calculer()

    Dim tableau, ligne&, ln&, cln&
    cln = Range("Colonne1").Column
    ln = Range("Colonne1").Row
    tableau = Range("Colonne1").Resize(Cells(Rows.Count, cln).End(xlUp).Row, 1)
    For ligne = 1 To UBound(tableau, 1) - 1
        Cells(ln + ligne - 1, cln + 6) = tableau(ligne, 1) * 5
    Next ligne

End Sub

Bye !

merci pour la réponse!
juste un truc bizarre:

j'ai inséré des lignes et avec la V3, ca me rajoute des zeros à la fin (autant de 0 que de lignes insérées).

C'est normal?

si tu as du temps ce sera super, sinon pas grave

image
Rechercher des sujets similaires à "rendre colonne dynamique formule range ligne"