Excel : modification d'une range dans une boucle
Dernière réponse : dans Programmation
Bonjour,
J'essaie d'afficher un tableau de String sous forme de vecteur colonne dans Excel.
Voici mon code :
Malheureusement, le code plante à la 1ère itération de la boucle. J'ai pourtant vérifié au débuggage que le paramètre col & (row+i) donnait bien quelque chose sous la forme "A3", et que s(i) était bien reconnu comme un String, mais la fonction s'arrête tout simplement à cette ligne, sans même créer une erreur...
Si quelqu'un a une idée...
Merci !
J'essaie d'afficher un tableau de String sous forme de vecteur colonne dans Excel.
Voici mon code :
Sub tableau(ByRef s() As String)
' Ecrit en tableau (vecteur colonne) le vecteur passé en paramètre
Dim i As Long, row As Long
Dim col As String
col = ColumnLetter(ActiveCell.Column)
row = ActiveCell.row
For i = 1 To UBound(s)
Range(col & (row + i)).Value = s(i)
Next i
End Sub
Malheureusement, le code plante à la 1ère itération de la boucle. J'ai pourtant vérifié au débuggage que le paramètre col & (row+i) donnait bien quelque chose sous la forme "A3", et que s(i) était bien reconnu comme un String, mais la fonction s'arrête tout simplement à cette ligne, sans même créer une erreur...
Si quelqu'un a une idée...
Merci !
Autres pages sur : excel modification range boucle
Lassé par la pub ? Créez un compte
Salut,
Il n'y a effectivement pas confusion de ta part, mais l'utilisation de la méthode Cells() en lieu et place de Range() dans ce cas est plus judicieux.
Car en effet, quel alambic !!! Avec une fonction ColumnLetter(), avec deux variables, etc.
Voilà le code que oozenot (
) te proposait de créer :
C'est quand même plus simple et plus clair.
Si je me permets de lui gâcher le plaisir de te voir trouver toi-même cette solution, c'est que je propose une autre attaque du problème. On fait des calculs savants (euh, en fait une bête addition
) alors qu'on ne cherche qu'à se décaler de i cases. Allons :
Il n'y a effectivement pas confusion de ta part, mais l'utilisation de la méthode Cells() en lieu et place de Range() dans ce cas est plus judicieux.
Car en effet, quel alambic !!! Avec une fonction ColumnLetter(), avec deux variables, etc.
Voilà le code que oozenot (
) te proposait de créer :
Dim i As Long, row As Long, col As Long
col = ActiveCell.Column
row = ActiveCell.row
For i = LBound(s) To UBound(s)
Cells(row + i, col).Value = s(i)
Next
C'est quand même plus simple et plus clair.
Si je me permets de lui gâcher le plaisir de te voir trouver toi-même cette solution, c'est que je propose une autre attaque du problème. On fait des calculs savants (euh, en fait une bête addition
) alors qu'on ne cherche qu'à se décaler de i cases. Allons :Ça me paraît encore plus simple, et donc encore plus facile à comprendre.
Dim i As Long
For i = LBound(s) To UBound(s)
ActiveCell.Offset(i).Value = s(i)
Next
Merci pour vos réponses. C'est effectivement une écriture plus simple pour faire la même chose, mais ça ne marche toujours pas
Voici le code simplifié que j'utilise maintenant :
Au debugage, il détecte bien que s(1) est "S", mais il s'arrête à cette ligne. Plus rien ne se passe, comme si j'avais appuyé sur stop
Voici le code simplifié que j'utilise maintenant :
Sub tableau(s() As String)
' Ecrit en tableau (vecteur colonne) le vecteur passé en paramètre
Dim i As Long
Range("A5").Value = s(1) ' ligne ajoutée pour test
For i = LBound(s) To UBound(s)
ActiveCell.Offset(i).Value = s(i)
Next i
End Sub
Au debugage, il détecte bien que s(1) est "S", mais il s'arrête à cette ligne. Plus rien ne se passe, comme si j'avais appuyé sur stop
J'ai trouvé l'explication sur un autre forum. En fait, j'appelais le sub tableau dans une fonction que je tapais dans une cellule Excel. Or il semblerait qu'une fonction tapée dans une cellule ne peut pas modifier d'autres cellules que la cellule concernée.
C'est tout bête, mais il fallait le savoir...
Merci pour votre aide !
C'est tout bête, mais il fallait le savoir...
Merci pour votre aide !
Lassé par la pub ? Créez un compte
- Contenus similaires :