Microsoft 365 Diff entre Array et Formule

iliess

XLDnaute Occasionnel
bonjour
j'ai essaye de crée une clé apartir d'une plage Arr
j'ai essayé deux méthode la premiere par Array et la deuxième par formule
j'ai constaté que la macro par formule et rapide que Array

Svp comment je peux accélère la méthode Array
 
Dernière modification par un modérateur:

iliess

XLDnaute Occasionnel
voici les deux codes
VB:
Sub Traitement_par_formule()
t = Timer
With Application
        '.Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
End With

Dim ShRaw As Worksheet
Dim LShRaw As Long
Dim Brr As Variant

'=============================================================
Set ShRaw = ThisWorkbook.Worksheets("Raw")
LShRaw = ShRaw.Cells(ShRaw.Rows.Count, 1).End(xlUp).row
Brr = ShRaw.Range("A2:H" & LShRaw)
'==================================================================================================================================
With ShRaw
      If .FilterMode Then .ShowAllData
      '.Range("I2:I" & LShRaw).ClearContents
      .Cells(1, "I") = "Clé"
      .Cells(2, "I").FormulaLocal = "=""445""&""_""&A2&""_""&C2&""_""&D2&""_""&F2&""_""&G2"
      .Cells(2, "I").AutoFill .Cells(2, "I").Resize(LShRaw - 1)
      .Cells(1, "I").Resize(LShRaw) = .Cells(1, "i").Resize(LShRaw).Value
End With

With Application
        '.Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
End With
MsgBox Timer - t

End Sub

VB:
Sub Traitement_par_Array()
t = Timer
With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
End With

Dim ShRaw As Worksheet
Dim LShRaw As Long
Dim Brr As Variant

'=============================================================
Set ShRaw = ThisWorkbook.Worksheets("Raw")
LShRaw = ShRaw.Cells(ShRaw.Rows.Count, 1).End(xlUp).row
Brr = ShRaw.Range("A2:H" & LShRaw)
'==================================================================================================================================

For i = LBound(Brr) To UBound(Brr)
Range("I" & i + 1).Value = "445" & "_" & Brr(i, 1) & "_" & Brr(i, 3) & "_" & Brr(i, 4) & "_" & Brr(i, 6) & "_" & Brr(i, 7)
Next i

With Application
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
End With
MsgBox Timer - t
End Sub
 

ChTi160

XLDnaute Barbatruc
Re
Une vidéo de ce que j'ai fait à partir d'une petite Macro

je n'ai pas vu ton Post #17
Donc je concatène sans séparateur et toutes les colonnes dans mon exemple ! (je passe par Un tableau)
je regarde ce que je peux améliorer Lol
Jean marie
 

Pièces jointes

  • Concatener-1.gif
    Concatener-1.gif
    272.5 KB · Affichages: 13

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour le fil, le forum

@iliess , merci de consulter et de respecter la charte XLD notamment le point 1.1

Cordialement, @+

VB:
1.1 - Conformité RGPD

Tout message ou fichier déposé sur ce site ne doit pas comporter de données à caractère personnel contrevenant au RGPD (Réglement Général sur la Protection des Données).
Il convient pour cela d’anonymiser toutes les données permettant d’identifier directement ou indirectement une personne physique ou morale.
XLD ne saurait être tenu responsable au cas où un visiteur du site posterait des données non conformes à la législation en vigueur.
Si vous détectez une non conformité, merci d'alerter le webmaster de ce site en utilisant, dans le post concerné, le bouton "signaler" dédié ou en envoyant un courriel à l'adresse webmaster@excel-downloads.com, nous supprimerons les données dans les plus brefs délais.
 

ChTi160

XLDnaute Barbatruc
Re
Bonsoir Bernard !
@iliess
ce que j'ai utilisé .
Voir à modifier le Nom de la Feuille qui contient la BDD.
VB:
Option Explicit
Option Base 1
Dim Tp
Dim T
Dim Lgn As Long
Dim Col As Byte
Dim StrConc$
Dim x As Long
Dim Tbl_Recap()
Public Sub Concatene()
With Application
      .Calculation = xlCalculationManual
      .EnableEvents = False
      .ScreenUpdating = False
End With
Tp = Timer
x = 0
T = Worksheets("Feuil1").UsedRange.Value 'On récupère la plage de données dans la feuille "Feuil1" à modifier

 For Lgn = 2 To UBound(T) 'Pour chaque ligne du tableau des Données
        x = x + 1 'on incremente la variable
       StrConc$ = "445" & "_" & T(Lgn, 1) & "_" & T(Lgn, 3) & "_" & T(Lgn, 4) & "_" & T(Lgn, 6) & "_" & T(Lgn, 7)
  ReDim Preserve Tbl_Recap(1 To x) 'On redimmensionne le tableau qui va servir
      Tbl_Recap(x) = StrConc  'On colle la variable qui représente la Ligne Concaténée
 'de support aux donnees Concaténées en fonction de Cette Plage
 Next Lgn 'Autre Ligne
 With Worksheets("Feuil1") 'avec la feuille
'      .Range("I2").Resize(.UsedRange.Rows.Count).ClearContents 'On efface la Colonne "I"
      .Range("I2").Resize(UBound(Tbl_Recap, 1), 1) = Application.Transpose(Tbl_Recap) 'On redimensionne la longueur de la plage qui va recevoir les données du tableau
      .Columns("I:I").AutoFit 'On redimmensionne la Largeur de la colonne "I"
 End With
  StrConc = Empty 'On vide la variable qui va contenir la Ligne concaténée
  Erase Tbl_Recap 'On vide le tableau temporaire
 MsgBox Timer - Tp
 With Application
      .Calculation = xlCalculationAutomatic
      .EnableEvents = True
      .ScreenUpdating = True
End With
End Sub
Jean marie
 

Discussions similaires

Réponses
16
Affichages
643
Réponses
13
Affichages
677

Membres actuellement en ligne

Statistiques des forums

Discussions
313 114
Messages
2 095 415
Membres
106 265
dernier inscrit
jesmtd