IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Opérations sur les éléments d'un tableau à deux dimensions


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 27
    Par défaut Opérations sur les éléments d'un tableau à deux dimensions
    Salut,
    J’ai une petite préoccupation concernant les tableaux en VBA. En effet, j’essaie un peu de m’exercer en remplissant un tableau de 2x5000 éléments (entiers) qui proviennent de colonnes F et L.
    L’objectif est de faire la soustraction pour obtenir une différence entre les éléments de F et L et ensuite, les remplacer dans la colonne F.

    Avec ce bout de code que j’ai essayé, ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub enreg_tab()
    Dim tab_exemple(4999, 1)
     
    For i = 0 To 4999
    'Enregistrement des valeurs dans le tableau
       tab_exemple(i, 0) = Range("F" & i + 2)
       tab_exemple(i, 1) = Range("L" & i + 2)
    'Soustraction et remplacement
       Range("F" & i + 2) = tab_exemple(i, 0) - tab_exemple(i, 1)
     
     Next
    End Sub
    Sauf que ça me prend environ 20 minutes pour finaliser l’opération. Alors, étant débutant, je me tourne vers vous pour enfin, essayer de trouver une alternative plus rapide.
    Cordialement !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par masala Voir le message
    Bonjour,

    Environ 0,05 seconde. Le principe est de copier la formule sur une colonne non utilisée et de copier en "spécial valeur" le résultat dans la colonne F.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Sub RecalculColonneF()
     
    Dim DerniereColonne As Integer
    Dim HeureDebut2, HeureFin2, TempsTotal2
     
        With Application
             .ScreenUpdating = False
             .Calculation = xlCalculationManual
        End With
     
        HeureDebut2 = Timer
        With ActiveSheet
             DerniereColonne = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
             With .Range(.Cells(2, DerniereColonne), .Cells(5002, DerniereColonne))
                  .Formula = "=F2-L2"
                  .Calculate
                  .Copy
             End With
             .Range("F2").PasteSpecial xlPasteValues
             .Range(.Cells(2, DerniereColonne), .Cells(5002, DerniereColonne)).Clear
        End With
     
        With Application
             .ScreenUpdating = True
             .Calculation = xlCalculationAutomatic
        End With
     
        HeureFin2 = Timer
        TempsTotal2 = HeureFin2 - HeureDebut2
        Debug.Print "Temps total  : " & Round(TempsTotal2, 2) & " seconde(s)"
     
     
    End Sub

  3. #3
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Avec des tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub enreg_tab()
    Dim tabF, tabL, i As Long
    Dim t As Single
    t = Timer
      tabF = Range("F2:F5001").Value
      tabL = Range("L2:L5001").Value
      For i = 1 To 5000
        tabF(i, 1) = tabF(i, 1) - tabL(i, 1)
      Next i
      Range("F2:F5001").Value = tabF
    Debug.Print Timer - t & " seconde"
    End Sub
    Moins de 0.05 seconde

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 27
    Par défaut Résolu!
    Merci beaucoup à vous tous pour de l'aide. Vos codes ont résolu mon problème.
    Vous êtes vraiment sympas!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire la somme des éléments d'un tableau à deux dimensions
    Par am9511 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 11/11/2015, 00h18
  2. opération sur les éléments de tableaux
    Par pingouin84k dans le forum Débuter
    Réponses: 17
    Dernier message: 30/09/2014, 18h28
  3. Réponses: 2
    Dernier message: 31/05/2014, 16h53
  4. Supprimer les doublons dans un tableau à deux dimensions
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/07/2008, 09h47
  5. Supprimer les doublons dans un tableau à deux dimensions
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 30/07/2008, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo