Vba copier les données d'un array à un autre

Fermé
Arthyss Messages postés 22 Date d'inscription mercredi 22 mars 2017 Statut Membre Dernière intervention 28 avril 2017 - 27 avril 2017 à 15:52
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 28 avril 2017 à 10:08
Bonjour,

J'ai un soucis avec mon code...
Je récupère toutes les données d'un classeur A, que je copie dans un "tableau virtuel" (array) où je voudrais corriger/supprimer mes données, puis copier les données corrigées dans mon classeur excel.

Le copier / coller fonctionne, j'ai donc voulu essayer de corriger les données avec l'aide d'un autre tableau (en ne copiant que les lignes que je veux)

mon problème se trouve dans la zone "CORRIGER DONNEES"
j'ai essayé de copier que les lignes différentes de 1 et 22 dans mon nouveau Tableau Virtuel. Mais j'ai un message d'erreur :(

option explicit
Sub tableau_virtuel()

    Application.ScreenUpdating = False
    Dim Tableau, Tableau_Tampon As Variant
    Dim wka, wkb As Workbook
    Dim chemin As String, fichier As String
    Dim nblig_tab, nbcol_tab, lig_traquee, col_traquee, Ligne_Tableau_Tampon, Colonne_Tableau_Tampon As Long
    'chemin où se trouve le classeur commandes_fournisseurs
    chemin = "C:\Users\sa885431\Desktop\Stage\Portefeuille\"
    fichier = "commandes_fournisseurs.xlsx"
    
    Set wka = ThisWorkbook
    'ouverture du nouveau classeur
    Workbooks.Open chemin & fichier
    Set wkb = ActiveWorkbook
     
     
     
    ' ****** COPIER DONNEES DANS LE TABLEAU VIRTUEL  ******
    wkb.Worksheets.Item(1).Activate
    'Calcul des lignes et colonnes du fichier
    nblig_tab = WorksheetFunction.CountA(wkb.Worksheets.Item(1).Columns.Item("A"))
    nbcol_tab = WorksheetFunction.CountA(wkb.Worksheets.Item(1).Rows.Item(1))
  
    'Dimensionnement du tableau 
    ReDim Tableau(1 To nblig_tab, 1 To nbcol_tab)
    Tableau = Range(Cells(1, 1), Cells(nblig_tab, nbcol_tab))
        

' ****** CORRIGER DONNEES ****** 
    Ligne_Tableau_Tampon = 1
    Colonne_Tableau_Tampon = 1
    For lig_traquee = 1 To nblig_tab
        For col_traquee = 1 To nbcol_tab
            'On regarque pour chaque ligne du tableau fictif si l'article vaut 1 ou 22
            If (Tableau(lig_traquee, 14) <> 22) Or (Tableau(lig_traquee, 14) <> 1) Then
                Tableau_Tampon(Ligne_Tableau_Tampon, Colonne_Tableau_Tampon) = _
                Tableau(lig_traquee, col_traquee) 'copier les lignes "bonnes" dans le nouveau tableau
            End If
            Colonne_Tableau_Tampon = Colonne_Tableau_Tampon + 1
        Next
        Ligne_Tableau_Tampon = Ligne_Tableau_Tampon + 1
   Next
  
   
    ' ******COLLER DONNEES DANS LE TABLEAU VIRTUEL ******
    wka.Worksheets.Item("Feuil1").Activate
    Selection.ClearContents
    Range(Cells(1, 1), Cells(UBound(Tableau, 1), UBound(Tableau, 2))) = Tableau
    
    
        
    Application.CutCopyMode = False
    wkb.Close saveChanges:=True
    Application.ScreenUpdating = True
    


End Sub
A voir également:

3 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
27 avril 2017 à 16:36
Bonjour,

Mais j'ai un message d'erreur :(
Certes, mais lequel et a quelle ligne ?
0
Arthyss Messages postés 22 Date d'inscription mercredi 22 mars 2017 Statut Membre Dernière intervention 28 avril 2017 5
Modifié le 28 avril 2017 à 09:41
Bonjour

Dans la partie " CORRIGER DONNEES " quand j'essais d'envoyer les données de mon 1er tableau au 2nd
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
27 avril 2017 à 16:36
Bonjjour

comme tu veux un tableau tampon rempli avec les conditions <>22 <>1
on incrémente que dans ce cas
 'Ligne_Tableau_Tampon = 1 INUTILe
'Colonne_Tableau_Tampon = 1 INUTILE
For lig_traquee = 1 To nblig_tab
For col_traquee = 1 To nbcol_tab
'On regarque pour chaque ligne du tableau fictif si l'article vaut 1 ou 22
If (Tableau(lig_traquee, 14) <> 22) Or (Tableau(lig_traquee, 14) <> 1) Then
Ligne_Tableau_Tampon = Ligne_Tableau_Tampon + 1
Colonne_Tableau_Tampon = Colonne_Tableau_Tampon + 1
Tableau_Tampon(Ligne_Tableau_Tampon, Colonne_Tableau_Tampon) = _
Tableau(lig_traquee, col_traquee) 'copier les lignes "bonnes" dans le nouveau tableau
End If
Colonne_Tableau_Tampon = Colonne_Tableau_Tampon + 1
Next


mais je n'ai pas vu la déclaration des dimensions du tableau tampon

0
Arthyss Messages postés 22 Date d'inscription mercredi 22 mars 2017 Statut Membre Dernière intervention 28 avril 2017 5
Modifié le 28 avril 2017 à 10:08
Bonjour Michel

N'ayant pas fais de cours sur les array et un accès internet très limité j'ai un peu de mal.. j'ai essayé en ajoutant une ligne à ton code, mais tjrs le même problème :(

  
 For lig_traquee = 1 To nblig_tab
        For col_traquee = 1 To nbcol_tab
            'On regarque pour chaque ligne du tableau fictif si l'article vaut 1 ou 22
            If (Tableau(lig_traquee, 14) <> 22) Or (Tableau(lig_traquee, 14) <> 1) Then
                Ligne_Tableau_Tampon = Ligne_Tableau_Tampon + 1
                Colonne_Tableau_Tampon = Colonne_Tableau_Tampon + 1
                ReDim Tableau(1 To Ligne_Tableau_Tampon, 1 To Colonne_Tableau_Tampon)
                Tableau_Tampon(Ligne_Tableau_Tampon, Colonne_Tableau_Tampon) = _
                Tableau(lig_traquee, col_traquee) 'copier les lignes "bonnes" dans le nouveau tableau
            End If
            Colonne_Tableau_Tampon = Colonne_Tableau_Tampon + 1
        Next
    Next
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 28 avril 2017 à 10:17
Bonjour,

Je m'aperçois que tu sembles ne pas avoir lu mon code concernant l'incrémentation....

pour déclarer tableau tampon , le plus simple pour toi est de le déclarer de la même taille que le tableau. sur la feuille 1 de reception prévoir de la place en dessous de la restitution...

autrement, mais plus compliqué, (avec une limite de lignes < 65537) pour déclarer un tableau dynamique voir
https://silkyroad.developpez.com/vba/tableaux/

Pour l'anecdote:
-un "Array" ne comporte qu'une dimension
- chaque variable doit ^tre déclarée par son type et non une seule fois à la fin de la ligne
Dim nblig_tab as long, nbcol_tab as long etc.
Long indique que tu as plus de 65536 lignes

 Michel
0