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

Excel VBA tableau

bigmousse

XLDnaute Occasionnel
Bonjour,
Petit souci avec VBA j'aimerais placer dans un tableau une plage de valeur, la colonne A et la colonne B, jusque là tout va bien :

Code:
TAB_BD_N°CTRL = BD_N°CTRL.Range("A1:B" & NB_LIGNE)

Maintenant je veux placer la colonne H egalement

Code:
TAB_BD_N°CTRL = BD_N°CTRL.Range("A1:B" & NB_LIGNE, "H1:H" & NB_LIGNE)


Et là c'est les colonnes de A à H qui sont dans mon tableau
Ai-je fais une erreur de synthaxe...
Merci
à+
 
Dernière édition:

bigmousse

XLDnaute Occasionnel
Re : Excel VBA tableau

J'ai essayer ce truc là :

Code:
Set MA_PLAGE = BD_N°CTRL.Range("A1:B" & NB_LIGNE)
Set MA_PLAGE = Application.Union(MA_PLAGE, BD_N°CTRL.Range("H1:H" & NB_LIGNE))
TAB_BD_N°CTRL = MA_PLAGE


marche pas non plus
???
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Excel VBA tableau

Bonjour Bigmouse, bonjour le forum,

Peut-êrte comme ça :
Code:
TAB_BD_N°CTRL = Application.Union(BD_N°CTRL.Range("A1:B" & NB_LIGNE), BD_N°CTRL.Range("H1:H" & NB_LIGNE))
 

bigmousse

XLDnaute Occasionnel
Re : Excel VBA tableau

Merci Robert mais ça ne fonctionne pas

J'ai essayé ça également :
Code:
 With BD_N°CTRL
 TAB_BD_N°CTRL = Application.Union(.Range(.Cells(1, 1), _
 .Cells(NB_LIGNE, 2)), .Range(.Cells(1, 8), .Cells(NB_LIGNE, 8)))
 End With

Mon tableau comporte tjrs deux colonnes et pas la troisième..
 

bigmousse

XLDnaute Occasionnel
Re : Excel VBA tableau

Je l'ai déclaré comme ceci :
Code:
Dim TAB_BD_N°CTRL

Je ne lui ai pas affecté de type ni de dimension, car après plusieurs essais j'y suis pas arrivé.
Une source exemple declare ce tableau comme indiqué ci-dessus, comme ça fonctionne je n'ai pas insisté.
Là ou je comprends pas c'est qu'un tableau commence par un indice "0".
Celui-ci non, pourquoi? je ne sais pas...

Je suis en train de tester et d'essayer de comprendre avec une procedure plus simple :

Code:
Sub main()
Dim Ma_Feuille As Worksheet
Dim Ma_Plage As Range
Dim TABLEAU
Set Ma_Feuille = ThisWorkbook.Worksheets("Feuil1")
Set Ma_Plage = Application.Union(Ma_Feuille.Range("A1:B" & 10), Ma_Feuille.Range("E1:E" & 10))
TABLEAU = Ma_Plage
End Sub

Merci pour ton aide
 

bigmousse

XLDnaute Occasionnel
Re : Excel VBA tableau

Je viens de faire un essai avec deux colonnes contiguës, lorsque je fais un essai avec deux colonnes non contiguës, ça ne fonctionne pas.


ça marche
Code:
Set Mon_Range = Application.Union(Ma_Feuille.Range("A1:A3"), Ma_Feuille.Range("B1:B3"))
TABL = Mon_Range

ça ne marche pas
Code:
Set Mon_Range = Application.Union(Ma_Feuille.Range("A1:A3"), Ma_Feuille.Range("C1:C3"))
TABL = Mon_Range
 

Pierrot93

XLDnaute Barbatruc
Re : Excel VBA tableau

Bonjour,

