XL 2016 Copier des valeurs et les coller dans une autre colonne

oles

XLDnaute Nouveau
Bonjour,

J'ai réalisé une macro qui marche... mais qui prend bien 1/2 heure à se terminer (car il y a pas loin de 6000 lignes à copier et à coller dans une autre colonne).

Il s'agit de copier des "comptes comptables" de la colonne "D" et les coller dans la colonne B chaque fois que les lignes de la colonne "D" = 0. Dans la colonne B, on fait l'inverse de la colonne D (voir exemple saisi à la main dans le fichier en PJ).

Les comptes sont copiés et collés de manière chronologique (comme un plan comptable).

Est-ce que quelqu'un aurait une autre idée de boucle, qui prendrait moins de temps ?

Merci par avance,
 

Pièces jointes

  • Reconstitution balance.xlsm
    322.8 KB · Affichages: 23

oles

XLDnaute Nouveau
Bonjour @soan

J'ai surtout voulu dire qu'il y a un pb sur SON fichier original car sur le fichier qu'il nous a fournit il n'a pas de pb.

J'ai fait des test sur le fichier qu'il nous as fournit et c'est moins de 10 s pour 100 000 lignes et moins de 0.5 secondes pour 6 000 lignes alors que son fichier de travail c'est 15 mn !o_O

Donc j'en ai conclu qu'il y a un pb sur son fichier.

Hypothèse pour @oles : 🤔
1)Ton fichier est rempli de plusieurs dizaines voir centaines de MFC
2)Il y a plein de liaison avec x fichiers et lors de la mise à jour une macro fait des navettes entre chaque ligne et chaque fichier
3)Une autre piste c'est de désactiver le calcul automatique en début de macro avec :
==> Application.Calculation = xlCalculationManual
Et le réactivé en fin de macro (c'est indispensable)
==> Application.Calculation = xlCalculationAutomatic
4)Tu l'anonymises et tu le postes et on regarde.

@Phil69970
Bonjour Phil69970,

En désactivant le calcul automatique, la macro s'est exécutée en moins de 10 secondes ;-D (6003 lignes)

La maquette n'était qu'un extrait du fichier original qui est volumineux et rempli de formule... c'était donc cela qui coincait. Merci beaucoup pour les conseils.

Qu'est-ce qu'un MFC ? (ton petit 1)

Olivier
 

oles

XLDnaute Nouveau
@Olivier

j'comprends pas : sur le fichier que j'ai, il n'y a pas de comptes en rouge ; de toute façon, ma macro ne s'occupe pas de couleurs ; elle fait seulement l'inversion des comptes de la colonne B en colonne D, et inversement ; c'était pas ça, le travail à faire ? j'ai peut-être mal compris ta demande ?

par contre, si j'me suis pas trompé sur ta demande, c'est ok sur mon fichier ; faudrait qu'tu m'envoies ton fichier (sans données confidentielles).​

soan
 

Pièces jointes

  • Reconstitution balance2.xlsm
    321.3 KB · Affichages: 5

oles

XLDnaute Nouveau
voici le fichier avec les comptes en rouge que j'ai tapé à la main.
Comme dit, si ta macro abouti, je serais curieux de la décortiquer ;-D
Mais avec la méthode de désactivation des formules, cela fonctionne en moins de 10 secondes avec la macro de Phil.
Olivier
 

soan

XLDnaute Barbatruc
Inactif
@Olivier

j'ai testé ma macro avec ton fichier du post #17 ; tout est ok : au départ, y'a que des 0 en D3: D62, et tous les comptes sont en B3:B61 (quelle que soit la couleur) ; même si y'a des cellules vides dans B3:B61, et même si y'a « etc... » en B50, ça fait bien l'inversion correcte : après exécution de la macro, tous les 0 de la colonne "Compte analytique" sont passés en colonne B, et les comptes de la colonne B sont passés en colonne D, y compris ton « etc... » (que t'aurais pu enlever, car c'est pas une donnée valide ! 😜) ; donc j'vois pas du tout où tu vois qu'il y a quelque chose qui ne va pas ; si c'est vraiment le cas, tu dois être plus explicite : sur quelles lignes ça ne fait pas l'inversion correcte ? et pour quelles valeurs ?

ton fichier en retour après exécution de la macro ; je n'ai rien changé au code VBA ; ma sub s'occupe uniquement d'inverser les comptes des colonnes B et D ; elle ne s'occupe d'aucune autre colonne ; serait-ce qu'il fallait changer quelque chose pour une autre colonne que B ou D ?​

soan
 

Pièces jointes

  • Reconstitution balance2.xlsm
    306.1 KB · Affichages: 3
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
@Olivier

lis d'abord mon post précédent ; puis regarde cette image
qui est APRÈS exécution de la macro :

Image.jpg


soan
 

oles

XLDnaute Nouveau
@Olivier

lis d'abord mon post précédent ; puis regarde cette image
qui est APRÈS exécution de la macro :

Regarde la pièce jointe 1105347

soan
Bonjour soan,

Comme dit, ce n'est pas ça que je souhaite. Execute la macro de phil69, tu verras que le résultat est différent de ta macro. C'est ce résultat que je souhaite (dans la colonne B).

Néanmoins, merci pour ta proposition avec les tableaux. Elle est intéressant.

Olivier
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Olivier, Phil,

effectivement, j'avais bien mal compris ta demande, désolé ! :oops:

voici la nouvelle version, avec la méthode super rapide des tableaux.

même utilisation : fais Ctrl e ➯ travail effectué ! 😊

VB:
Option Explicit

Sub Essai()
  If ActiveSheet.Name <> "BALANCE ANALYTIQUE" Then Exit Sub
  Dim T1, T2, cpt&, nlm&, n1&, n2&, n3&, i&: nlm = Rows.Count
  n1 = Cells(nlm, 2).End(3).Row: n2 = Cells(nlm, 4).End(3).Row
  If Cells(n2, 4) = "-" Then n2 = Cells(n2, 4).End(3).Row
  n3 = WorksheetFunction.Max(n1, n2): If n3 = 2 Then Exit Sub
  n3 = n3 - 2: T1 = [B3].Resize(n3): T2 = [D3].Resize(n3)
  Application.ScreenUpdating = 0
  With [B3].Resize(n1 - 2)
    .Font.ColorIndex = -4105: .ClearContents
  End With
  For i = n2 - 2 To 1 Step -1
    If T2(i, 1) = 0 Then
      If cpt > 0 Then T1(i, 1) = cpt
    Else
      cpt = T2(i, 1): T1(i, 1) = Empty
    End If
  Next i
  [B3].Resize(n3) = T1
End Sub

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. ;)

soan
 

Pièces jointes

  • Reconstitution balance3.xlsm
    306.7 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 259
Membres
103 167
dernier inscrit
miriame