Tableau variable - d'une feuille à une autre

Bonjour à tous,

J'ai besoin de votre aide svp. J'ai cherché à créer un tableau variable (le nombre de lignes évolue) que je pourrai réutiliser par la suite dans d'autres feuilles.

Mon objectif prioritaire est de coller dans la feuille "Sheet2" 8 colonnes sélectionnées (dans l'ordre suivant 7, 0, 3, 5, 4, 6, 11, 10) parmi les 13 du tableau variable créé (les 13 colonnes du tableau variable elle-même crées à partir des 27 colonnes présentes dans la feuille "Sheet1"). Auriez-vous une astuce svp? MERCI BEAUCOUP.

Sub Macro()

Sheets("Sheet1").Select

n = Range("A2").End(xlDown).Row 'Dernière ligne base de données

Dim Tab1()

ReDim Tab1(n - 1, 12)

'''''''''''''''''''''Enregistrement dans un tableau variable

For i = 0 To n - 1

Tab1(i, 0) = Range("B" & i + 1)

Tab1(i, 1) = Range("C" & i + 1)

Tab1(i, 2) = Range("D" & i + 1)

Tab1(i, 3) = Range("E" & i + 1)

Tab1(i, 4) = Range("F" & i + 1)

Tab1(i, 5) = Range("H" & i + 1)

Tab1(i, 6) = Range("I" & i + 1)

Tab1(i, 7) = Range("K" & i + 1)

Tab1(i, 8) = Range("L" & i + 1)

Tab1(i, 9) = Range("M" & i + 1)

Tab1(i, 10) = Range("N" & i + 1)

Tab1(i, 11) = Range("O" & i + 1)

Tab1(i, 12) = Range("T" & i + 1)

Next

''''''''''''''''Coller 8 colonnes sélectionnées (dans l'ordre suivant 7 0 3 5 4 6 11 10) parmi les 13 du tableau variable créé dans la feuille Sheet2????''

''''''''''''''''''Mon objectif est de pouvoir réutiliser cette matrice générale de 13 colonnes dans d'autres feuilles par la suite

End Sub

Bonsoir alexnc,

Vois cet exemple :

Sub Tableau()
Dim a
    With Sheets("Feuil1").Range("A1").CurrentRegion
        a = Application.Index(.Value, Evaluate("row(1:" & _
                                               .Rows.Count & ")"), Array(1, 5, 7))
    End With
   'Restitution
    With Sheets("Feuil2").Range("A1").Resize(UBound(a, 1), UBound(a, 2))
        .Value = a
    End With
End Sub

klin89

Bonjour,

Merci beaucoup Klin89 . Dsl pour la réponse tardive mais je n'ai pas pu me connecter avant ce soir.

1) Je cherche maintenant à supprimer une ligne entière si 2 colonnes précises (la première et la quatrième de la matrice "a" (i lignes, 10 colonnes)) sur une même ligne ont la même valeur. J'ai donc pensé à ce code:

For i = 1 to 100

if a(i,1)=a(i,4) Then

Rows(i).EntireRow.Delete

End if

Next i

Le code ne fonctionne pas. Je l'ai inclus avant End Sub de la macro (plus bas).

2) J'aimerais également supprimer une ligne entière pour chaque fois que la 2ème colonne contient le mot "edition".

Si vous pouviez m'aider, ce serait top.

Merci encore.

Sub Tableau()

Dim a

With Sheets("Feuil1").Range("B1").CurrentRegion

a = Application.Index(.Value, Evaluate("row(1:" & _

.Rows.Count & ")"), Array(2, 5, 6, 8, 9, 11, 12, 13, 14, 15))

End With

'Restitution

With Sheets("Feuil2").Range("B1").Resize(UBound(a, 1), UBound(a, 2))

.Value = a

End With

End Sub

Bonjour alexnc,

Mon message est seulement pour ton point 1)

Quand on supprime des lignes, il faut toujours faire ce travail de bas en haut :

For i = 100 to 1 Step -1
  If a(i, 1) = a(i, 4) Then Rows(i).Delete
Next i

dhany

Hello tous!!!

Merci beaucoup Dhany pour ton aide, très appréciée. Cela m'a bien inspiré.

J'essaye de faire 2 choses:

1) j'aimerais que le travail fait sur les spreadsheets (1 et 2) se fasse au sein de la matrice pour gagner du temps d'execution. Auriez-vous une idée? A noter que le travail sur la spreadsheet 1 se fait sur la spreadsheet 1 parce que la colonne concernée dans la condition du IF n'existe plus dans la matrice qui sera collée dans la spreadsheet 2.

2) Les valeurs d'une colonne (la deuxième en partant de la gauche soit la n°5 de sheet 1) sont associées à des codes. Toutes les valeurs n'ont pas forcément un code associé. Celles qui n'en ont pas => suppression de la ligne. Je sèche un peu. J'ai pensé à une espèce de VLOOKUP qui si le résultat est trouvé, ok on remplace, si pas trouvé, on supprime la ligne en question.

Si quelqu'un pouvait m'aider là-dessus, ça serait magique!!!!!

Un grand merci!!!

Voici le code pour 1):

Sub Tableau()

'''''''''''' Travail sur la spreadsheet 1

Sheets("Sheet1").Select

i = 1

Do While Not (IsEmpty(ActiveSheet.Cells(i, 19)))

If Cells(i, 19).Value = "DELETED" Then

Rows(i).Delete

i = i

Else

i = i + 1

End If

Loop

'enregistrement de la matrice dans la sheet 1

Dim a

With Sheets("Sheet1").Range("B1").CurrentRegion

a = Application.Index(.Value, Evaluate("row(1:" & _

.Rows.Count & ")"), Array(2, 5, 6, 8, 9, 11, 12, 13, 14, 15))

End With

'Restitution de la matrice dans la sheet 2

With Sheets("Sheet2").Range("B1").Resize(UBound(a, 1), UBound(a, 2))

.Value = a

End With

'''''''''''' Travail sur la spreadsheet 2

Sheets("Sheet2").Select

j = 1

Do While Not (IsEmpty(ActiveSheet.Cells(j, 5)))

If Cells(j, 3).Value = "MISSED" Or Cells(j, 2) = Cells(j, 5) Or Cells(j, 5).Value = "ONGOING" Then

Rows(j).Delete

j = j

Else

j = j + 1

End If

Loop

End Sub

Rechercher des sujets similaires à "tableau variable feuille"