VBA:PB Methode Autofill

Résolu/Fermé
CHARLYJACK Messages postés 353 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 16 mai 2023 - Modifié par CHARLYJACK le 9/02/2013 à 18:44
CHARLYJACK Messages postés 353 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 16 mai 2023 - 10 févr. 2013 à 22:27
Bonjour,

J'ai un problème, quand je recopie une formule avec la méthode Autofil
ma formule s'inscrit en A2 par contre elle ne s'etend pas. j'ai un message d erreur concernant la méthode Autofill.

voici le code:

Sub Badge1()
Dim wbkSource As Workbook
Dim wshSource As Worksheet
Dim wshCible As Worksheet

Set wshCible = Worksheets("BD sem1")
wshCible.Cells.Delete

'Titre Colonne
wshCible.Range("A1") = "SITE"
wshCible.Range("B1") = "Date du contrôle"
wshCible.Range("C1") = "Heure du contrôle"
wshCible.Range("D1") = "Initiales"
wshCible.Range("E1") = "Type de Personnel"
wshCible.Range("F1") = "Numéro du badge"
wshCible.Range("G1") = "Description du lecteur"



'Mise en forme
wshCible.Range("A1:G1").Interior.Color = 13434879
wshCible.Range("A1:G1").Font.Bold = True



'Classeur Base de donnees
DebutNomFichier = wshCible.UsedRange.Rows.Count + 2
Set wbkSource = Workbooks.Open("G:\travail\badgearcx12.XLSX")
Set wshSource = wbkSource.Worksheets(1)
Dim a As Filter
'Nom de feuille a adapter
Set ID = Worksheets(1)
If ID.AutoFilterMode Then
Indice = 0
For Each a In ID.AutoFilter.Filters
If a.On Then
ID.ShowAllData
Exit For
End If
Next
End If
DerniereLigne = wshSource.UsedRange.Rows.Count
wshSource.Range("U1:Z" & DerniereLigne).Copy wshCible.Range("B" & wshCible.UsedRange.Rows.Count + 1)
wbkSource.Close
Sheets("BD sem1").Activate
ActiveSheet.Cells(2, 1).FormulaLocal = "=SI(NB.SI(Liste;G2);RECHERCHEV(G2;Liste;2);"""")"

Selection.AutoFill Destination:=Range("A2:A65000"), Type:=xlFillDefault
Range("A2:A65000").Select
Selection.Copy
ActiveSheet.PasteSpecial Format:=3, Link:=1, DisplayAsIcon:=False, _
IconFileName:=False
ActiveWorkbook.RefreshAll

End Sub

Cdt

Charlyjack



2 réponses

eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 241
9 févr. 2013 à 19:23
Bonjour,

tu peux écrire directement :
ActiveSheet.range("A2:A100).FormulaLocal = "=SI(NB.SI(Liste;G2);RECHERCHEV(G2;Liste;2);"""")"
Mais c'est une très très mauvaise idée que de vouloir le mettre sur 65000 lignes !!!
Ton fichier va être énorme et lent même pour 10 lignes d'utilisées.
Ne met que le strict nécessaire.

eric
1
CHARLYJACK Messages postés 353 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 16 mai 2023 1
10 févr. 2013 à 12:08
Bonjour Eric,

Effectivement c'est lent, je confirme mais je ne vois pas comment faire autrement,
logiquement je dois travailler sur un mois. Je récupère un fichier avec plus de 130000 lignes. Le site concernait n'est pas dans le fichier c'est pourquoi j'ai fais une liste à la main de 185 lignes et donc une recherche V.

Au départ je me suis dis je vais diviser le fichier en 5 onglets (base de données) et 5 onglets TCD pour les exploiter, et un sixième onglet pour une stat sur le mois.

Pour le nombre de lignes de la recherche V le seul moyen de limiter le nombre serait de m'aligner sur le nombre de ligne la colonne B mais je ne sais pas comment faire. Je n'ai même pas réussi à appliquer la formule dans une page précise.( Et oui je voulais faire un module par page et le boutton pour activer la macro avec les tcd).

C'est pourquoi je voulais faire un copier coller de la formule pour éviter le recalcul.
Maintenant l'interet du fichier c'est l'analyse des tcd plus que la vitesse à laquelle il se met à jour. Toutefois si tu as une idée je suis preneur.

En tout cas un grand merci pour ton aide

Charlyjack
0
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 241
Modifié par eriiic le 10/02/2013 à 13:31
Bonjour,

essaie ça : https://www.cjoint.com/c/CBknEU5m6oi avec beaucoup de lignes voir si le temps est plus correct.
Nommer la plage Liste en Feuil2.
Si tu as 2010 enregistre-le en *.xlsm si tu veux traiter plus 65536 lignes.

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
1
CHARLYJACK Messages postés 353 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 16 mai 2023 1
10 févr. 2013 à 19:06
Salut Eric,

j'ai essayé ton code c'est parfait, bien plus rapide ,
le plus long c'est mon copier coller.


Par contre j'ai essayé deux fichiers sources qui pour moi sont semblables mais pas pour ma macro dans un cas ça marche et dans l'autre j'ai un message d'erreur
excel m'indique que les dimensions sources et celles de destination ne sont pas semblables. Je ne comprends pas les deux fichiers ont la même source "csv" c'est juste la sélection des semaines qui change.

As tu une idée de la manière dont je pourrais éviter ce désagrément ?

Encore merci pour ton code

à bientôt

Charlyjack
0
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 7 241
10 févr. 2013 à 19:12
Re,

désolé, je n'ai pas de boule de cristal.
Si excel te dit que les dimensions sources et celles de destination ne sont pas semblables tu peux le croire.
eric
0
CHARLYJACK Messages postés 353 Date d'inscription mardi 19 octobre 2010 Statut Membre Dernière intervention 16 mai 2023 1
10 févr. 2013 à 22:27
Ok en tout merci pour le coup de main

à bientot

Charlyjack
0