Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

erreur transposition d'une "array"

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gosselien

XLDnaute Barbatruc
Bonjour,

je m'essaye aux "array" et j'ai trouvé un exemple qui plante, je ne comprends pas pourquoi..

Quelqu'un peut m'expliquer pourquoi et ce que veut dire la ligne "ReDim Preserve Tblo1(1 To 5, 1 To f)"
pourquoi 1 to 5 ?
😡
et que faire si j'ai un nombre plus élevé de colonnes
(je suppose que 5 est le nombre de colonnes, bien sur)

(pas compris en allant sur le net)

Merci
 

Pièces jointes

Re : erreur transposition d'une "array"

Bonjour.
Non, 5 est le nombre de lignes, le nombre de colonnes c'est f.

Après examen c'est le nombre de ligne du tableau à transposer qui deviendra son nombre de colonnes après transposition.
 
Dernière édition:
Re : erreur transposition d'une "array"

Bonjour gosselien

ReDim Preserve Tblo1(1 To 5, 1 To f) signifie :
redimensionner le tableau a 5 lignes (numerotées de 1 a 5) et à f colonnes (numérotées de 1 à f)
en préservant son contenu
NB: le tableau est utilisé ainsi parce que la modification d'un tableau a 2 dimensions ne peut se faire que sur la 2 eme dimension
Le tableau sera repris dans après 'rotation de 90° ' (les lignes deviennent colonnes , les colonnes deviennent lignes) par le
Application.Transpose
Si plus de colonnes il te faudra modifier 1 à 5 devenant par exemple 1 à 10

Edit: Salut Bernard
 

Pièces jointes

Re : erreur transposition d'une "array"

Vous pourriez aussi faire comme ça :
VB:
Dim Le&, Ls&, C&
Tblo1 = Range("A2:E2").Resize([C65000].End(xlUp).Row - 1).Value
For Le = 1 To UBound(Tblo1)
   If Tblo1(Le, 3) > 500 Then
      Ls = Ls + 1
      For C = 1 To 5: Tblo1(Ls, C) = Tblo1(Le, C): Next C, Le
Worksheets("Filtré").Cells(1, 9).Resize(Ls, 5) = Tblo1
À tester.

Edit: Salut PierreJean.
 
Dernière édition:
Re : erreur transposition d'une "array"

Bonjour à tous


Pour recopier le tableau dans une feuille:
-Définir sur la feuille l'emplacement du coin supérieur gauche de la copie Sheets("Filtré").Range("I1")
- Dimensionner l'espace nécessaire en nombre de lignes et de colonnes de ce tableau Resize(UBound(Tblo1, 2), UBound(Tblo1, 1))
- éventuellement transposer le tableau pour mettre les colonnes en lignes Application.Transpose(Tblo1)

Sheets("Filtré").Range("I1").Resize(UBound(Tblo1, 2), UBound(Tblo1, 1)) = Application.Transpose(Tblo1)


A+
 
Re : erreur transposition d'une "array"

Bonjour,

Je vais lire vos réponses mais je vous remercie déjà pour vos réflexions, commentaires et explications 🙂
Je vais pouvoir essayer et adapter au besoin

Merci

P.
 
Re : erreur transposition d'une "array"

Re à tous...

je tente d'optimiser/compléter/améliorer/etc etc... ce code de "pierrejean" mais je me plante :

je cherche à ce que l'utilisateur puisse choisir une colonne et qu'un filtre (en dur provisoirement dans le code) se fasse à partir de cette colonne (et plus tard de 2 critères > que et < que...)
Je patauge lamentablement car (dur de comprendre les tableaux ) et je veux remettre en 2e feuille les colonnes dans le même ordre quelque soit celle qui est choisie en feuille1.
Je tente de mettre une variable () la place du offset -1) qui permettrait de permuter le code c.offset(0,-1) d'une ligne à l'autre.
Donc, si on choisi la 2e colonne, elle sera encore 2e dans le tableau filtré, et là 😡
Mon tableau a 7 colonnes mais pourrait évoluer donc le nombre de colonnes est mis en variable
Merci de votre aide et de commenter un minimum dans le code vba

P.
 

Pièces jointes

Re : erreur transposition d'une "array"

Bonjour

Si je comprend bien, il s'agit de copier la feuille base dans la feuille Filtré après avoir appliqué un filtre sur une colonne que l'utilisateur aura choisi.

