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

gérer un grand tableau avec ARRAY

  • Initiateur de la discussion Initiateur de la discussion lodam
  • Date de début Date de début

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 !

lodam

XLDnaute Occasionnel
Bonsoir

J'ai une feuille avec de nombreuses cellules nommées.
Une macro me permet de sauvegarder toutes ces données dans une autre feuille en reprenant le nom de chacune de ces cellules.
Je cherche à concevoir une formule la plus courte possible mais je dois faire une erreur de syntaxe ; mais je ne la vois pas :

dim donnes as range
dim i as integer
donnees = array (code_devis, code_dossier_devis, code_client_devis, date_devis, genre_client, prenom_client, nom_client, date_chargement, adresse1_chargement, adresse2_chargement)

for i 1 to 56 '(il y a bcp de données !)
ActiveCell.Offset(0, i).Value = Range("donnes(i)").Value
next i
 
Re : gérer un grand tableau avec ARRAY

bonjour lodam

je ne comprands pas la finalité du code m'enfin je crois voir ce que tu cherches.

array te defini un tableau avec si j'ai bien compté 10 valeurs

for i 1 to 56 '(il y a bcp de données !)
ActiveCell.Offset(0, i).Value = Range("donnes(i)").Value
next i

un petit fichier serait le bien venu, avec le resultat escompté

@ te lire
 
Re : gérer un grand tableau avec ARRAY

Bonsoir Lodan et le Forum,

Bonsoir Wilfried et Spitnolan,

Une autre possibilité :

