problème basique avec matrice

babou466

XLDnaute Junior
bonjour, je cherche à afficher des valeurs dans un tableau excel, plus loin sur ma feuille, en utilisant une variable tableau(une matrice, car un tableau à deux dimensions), voici ce que j'ai créé mais ça ne fonctionne pas...quelqu'un pourrait 'il m'éclairer, je débute sur vba...
Sub Macro1()
'creation d'une fonction permettant de stocker des valeurs de cellules
'dans un tableau,variable de passage puis d'afficher les valeurs dans
'des cellules plus loin

Dim tableau(1 To 4, 1 To 3) As Variant
'crée un tableau de 4*3
Dim vlLigne As Integer
Dim vlColonne As Integer
Dim i, j As Integer
vlLigne = 4
vlColonne = 1
Row = 2
Column = 6

For i = 0 To 3 'stockage des données dans un tableau fictif
For j = 0 To 2
tableau(i, j) = Cells(vlLigne, vlColonne).Value
vlColonne = vlColonne + 1
Next j
vlLigne = vlLigne + 1
Next i

For i = 0 To 3 'affichage du tableau plus loin
For j = 0 To 2
Cells(Row, Column).Value = tableau(i, j) 'pour afficher?print pas compatible
Column = Column + 1
Next j
Row = Row + 1
Next i

End Sub
 

babou466

XLDnaute Junior
Re : problème basique avec matrice

Dim tableau(1 To 4, 1 To 3) As Variant
'crée un tableau de 4*3
Dim vlLigne As Integer
Dim vlColonne As Integer
Dim i, j As Integer
vlLigne = 4
vlColonne = 1
Row = 2
Column = 6

For i = 1 To 4 'stockage des données dans un tableau fictif
For j = 1 To 3
tableau(i, j) = Cells(vlLigne, vlColonne).Value
vlColonne = vlColonne + 1
Next j
vlLigne = vlLigne + 1
Next i

For i = 1 To 4 'affichage du tableau plus loin
For j = 1 To 3
Cells(Row, Column).Value = tableau(i, j) 'pour afficher à partir de la case coin haut gauche voulu
Column = Column + 1
Next j
Row = Row + 1
Next i

End Sub


en fait je n'ai réussi à déplacer que la première ligne de mon tableau...
 

ROGER2327

XLDnaute Barbatruc
Re : problème basique avec matrice

Bonjour babou466,
Essayez le code :
Code:
Sub Macro1()
'creation d'une fonction permettant de stocker des valeurs de cellules
'dans un tableau,variable de passage puis d'afficher les valeurs dans
'des cellules plus loin
Dim tableau(1 To 4, 1 To 3) As Variant
'crée un tableau de 4*3
Dim vlLigne As Integer
Dim vlColonne As Integer
Dim vlLigne2 As Integer
Dim vlColonne2 As Integer
Dim i, j As Integer
    vlLigne = 4
    vlLigne2 = 2
    For i = 1 To 4 'stockage des données dans un tableau fictif
        vlColonne = 1
        For j = 1 To 3
            tableau(i, j) = Cells(vlLigne, vlColonne).Value
            vlColonne = vlColonne + 1
        Next j
        vlLigne = vlLigne + 1
    Next i
    For i = 1 To 4 'affichage du tableau plus loin
        vlColonne2 = 6
        For j = 1 To 3
            Cells(vlLigne2, vlColonne2).Value = tableau(i, j) 'pour afficher?print pas compatible
            vlColonne2 = vlColonne2 + 1
        Next j
        vlLigne2 = vlLigne2 + 1
    Next i
End Sub
S'il vous convient, comparez-le avec le vôtre pour comprendre pourquoi il ne fonctionne pas. En cas de problème, revenez-ici.​
Bon courage !
ROGER2327
 

babou466

XLDnaute Junior
Re : problème basique avec matrice

bonjour,
j'ai également réalisé ce code, il marche comme je le souhaite, cependant je ne comprend pas la nécissité de la ligne en rouge...
quelqu'un pourrait me renseigner s'il vous plait?
merci

Lorsqu’on veut à partir d’un tableau 2 dimensions mettre les lignes du tableau les unes à la suite des autres, sur la même ligne :

Sub Macro2()

Dim tableau(1 To 4, 1 To 3) As Variant
'crée un tableau de 4*3 par exemple
Dim vlLigne As Integer
Dim vlColonne As Integer
Dim vlLigne2 As Integer
Dim vlColonne2 As Integer
Dim i, j As Integer
vlLigne = 4 ‘première ligne du tableau de départ
vlLigne2 = 2 ‘ligne sur laquelle seront toutes les données
vlColonne2 = 6 ‘première colonne de la ligne finale

For i = 1 To 4 'stockage des données dans un tableau fictif
vlColonne = 1
For j = 1 To 3
tableau(i, j) = Cells(vlLigne, vlColonne).Value
vlColonne = vlColonne + 1
Next j
vlLigne = vlLigne + 1
Next i
For i = 1 To 4 'affichage du tableau avec les valeurs des lignes à la suite

For j = 1 To 3
Cells(vlLigne2, vlColonne2).Value = tableau(i, j) 'pour afficher
vlColonne2 = vlColonne2 + 1
Next j
vlColonne2 = vlColonne2 + 0
Next i
End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : problème basique avec matrice

Bonjour babou466.
  1. (...) faut il déclarer un compteur et les variables qui me servent dans les boucles for (...)
    La déclaration est obligatoire si vous déclarez
    Code:
    Option Explicit
    en préambule de votre code. Personnellement, je le fais toujours, considérant que :
    • La déclaration rend le code plus lisible.
    • Le typage correct (As String, As Integer...) rend généralement le code plus rapide et moins gourmand en ressources lors de l'exécution.
      À noter que
      Code:
      Dim i, j As Integer
      ne déclare que j comme entier court, i prenant le type Variant par défaut. De plus, s'agissant ici d'une déclaration d'indices de tableaux, le typage correct est
      Code:
      Dim i As Long, j As Long
      car à le type des indices de tableaux est Long.
  2. (...) suis-je tout le temps oubligé de mettre vl, que ce soit dans la déclaration de ma variable, ou dans mon programme? (...)
    Non. Votre variable vlLigne peut aussi bien être nommée Ligne. Notez que ce peut être une sage précaution (en vue de la maintenance) que de préfixer le nom des variables en fonction de leur rôle.
  3. La ligne
    Code:
    [COLOR="Red"]vlColonne2 = vlColonne2 + 0[/COLOR]
    me semble inutile. Supprimez-là pour voir...
Voilà...​
Bon courage,
ROGER2327
 

babou466

XLDnaute Junior
Re : problème basique avec matrice

Bonjour,j’ai trouvé les réponses à mes précédentes questions, cependant j’ai encore quelques soucis…

Comment bloquer le message, souhaitez vous enregistrer les modifications effectuées à un classeur excel quand on le ferme après l’avoir utilisé, pour une problème de mémoire ?
Etant donné que je met automatiquement non ?

De la même façon, comment bloquer le message « des liaisons existent avec un autre classeur… » ? auquel je répond également toujours non ?

merci
 

Statistiques des forums

Discussions
312 555
Messages
2 089 562
Membres
104 214
dernier inscrit
palp