Plutôt que de naviguer sur la feuille par for each et offset, il vaut sans doute mieux mettre l'ensemble des données dans un tableau, puis de naviguer dans ce tableau, c'est beaucoup plus rapide en exécution. et les colonnes du tableau ont le même ordre et le même N° que dans la feuille.


Code:
'on définit le tablo
  NbLig = Ws1.Range("A" & Rows.Count).End(xlUp).Row
  NbCol = Ws1.Range("A1").End(xlToRight).Column ' Nombre de colonnes du tableau
  MonTablo = Ws1.Range(Cells(2, 1), Cells(NbLig, NbCol))

Code:
'on balaye tout le tableau en filtrant sur la colonne correspondant à la colonne choisie (Acol)
'et on transfert dans l'autre tableau
  For i = LBound(MonTablo) To UBound(MonTablo)
    If MonTablo(i, Acol) >= 10 Then ' Range("condi1") And Range("condi2").Value Then
      f = f + 1
      ReDim Preserve Tblo1(1 To NbCol, 1 To f)
      For j = 1 To UBound(MonTablo, 2)
        Tblo1(j, f) = MonTablo(i, j)
      nextj
    End If
   Next i

A+
 
Re : erreur transposition d'une "array"

Bonjour le forum, Paf,

MERCI !

pas pensé à cette manière, preuve que je ne maitrise pas encore les tableaux; c'est vrai que de transférer de l'un à l'autre fait gagner un temps précieux; je vais à présent essayer d'y ajouter les 2 conditions et peut être la colonne à choisir d'une autre manière que avec le inputbox, mais plutot dans une liste déroulante reprenant les titres, comme déjà esquissé.

Le problème suivant sera que les fourchettes de choix devront être conformes au type de données de choisies: si on choisi "société" on ne pourrait prendre que un qui est dans la liste et pas en mettre une qui en est absente.

Bonne journée et encore merci, je reviendrai (peut être) sur ça dans les prochaines heures/jours suivant mon temps consacré.

Patrick
 
Re : erreur transposition d'une "array"

Re

à propos du code de la macro du classeur post #7,où vous rencontriez des soucis pour l'ordre des colonnes du tableau qui sera copié dans la feuille Filtré, puisque quelque soit la colonne filtrée, on copie dans l'ordre de la feuille base, on pourrait faire:
Code:
     ....
    If Cel.Value >= 10 Then ' Range("condi1") And Range("condi2").Value Then
      f = f + 1
      ReDim Preserve Tblo1(1 To NbCol, 1 To f)
   
      For i=1 to NbCol
          Tblo1(i, f) = WS1.Cells(Cel.row,i).Value
      Next         
    End If
    ....

A+
 
Re : erreur transposition d'une "array"

Re Re

Quant à la fourchette on pourrait passer par une USF et deux textbox alimentées des données de la colonne choisie au paravent.

cela reviendrai à utiliser un filtre automatique.

A+
 
Re : erreur transposition d'une "array"

Bonjour.
Je ne comprends vraiment pas pourquoi vous tenez à charger par des boucles accédant aux cellules alors que chacun des Tblo1(i, f) = WS1.Cells(Cel.row,i).Value est pratiquement aussi long à exécuter que le chargement une bonne fois pour toutes par une seule instruction de la UsedRange toute entière dans un tableau d'entrée.
 
Dernière édition:
Re : erreur transposition d'une "array"


Bonjour,

parce que, "simplement", je ne maîtrise pas les tableaux 🙂 et que ceci est un bon exercice pour apprendre et que ça va servir à quelqu'un qui pourrait avoir un grand nombre de données, donc j'avais pensé à ce tableau sans vraiment m'y connaitre, je commence à appréhender la chose ; voilà 🙂

Merci aux intervenants de ce fil qui n'est peut être pas fini.

ps: quand je connais les réponses, j'aide aussi dans la mesure de mes connaissances, et comme vous, j'ai aussi des choses que je connais et que je conseille ou déconseille)

Cordialement

Patrick
 
Re : erreur transposition d'une "array"

Les forums sont fait pour ça 🙂 Je vais donc relire ces différentes lignes pour tâcher de comprendre ...

"Le savoir n'est rien sans le partage et la communication" 🙂

Patrick
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
26
Affichages
1 K
Réponses
2
Affichages
1 K
R
Réponses
20
Affichages
4 K
RaVenSs
R
H
Réponses
3
Affichages
1 K
Hotburn
H
Réponses
5
Affichages
668
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…