Code:
Dim Tableau as Variant
Tableau= range(A1:C"& Range("C65536").End(Xlup).row  ' les cellules sont copiées Range est à titre d'exemple.
Nb Ligne= Ubound(tableau,1) ' A titre d'info


Bon test.
 
Re : gérer un grand tableau avec ARRAY

bonjour lodam

salut a tous

pour moi (et sans avoir d'opinion sur la pertinence de l'utilisation)

modifier

donnees = array (code_devis, code_dossier_devis, code.......

en

donnees = array ("code_devis", "code_dossier_devis", "code...........

et

for i 1 to 56 '(il y a bcp de données !)
ActiveCell.Offset(0, i).Value = Range(donnes(i)).Value
next i
 
Re : gérer un grand tableau avec ARRAY

bonjour tout le monde 🙂

Une macro me permet de sauvegarder toutes ces données dans une autre feuille en reprenant le nom de chacune de ces cellules.

je ne vois rien dans ton code concernant l'autre feuille.

ici tu copies tous sur la meme feuille.

de plus, as-tu bien une cellule d'active (pour expliquer l'activecell), car là aussi rien d'indiqué dans ton code.

enfin, for i=1 to 56, as tu bien 56 items dans ton tableau donnees.

salut
 
Re : gérer un grand tableau avec ARRAY

Bonjour à tous

Merci beaucoup à tous pour ces réponses.
Effectivement, il y avait des erreurs dans mon code et je n'en ai mis qu'une partie (jeune papa manquant un peu de sommeil mais heureux !!)

Le but était d'accélérer le temps de traitement car voici le code en entier sur le bouton valider :


*****************************
Private Sub valider_devis_Click()
Dim Cell As Range

Application.ScreenUpdating = False
Sheets("ListeDevis").Select

If Sheets("devis").Range("montantht") <> "" Then
Sheets("ListeDevis").Select
'se positionner sur la 1ére cellule vide
Dim Ligne As Long
Ligne = ActiveSheet.Range("A65536").End(xlUp).Row
ActiveSheet.Cells(Ligne + 1, 1).Select

Application.StatusBar = "Veuillez patienter...Calculs en cours. Merci."
ActiveCell.Value = Range("code_devis").Value
ActiveCell.Offset(0, 1).Value = Range("code_dossier_devis").Value
ActiveCell.Offset(0, 2).Value = Range("code_client_devis").Value
ActiveCell.Offset(0, 3).Value = Range("date_devis").Value
ActiveCell.Offset(0, 4).Value = Range("genre_client").Value
ActiveCell.Offset(0, 5).Value = Range("prenom_client").Value
ActiveCell.Offset(0, 6).Value = Range("nom_client").Value
ActiveCell.Offset(0, 7).Value = Range("date_chargement").Value
ActiveCell.Offset(0, 8).Value = Range("adresse1_chargement").Value
ActiveCell.Offset(0, 9).Value = Range("adresse2_chargement").Value
ActiveCell.Offset(0, 10).Value = Range("CP_chargement").Value
ActiveCell.Offset(0, 11).Value = Range("ville_chargement").Value
ActiveCell.Offset(0, 12).Value = Range("pays_chargement").Value
ActiveCell.Offset(0, 13).Value = Range("tel_chargement").Value
ActiveCell.Offset(0, 14).Value = Range("fax_chargement").Value
ActiveCell.Offset(0, 15).Value = Range("etage_chargement").Value
ActiveCell.Offset(0, 16).Value = Range("asc_chargement").Value
ActiveCell.Offset(0, 17).Value = Range("mm_chargement").Value
ActiveCell.Offset(0, 18).Value = Range("fenetre_chargement").Value
ActiveCell.Offset(0, 19).Value = Range("transbo_chargement").Value
ActiveCell.Offset(0, 20).Value = Range("date_livraison").Value
ActiveCell.Offset(0, 21).Value = Range("adresse1_livraison").Value
ActiveCell.Offset(0, 22).Value = Range("adresse2_livraison").Value
ActiveCell.Offset(0, 23).Value = Range("CP_livraison").Value
ActiveCell.Offset(0, 24).Value = Range("ville_livraison").Value
ActiveCell.Offset(0, 25).Value = Range("pays_livraison").Value
ActiveCell.Offset(0, 26).Value = Range("tel_livraison").Value
ActiveCell.Offset(0, 27).Value = Range("fax_livraison").Value
ActiveCell.Offset(0, 28).Value = Range("etage_livraison").Value
ActiveCell.Offset(0, 29).Value = Range("asc_livraison").Value
ActiveCell.Offset(0, 30).Value = Range("mm_livraison").Value
ActiveCell.Offset(0, 31).Value = Range("fenetre_livraison").Value
ActiveCell.Offset(0, 32).Value = Range("transbo_livraison").Value
ActiveCell.Offset(0, 33).Value = Range("presta_emballages").Value
ActiveCell.Offset(0, 34).Value = Range("presta_fragiles").Value
ActiveCell.Offset(0, 35).Value = Range("presta_penderies").Value
ActiveCell.Offset(0, 36).Value = Range("presta_linge").Value
ActiveCell.Offset(0, 37).Value = Range("presta_livres").Value
ActiveCell.Offset(0, 38).Value = Range("presta_tableaux").Value
ActiveCell.Offset(0, 39).Value = Range("presta_sommiers").Value
ActiveCell.Offset(0, 40).Value = Range("presta_demontage").Value
ActiveCell.Offset(0, 41).Value = Range("presta_meubles").Value
ActiveCell.Offset(0, 42).Value = Range("presta_fourgon").Value
ActiveCell.Offset(0, 43).Value = Range("presta_distance").Value
ActiveCell.Offset(0, 44).Value = Range("presta_type_voyage").Value
ActiveCell.Offset(0, 45).Value = Range("presta_stationnement").Value
ActiveCell.Offset(0, 46).Value = Range("presta_remisesol").Value
ActiveCell.Offset(0, 47).Value = Range("presta_remontage").Value
ActiveCell.Offset(0, 48).Value = Range("presta_debalvaisselle").Value
ActiveCell.Offset(0, 49).Value = Range("presta_deballinge").Value
ActiveCell.Offset(0, 50).Value = text_option.Value
ActiveCell.Offset(0, 51).Value = Range("valeur_globale_mobilier").Value
ActiveCell.Offset(0, 52).Value = Range("valeur_max_objet").Value
ActiveCell.Offset(0, 53).Value = Range("limite_responsabilite").Value
ActiveCell.Offset(0, 54).Value = Range("volume").Value
ActiveCell.Offset(0, 55).Value = Range("visiteur").Value
ActiveCell.Offset(0, 56).Value = Range("montantHT").Value
ActiveCell.Offset(0, 57).Value = Range("montant_garantie").Value
ActiveCell.Offset(0, 58).Value = Range("total_ht").Value
ActiveCell.Offset(0, 59).Value = Range("montant_tva").Value
ActiveCell.Offset(0, 60).Value = Range("total_TTC").Value
ActiveCell.Offset(0, 61).Value = Range("tx_commande").Value
ActiveCell.Offset(0, 62).Value = Range("montant_commande").Value
ActiveCell.Offset(0, 63).Value = Range("tx_livraison").Value
ActiveCell.Offset(0, 64).Value = Range("montant_livraison").Value
ActiveCell.Offset(0, 65).Value = Range("adresse1_chgt2").Value
ActiveCell.Offset(0, 66).Value = Range("adresse2_chgt2").Value
ActiveCell.Offset(0, 67).Value = Range("CP_chgt2").Value
ActiveCell.Offset(0, 68).Value = Range("ville_chgt2").Value
ActiveCell.Offset(0, 69).Value = Range("pays_chgt2").Value
ActiveCell.Offset(0, 70).Value = Range("adresse1_livr2").Value
ActiveCell.Offset(0, 71).Value = Range("adresse2_livr2").Value
ActiveCell.Offset(0, 72).Value = Range("CP_livr2").Value
ActiveCell.Offset(0, 73).Value = Range("ville_livr2").Value
ActiveCell.Offset(0, 74).Value = Range("pays_livr2").Value

Application.StatusBar = False

'on augmente de 1 le prochain code devis
Sheets("form").Range("next_code_devis").Value = Sheets("form").Range("next_code_devis").Value + 1

'Application.ScreenUpdating = True


enregistrer 'macro pour enregistrer le devis dans un autre classeur
deproteger_devis ' macro pour repermettre la modification de certaines cellules

'on vide la feuille devis
Sheets("devis").Select
Range("f27:f35").Value = "OUI"
Range("N30:N34").Value = "OUI"
Range("valeur_globale_mobilier").Value = "0"
Range("valeur_max_objet").Value = "0"
Range("presta_fourgon").Value = "OUI"
Range("presta_distance").Value = "0"
Range("presta_type_voyage").Value = "Urbain"
Range("limite_responsabilite").Value = "457"
Sheets("accueil").Select

MsgBox "Devis enregistré sous :" & Chr(10) & Nomfichier & ".xls"



Else
MsgBox "Veuillez saisir un montant pour le devis"
Sheets("devis").Select
Range("montantht").Select
Exit Sub
End If

End Sub

*************************

donc voila pourquoi cela prend un temps phénoménal de traitement et qu'une petite boucle serait la bienvenue.

En tous cas, je teste toutes vos idées et vos préconisations

Bonne journée !!
damien
 
Re : gérer un grand tableau avec ARRAY

Salut lodam
Bonjour Le fil ,(coucou particulier à mon Ami Hervé)😉
Bonjour Le Forum

une petite question tes cellules nommées sont elles contigues ????
il serait bon que tu mettes un fichier avec la répartition de tes cellules nommées

on peut peut être faire autrement que de nommer l'ensemble des cellules à transférer
ou alors les nommées de la façon suivante A_1,A_2,A_3,A_4
et ensuite boucler
Code:
Sub Test()
Dim Ligne As Long
Dim Col As Byte
Dim Ws_Source As Worksheet
Dim Ws_Cible As Worksheet
Set Ws_Cible = Worksheets("Feuil1")
Set Ws_Source = Worksheets("Feuil2")
Ligne = Ws_Cible.Range("A65536").End(xlUp).Row + 1

 With Ws_Source
   For Col = 1 To 18
        Ws_Cible.Cells(Ligne, Col) = .Range("A_" & Col)
   Next
        .Range("A_90") = .Range("A_90") + 1
 End With

End Sub

testé et ça fonctionne !!!!!!!! ,18 plages arff rien de temps même pas le temps de patienter Lol

Bonne journée
 
Dernière édition:
Re : gérer un grand tableau avec ARRAY

Bonjour
et merci pour cette solution
malheureusement, je ne pense pas pouvoir renommer ces cellules car leurs noms me servent dans d'autres formules dans la feuille ('rechercheV' notamment...)

par contre, je vais utiliser cette solution pour d'autres problématiques que je rencontre.

J'ai réussi à zipper la feuille en question.

En tous merci de vous pencher sur ma problématique

bonne après midi
damien
 

Pièces jointes

Dernière édition:
Re : gérer un grand tableau avec ARRAY

re

vois ce fichier avec une macro exploitant des Array (essai dans module1)

notes:

j'ai créé 2 arrays car un seul semblait trop important pour Vba

une autre macro (copie) permet de creer les Array par copier / coller apres reprise de la cellule A2 de la feuille form

ps:

en ce qui concerne la vitesse je ne sais pas du tout s'il peut y avoir de difference
 

Pièces jointes

Re : gérer un grand tableau avec ARRAY

merci
ça marche
pour la vitesse je vais tester ceci ce soir
c'est super instructif de voir comment un pro peut se débrouiller avec des problèmes comme ça
merci !!
 
Re : gérer un grand tableau avec ARRAY

ça marche et bien plus rapide
du coup, j'ai essayé de mettre une barre de progression mais elle ne fonctionne pas ; j'ai adapté ceci du code de thierry :
Lien supprimé

il y a d'autres exemples plus jolis mais je n'ai pas su les intégrer dans mon code
https://www.excel-downloads.com/threads/barre-progression.33873/

Voyez vous l'erreur ?

merci et bonne nuit
 

Pièces jointes

Re : gérer un grand tableau avec ARRAY

Bonsoir Lodam et le Forum,

Voici la réponse pour ta progress Barre, il faut tout simplement qu'elle soit pour la propiété ShowModal de la UserForm à "False"

Autrement j'ai modifié ausi l'affichage pour avoir un pourcentage, dans ta formule, tu arrivais à 48/47 .

Bon test.
 

Pièces jointes

Re : gérer un grand tableau avec ARRAY

Fantastique !!
ça marche super

un grand merci
Je vais essayer de tout comprendre et d'améliorer l'aspect de cette barre avec les exemples que j'ai trouvé

merci encore
bonne journée
damien
 
- 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

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
902
Réponses
0
Affichages
654
Réponses
3
Affichages
878
Réponses
7
Affichages
987
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…