Automatiser hauteur de cellule selon sa valeur
Bonjour à tous,
Voilà, je cherche à automatiser une macro pour un tableau d'une 100taine de lignes.
Le but est de modifier la hauteur de ligne selon la valeur de d'une cellule présente dessus.
J'ai déjà réussi à faire cette étape mais je n'arrive pas à ré-exécuter la macro sur la cellule suivante.
Voici un aperçu de ma macro:
Sub LOG_2()
Range("C2").Select
Dim Hauteur
Hauteur = Range("C2").Value
Selection.RowHeight = Hauteur
Range("C2").Offset(1, 0).Select
End Sub
La solution est peut-être très simple, mais je découvre le VBA depuis hier et suis un peu perdu.
Toute proposition est la bienvenue!
Bonjour TOTO_W04,
J'ai écris cette petite macro qui fonctionne :
Sub ChangementLigne()
Dim DLigne As Integer
DLigne = Range("A65536").End(xlUp).Row
For i = 2 To DLigne
Range("A" & i).Select
Selection.RowHeight = Range("B" & i)
Next
End Sub
Cordialement,
Bonjour et
Je te propose le code ci-dessous:
Sub LOG_2()
Dim ligFin As Long
ligFin = Range("a" & Rows.Count).End(xlUp).Row
For i = 2 To ligFin
On Error Resume Next
Range("a" & i).RowHeight = Range("c" & i).Value
On Error GoTo 0
Next i
End SubIl y a plusieurs choses à comprendre dans ce code:
pour avoir le numéro de la dernière ligne remplie en colonne A, j'utilise: Range("a" & Rows.Count).End(xlUp).Row
Colonne A, dernière ligne (Rows.Count renvoie le nombre de lignes dans le classeur), et je fais l'équivalent du raccourci Ctrl+Flèche du haut, je pars vers le haut et m'arrête à la première cellule remplie, une fois que je la trouve, je renvoie son numéro de ligne en ajoutant .Row.
Une fois que j'ai ce numéro de ligne, (33 par exemple), il me reste à faire une boucle entre la première ligne, la 2, et la 33, je parcours donc les valeurs 2, 3, 4, 5... à 33 avec la boucle For... Next, la valeur est stockées dans la variable i.
Il me reste ensuite à utiliser cette variable quand j'ai besoin du numéro de ligne, seulement, écrire Range("Ai") ne marchera pas, il faut assembler du texte fixe avec une valeur variable, pour ça j'utilise & en écrivant: Range("A" & i), ensuite je change directement la valeur RowHeight en utilisant la valeur en Range("C" & i), donc la colonne C de la ligne qu'on traite, on utilise la valeur qu'une fois dans le programme, il n'est pas nécessaire de l'enregistrer dans une variable
J'ai rajouté On Error Resume Next, et On Error GoTo 0 pour gérer les erreurs que peut générer le changement de hauteur de ligne, pour la valeur 650.3, le programme plantait, seulement, avant je lui dis "en cas d'erreur, tu passes à la ligne suivante", puis après, je lui dis "en cas d'erreur, affiche un message d'erreur comme tu le fais d'habitude".
Choses dont j'ai parlé:
- Utilisation de Range.End pour obtenir un numéro de ligne: https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.end
- Boucle For...Next : https://www.excel-pratique.com/fr/vba/boucles.php
- Concaténation: https://docs.microsoft.com/fr-fr/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/concatenation-operators
- Gestion d'erreurs: https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/statements/on-error-statement
Bonne lecture