Déplacement d'un tableau sur une feuille Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
atlonia
Membre fidèle
Membre fidèle
Messages : 427
Inscrit le : 10 mai 2017
Version d'Excel : 2007 FR

Message par atlonia » 31 mars 2019, 00:44

Bonsoir le forum,

J'ai un soucis avec ce tuto: http://www.apprentissage-virtuel.com/ex ... dimensions

Dans mon module "mod_Tab2Dimensions", je n'arrive pas à déplacer le tableau dans la plage de cellule ("D17:M26")... :oops:
Je pensais m'en sortir en modifiant simplement les valeurs des boucles iLig et iCol, mais j'obtient une erreur 9: L'indice n'appartient pas à la sélection... :scritch:

quelqu'un peut-il m'expliquer ce que je n'ai pas compris...?

Merci à tous pour votre aide... :)

Mon fichier joint :
B. A. Ba des Tableaux.xlsm
(25.6 Kio) Téléchargé 12 fois
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'580
Appréciations reçues : 252
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 31 mars 2019, 08:36

Bonjour,

Voici :
Sub Test()
    
    Dim Tbl(1 To 10, 1 To 10) As Integer
    Dim I As Integer
    Dim J As Integer
    
    For I = 1 To 10: For J = 1 To 10
    
            Tbl(I, J) = Cells(I + 1, J + 1)
            
    Next J, I
    
    Range(Cells(17, 4), Cells(16 + UBound(Tbl, 1), 3 + UBound(Tbl, 2))) = Tbl
    
End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'338
Appréciations reçues : 532
Inscrit le : 27 août 2012
Version d'Excel : 365 32 bits

Message par Jean-Eric » 31 mars 2019, 11:01

Bonjour,
Bonjour Theze,
Pourquoi n'as tu pas proposé ?
Cells(17, 4).Resize(UBound(Tbl), UBound(Tbl, 2)).Value = Tbl
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Avatar du membre
atlonia
Membre fidèle
Membre fidèle
Messages : 427
Inscrit le : 10 mai 2017
Version d'Excel : 2007 FR

Message par atlonia » 31 mars 2019, 23:37

Merci Theze et jean-eric,

Je vais garder vos deux proposition pour les étudier un peu plus... :)

On m'a proposé par ailleurs une correction de mon code d'origine que je met en dessous pour ceux qu ça intéresse.
Sub Tablo_Multiplication2()
Dim x, y, iCol, iLig As Integer
Dim Produit(10, 10) As Integer
'Sheets("Feuil1").Activate
' Ecrire le produit dans le tableau
For x = 1 To 10
   For y = 1 To 10
      Produit(x, y) = x * y
   Next y
Next x

' Puis écrire dans la feuille
[Surligner]For iLig = 17 To 26[/Surligner]
   [Surligner]For iCol = 4 To 13[/Surligner]
      Cells(iLig, iCol) = [Surligner]Produit(iLig - 16, iCol - 3)[/Surligner]
      ' Il faut ramener le curseur en début de ligne
      If iCol = 14 Then
         iCol = 4
      End If
   Next iCol
Next iLig
End Sub
Merci encore à vous deux pour votre aide... :good:
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'827
Appréciations reçues : 315
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 31 mars 2019, 23:43

Bonjour,
      ' Il faut ramener le curseur en début de ligne
      If iCol = 14 Then
         iCol = 4
      End If
Essaie quand de comprendre ce qu'on te propose pour progresser et éviter de rendre des âneries..
A quoi cela peut-il servir dans une boucle For iCol = 4 To 13 ?????
A rien...
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'580
Appréciations reçues : 252
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 1 avril 2019, 08:08

Bonjour,

Hello Jean-Eric, Eric :wink:
Jean-Eric, tu as raison mais les vieux réflexes et les habitudes ont la vie dure !!! :lol:
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Avatar du membre
atlonia
Membre fidèle
Membre fidèle
Messages : 427
Inscrit le : 10 mai 2017
Version d'Excel : 2007 FR

Message par atlonia » 2 avril 2019, 00:10

Bonsoir eriiic,

Merci pour ta remarque... :)

effectivement, après réflexion, si mon tableau s'arrête à la colonne 13, il n'ira jamais à la 14... :...:
J'ai donc supprimé les lignes concernées et ça fonctionne très bien...

J'essaie d'adapter les propositions de Theze et Jean-eric...
Mais j'ai bien du mal à y intégrer la multiplication de x par y, un petit coup de main serait le bienvenu... ;-b)

Et si j'ai déjà un peu progressé grâce à vous tous et je vous en remercie infiniment, mon niveau est encore loin de rivaliser avec le votre...

L'ânerie ne vient pas de moi, mais du tutoriel que je suivais...

Merci encore de partager votre savoir...
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 8'827
Appréciations reçues : 315
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 2 avril 2019, 00:31

Pour être précis et que tu ne te fasses pas avoir plus tard, à la dernière boucle iCol=13 le Next s'exécutera et iCol prendra bien la valeur 14.
C'est surtout le For iCol = 4 to ... qui le ramène à 4.

Pour t'aider toi même et progresser, tu devrais prendre du temps pour voir les outils de débogage : pas à pas, mettre un break ou un point d'arrêt conditionnel, et savoir comment évaluer ou espionner une variable ou une expression.
Ca te permet de bien voir l'évolution en pas à pas et si les valeurs correspondent bien à ce que tu as prévu.
http://www.commentcamarche.net/contents/1381-debogage
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
T
Theze
Passionné d'Excel
Passionné d'Excel
Messages : 3'580
Appréciations reçues : 252
Inscrit le : 26 janvier 2011
Version d'Excel : 2007

Message par Theze » 2 avril 2019, 07:23

Bonjour,

Voici :
Sub Test()
    
    Dim Tbl(1 To 10, 1 To 10) As Integer
    Dim X As Integer
    Dim Y As Integer
    
    For X = 1 To 10: For Y = 1 To 10
    
            Tbl(X, Y) = X * Y
            
    Next Y, X
    
    Cells(17, 4).Resize(UBound(Tbl), UBound(Tbl, 2)).Value = Tbl
    
End Sub
Il vaut mieux un qui sait que cent qui cherchent :wink:

Ce forum étant un lieu de partage, je n'accepte pas les messages privés !
Avatar du membre
atlonia
Membre fidèle
Membre fidèle
Messages : 427
Inscrit le : 10 mai 2017
Version d'Excel : 2007 FR

Message par atlonia » 3 avril 2019, 00:41

Bonsoir eriiic et Theze,

Merci eriiic pour tes explications et ton lien fort intéressant, qui m'a permit de mieux comprendre le débogage.... :)

Merci Theze pour ton code, mais peux-tu m'expliquer pourquoi tu déclare le tableau avec :
Dim Tbl(1 To 10, 1 To 10) As Integer
plutôt que
Option base 1
et la déclaration
Dim Tbl(10, 10) As Integer
.

Y-a-t'il un intérêt particulier l'un plus que l'autre qui m'échappe ?
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message