regarde ceci, à exécuter pas à pas (touche F8 dans l'éditeur vba), les "select" ne sont là que pour la démo...

Code:
Dim ws As Worksheet, plage As Range
Set ws = ActiveWorkbook.ActiveSheet
With ws
    Set plage = .Range("A:B")
    plage.Select
    Set plage = Union(plage, .Range("H:H"))
    plage.Select
End With

bon après midi
@+
 

bigmousse

XLDnaute Occasionnel
Re : Excel VBA tableau

Jusque là j'ai compris voilà mes trois colonnes de selectionnés ou un bject Range avec 3 colonnes.
Je veux mettre tout ça dans un tableau

Code:
Sub main2()
Dim ws As Worksheet, plage As Range
Set ws = ActiveWorkbook.ActiveSheet
Dim tabl
With ws
    Set plage = .Range("A:B")
    plage.Select
    Set plage = Union(plage, .Range("H:H"))
    plage.Select
    tabl = plage
End With
End Sub

J'ai bien mon tableau mais avec seulement 2 colonnes.
Moi j'aimerais avoir le total c'est à dire 3 colonnes


Merci
 

bigmousse

XLDnaute Occasionnel
Re : Excel VBA tableau

Bon, je reprends mon explication, et je m'excuse de ne pas m'être fait comprendre :

Code:
Sub main()
Dim Ma_Feuille As Worksheet
Set Ma_Feuille = ThisWorkbook.Worksheets("Feuil1")

'Je veux unir la plage A1:B10 avec C1:C10 et entrer les valeurs dans un tableau
'Le tableau s'appelle TAB_Plage
'Les deux plages sont contiguës
'dans l'explorateur de variable TAB_Plage possède bien 3 dimensions

Dim TAB_Plage
Dim Ma_Plage As Range
Set Ma_Plage = Application.Union(Ma_Feuille.Range("A1:B10"), _
Ma_Feuille.Range("C1:C10"))
TAB_Plage = Ma_Plage

'Je veux unir la plage A1:B10 avec D1:D10 et entrer les valeurs dans un tableau
'Le tableau s'appelle TAB_Range
'Les deux plages **ne sont pas contiguës**
'dans l'explorateur de variable TAB_Plage possède seulement 2 dimensions
' Quelle est la limite de la méthode UNION?????

Dim TAB_Range
Dim Mon_Range As Range
Set Mon_Range = Application.Union(Ma_Feuille.Range("A1:B10"), _
Ma_Feuille.Range("D1:D10"))
TAB_Range = Mon_Range

End Sub


Le deuxième bout de code (TAB_Range), ne me satisfait pas puisque je ne récupère pas toutes les colonnes de l'objet Mon_Range dans mon tableau TAB_Range.

Le premier bout lui fonctionne, y a t'il un rapport avec le fait que les plages ne sont pas contigües dans le deuxième bout??



Merci pour votre aide
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Excel VBA tableau

Re,

regarde les codes ci-dessous pour alimentation tableau virtuel par 3 colonnes non contigues, 1ere dimension est déterminée selon le nombre de ligne de la colonne A.... en espérant que cela puisse t'aider à avancer.... perso pas de solution directe avec union ou range....

Code:
Option Explicit
Sub test()
Dim t() As Variant, i As Long
ReDim t(0 To Range("A65536").End(xlUp).Row, 0 To 2)
For i = LBound(t) To UBound(t)
    t(i, 0) = Cells(i + 1, 1).Value
    t(i, 1) = Cells(i + 1, 2).Value
    t(i, 2) = Cells(i + 1, 8).Value
Next i
End Sub
Sub test2()
Dim t() As Variant, x As Long, i As Long
x = Range("A65536").End(xlUp).Row
t = Range("A1:B" & x).Value
ReDim Preserve t(1 To x, 1 To 3)
For i = 1 To x
    t(i, 3) = Cells(i, 8).Value
Next i
End Sub
 

Discussions similaires

Réponses
9
Affichages
244
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…