Transférer donnés entre feuille Excell en VBA
Résolu/Fermé
Moonlight
Messages postés
5
Date d'inscription
mercredi 1 août 2012
Statut
Membre
Dernière intervention
3 août 2012
-
1 août 2012 à 17:10
Moonlight Messages postés 5 Date d'inscription mercredi 1 août 2012 Statut Membre Dernière intervention 3 août 2012 - 3 août 2012 à 18:08
Moonlight Messages postés 5 Date d'inscription mercredi 1 août 2012 Statut Membre Dernière intervention 3 août 2012 - 3 août 2012 à 18:08
A voir également:
- Transférer donnés entre feuille Excell en VBA
- Feuille de pointage excel - Télécharger - Tableur
- Comment supprimer une feuille sur word - Guide
- Verrouiller cellule excel sans verrouiller la feuille - Guide
- Mise en forme conditionnelle excel - Guide
- Comment imprimer en a5 sur une feuille a4 - Guide
5 réponses
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é par michel_m le 3/08/2012 à 08:27
Modifié par michel_m le 3/08/2012 à 08:27
bonjour
tests effectués sur maquette très sommaire donc...
compte tenu du nombre de lignes (20000) recherche de la rapidité d'exécution
tu dis, merci d'avance :o)
Michel
tests effectués sur maquette très sommaire donc...
compte tenu du nombre de lignes (20000) recherche de la rapidité d'exécution
Option Explicit Option Base 1 Sub repartir_donnees() Dim Lig As Long Dim Nbre As Integer, Wc As Integer, Cptr As Integer, T_wc(), T_lig(), cptr_col As Byte Dim start As Single 'essai rapidité start = Timer Application.ScreenUpdating = False With Sheets("cédule") 'recherches et collectes des données For Wc = 2 To 54 Nbre = Application.CountIf(.Columns("A"), Wc) ReDim T_wc(Nbre, 18) Lig = .Cells.Rows.Count ' départ recherche For Cptr = 1 To Nbre Lig = .Columns("A").Find(Wc, .Cells(Lig, 1), xlValues, xlWhole).Row T_lig = .Range(.Cells(Lig, "A"), .Cells(Lig, "R")).Value For cptr_col = 1 To 18 T_wc(Cptr, cptr_col) = T_lig(1, cptr_col) Next Next 'restitution surn feuille wc en cours With Sheets(Wc) .Range("A1:R20000").ClearContents .Range("A1").Resize(Nbre, 18) = T_wc End With Next End With Application.ScreenUpdating = True MsgBox ("Répartition dans les Work Centers effectuée en " & Timer - start & " secondes") End Sub
tu dis, merci d'avance :o)
Michel
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 712
1 août 2012 à 22:31
1 août 2012 à 22:31
bonjour,
Comme tu as l'air de connaitre le VBA, tu crois trouver une macro adaptée à ton besoin sans donner plus de précisions ?
Comme tu as l'air de connaitre le VBA, tu crois trouver une macro adaptée à ton besoin sans donner plus de précisions ?
Moonlight
Messages postés
5
Date d'inscription
mercredi 1 août 2012
Statut
Membre
Dernière intervention
3 août 2012
2 août 2012 à 17:20
2 août 2012 à 17:20
Dans mon Master Data j'ai des lignes de données des "Part" triées selon le work centre WC que je veux copier vers la première ligne disponible d'une Feuille dediée à ce WC.
Voici le code que j'ai écrie mais je trouve pas qu'il est optimal ;( !!!!
comme il me reste à repere la premièr ligne disponible au lieu d'écrire une autre procedure qui cherche cet indice.
Merci
Code:
' copier les cellue vers un autre classeur
Public Sub Copier_donnee()
Dim ligne_dispo As Integer
Dim WC As Integer ' Work Center
For WC = 2 To 54
Worksheets("Cédule").Activate
' chercher le centre de cahrge correspondant
For i = 1 To 20000 '(Range("A1").SpecialCells(xlCellTypeLastCell).Row + 2)
If (Cells(i, 1) = WC) Then
With sheets("Cédule")
.Range(.Cells(i, 1), .Cells(i, 18)).Copy _
sheets(WC).Range("A1:Z10000").Cells(i, 1)
End With
End If
Next
Next WC
End Sub
Voici le code que j'ai écrie mais je trouve pas qu'il est optimal ;( !!!!
comme il me reste à repere la premièr ligne disponible au lieu d'écrire une autre procedure qui cherche cet indice.
Merci
Code:
' copier les cellue vers un autre classeur
Public Sub Copier_donnee()
Dim ligne_dispo As Integer
Dim WC As Integer ' Work Center
For WC = 2 To 54
Worksheets("Cédule").Activate
' chercher le centre de cahrge correspondant
For i = 1 To 20000 '(Range("A1").SpecialCells(xlCellTypeLastCell).Row + 2)
If (Cells(i, 1) = WC) Then
With sheets("Cédule")
.Range(.Cells(i, 1), .Cells(i, 18)).Copy _
sheets(WC).Range("A1:Z10000").Cells(i, 1)
End With
End If
Next
Next WC
End Sub
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é par michel_m le 2/08/2012 à 18:31
Modifié par michel_m le 2/08/2012 à 18:31
Bonjour
1/Un coup, tu parles de feuille, après tu parles de classeurs, donc...
2/"part" c'est quoi ?
3/ For i = 1 To 20000 '(Range("A1").SpecialCells(xlCellTypeLastCell).Row + 2)
pourquoi un commentaire dans cette ligne c'est 20000 ou dernière ligne+2 ?
4/A quoi sert la variable lignedispo ?
5/ Tu parles de la feuille "master data": on la retrouve où dans ta macro?
6/ Tu copies dans les feuilles "WC" avec des espaces (variable "i") ?
7/ tu écris:
.Range(.Cells(i, 1), .Cells(i, 18)).Copy _
sheets(WC).Range("A1:Z10000").Cells(i, 1)
Ca marche, tu es sûr de toi ?
8/ tu es sûr qu'un tri sur 20000 lignes sera accepté ?
Bref, pas très encourageant pour te donner un coup de main....
Alors, exprimes toi clairement, s'il te plait et sans franglais.
Dans l'attente
Michel
1/Un coup, tu parles de feuille, après tu parles de classeurs, donc...
2/"part" c'est quoi ?
3/ For i = 1 To 20000 '(Range("A1").SpecialCells(xlCellTypeLastCell).Row + 2)
pourquoi un commentaire dans cette ligne c'est 20000 ou dernière ligne+2 ?
4/A quoi sert la variable lignedispo ?
5/ Tu parles de la feuille "master data": on la retrouve où dans ta macro?
6/ Tu copies dans les feuilles "WC" avec des espaces (variable "i") ?
7/ tu écris:
.Range(.Cells(i, 1), .Cells(i, 18)).Copy _
sheets(WC).Range("A1:Z10000").Cells(i, 1)
Ca marche, tu es sûr de toi ?
8/ tu es sûr qu'un tri sur 20000 lignes sera accepté ?
Bref, pas très encourageant pour te donner un coup de main....
Alors, exprimes toi clairement, s'il te plait et sans franglais.
Dans l'attente
Michel
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Moonlight
Messages postés
5
Date d'inscription
mercredi 1 août 2012
Statut
Membre
Dernière intervention
3 août 2012
2 août 2012 à 19:53
2 août 2012 à 19:53
Merci d'avoir pris la peinne de lire mon message,
pour les questions
1/Un coup, tu parles de feuille, après tu parles de classeurs,: j'utilse des feuilles le mot calsseur s'est glisser par erreur
2/"part" c'est quoi ? c'est des pièces
3/ For i = 1 To 20000 '(Range("A1").SpecialCells(xlCellTypeLastCell).Row + 2)
pourquoi un commentaire dans cette ligne c'est 20000 ou dernière ligne+2 ? : ce commentaire pour dÉsactiver la commande qui me cherche la derniere ligne du range de donnée alors je l'ai remplacer par un garnd chiffre (20000)
4/A quoi sert la variable lignedispo ? oublie la !!
5/ Tu parles de la feuille "master data": on la retrouve où dans ta macro? , c'est la la feuille ( "Cédule") dans le meme classeur
6/ Tu copies dans les feuilles "WC" avec des espaces (variable "i") ? :je ne comprend pas ????
7/ tu écris:
.Range(.Cells(i, 1), .Cells(i, 18)).Copy _
sheets(WC).Range("A1:Z10000").Cells(i, 1) :
Ca marche, tu es sûr de toi ? : oui je l'ai essayer mais si tu une meilleure façon je serai reconnaissant!!
8/ tu es sûr qu'un tri sur 20000 lignes sera accepté ? :Oui je l'ai faite
Merci beaucoup
pour les questions
1/Un coup, tu parles de feuille, après tu parles de classeurs,: j'utilse des feuilles le mot calsseur s'est glisser par erreur
2/"part" c'est quoi ? c'est des pièces
3/ For i = 1 To 20000 '(Range("A1").SpecialCells(xlCellTypeLastCell).Row + 2)
pourquoi un commentaire dans cette ligne c'est 20000 ou dernière ligne+2 ? : ce commentaire pour dÉsactiver la commande qui me cherche la derniere ligne du range de donnée alors je l'ai remplacer par un garnd chiffre (20000)
4/A quoi sert la variable lignedispo ? oublie la !!
5/ Tu parles de la feuille "master data": on la retrouve où dans ta macro? , c'est la la feuille ( "Cédule") dans le meme classeur
6/ Tu copies dans les feuilles "WC" avec des espaces (variable "i") ? :je ne comprend pas ????
7/ tu écris:
.Range(.Cells(i, 1), .Cells(i, 18)).Copy _
sheets(WC).Range("A1:Z10000").Cells(i, 1) :
Ca marche, tu es sûr de toi ? : oui je l'ai essayer mais si tu une meilleure façon je serai reconnaissant!!
8/ tu es sûr qu'un tri sur 20000 lignes sera accepté ? :Oui je l'ai faite
Merci beaucoup
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
2 août 2012 à 20:34
2 août 2012 à 20:34
Pour la 6
si, par exemple, tu retrouves WC en ligne 4 puis en ligne 100 dans Cédule tu auras un trou de 96 lignes dans la feuille WC au lieu de ligne4 et ligne5
je ye proposerai un truc demain dans la matinée
si, par exemple, tu retrouves WC en ligne 4 puis en ligne 100 dans Cédule tu auras un trou de 96 lignes dans la feuille WC au lieu de ligne4 et ligne5
je ye proposerai un truc demain dans la matinée
Moonlight
Messages postés
5
Date d'inscription
mercredi 1 août 2012
Statut
Membre
Dernière intervention
3 août 2012
2 août 2012 à 22:50
2 août 2012 à 22:50
Merci
3 août 2012 à 18:08
Ça c'est du code!!!!
Je ne m'attendais pas, à une telle efficacité J'ai fait quelques ajustements pour adapter le code à ma cédule de production et ca marche!!!
Il va me rester de re nomer les feuilles par leur propre nom au lieu du WC.
Merci Beaucoup Michel.
MO