Vba copier les données d'un array à un autre
Arthyss
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
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 :(
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:
- Vba copier les données d'un array à un autre
- Fuite données maif - Guide
- Copier un disque dur sur un autre - Guide
- Supprimer les données de navigation - Guide
- Retrouver un copier-coller android - Guide
- Comment copier une vidéo youtube - Guide
3 réponses
Bonjjour
comme tu veux un tableau tampon rempli avec les conditions <>22 <>1
on incrémente que dans ce cas
mais je n'ai pas vu la déclaration des dimensions du tableau tampon
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
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 :(
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
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
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
Dans la partie " CORRIGER DONNEES " quand j'essais d'envoyer les données de mon 1er tableau au 2nd