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 :

EQUIV INDEX en VBA pour gagner du temps - enjeu: 10 mn de calculs


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de Polygos
    Homme Profil pro
    Ma petite entreprise
    Inscrit en
    Avril 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ma petite entreprise
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2016
    Messages : 190
    Points : 52
    Points
    52
    Par défaut EQUIV INDEX en VBA pour gagner du temps - enjeu: 10 mn de calculs
    Bonjour
    Je dois remonter pour chaque ligne d'un article remonter dans une cellule les titres des colonnes cochées "O" pour cet article et les séparer avec un ";" pour l'export après.
    Mes produits vont de la ligne i = 8 à la ligne DL.
    Les catégories sont dans les colonnes 133 à 144 et les intitulés sont donc dans la ligne 6.
    Je suis obligé de faire ça et ne peut pas mettre le nom en direct dans la formule car c'est du cyrillique.
    Mon résultat, une chaine de caractère séparé par un ";" se trouve donc en colonne 28. Bien sur elle ne doit pas se terminer par ";"

    Aujourd'hui j'ai écrit ça:


    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
    For i = 8 To DL
     
            For j = 133 To 144
     
                If Cells(i, j) = "O" Then
                Cells(i, 28) = Cells(6, j) & ";" & Cells(i, 28) 'Ru
                Else
                End If
           Next j
           ' la suite des caractéristiques est créé à ce stade, il faut juste équeuter le dernier caractère*            
                L = Len(Cells(i, 28))
                If L <> 0 Then
                D = L - 1
                Cells(i, 28) = Left(Cells(i, 28), D)
                End If
     
    Next i
    *Je suis obligé de supprimer le dernier caractère sinon je vais me trouver, dans la cas d'une seule caractéristique, avec un truc du genre "BIO;" et le programme derrière va planter car il va attendre la caractéristique suivante.


    Ça marche bien, d'autant que j'ai trois langues étrangères à traiter comme ça MAIS, avec mon i5 4750 et Excel 2013, les 3000 lignes de mes produits me prennent 10 minutes mesurées chrono.
    Je m'ennuie ..

    Aussi je voudrais savoir si avec EQUIV/INDEX que je maitrise à peine en temps normal, je peux gagner du temps sur la boucle ?
    qu'en pensez vous ?

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Ton code un peu simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 8 To DL
            For j = 133 To 144
                If Cells(i, j) = "O" Then Cells(i, 28) = Cells(6, j) & IIf(Cells(i, 28) = ""; ""; ";" & Cells(i, 28))
           Next j
    Next i
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Bonjour.
    Si tu dois traiter de grandes listes, tu peux utiliser RechercheW, voir le lien sur le tome 6 dans ma signature, chapître 3.
    Ça permet dans certains cas d'aller 100 fois plus vite.
    Le code source est en pièce jointe de la documentation.
    Cordialement.

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

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Pour gagner en rapidité, passes par des tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      t = ActiveSheet.Range("EC6:EN6").Value                 'titres
      d = ActiveSheet.Range("EC8:EN8").Resize(DL - 7).Value  'données
      r = ActiveSheet.Range("AB8").Resize(DL - 7).Value      'résultat
      For i = LBound(d) To UBound(d)
        For j = LBound(d, 2) To UBound(d, 2)
          If d(i, j) = "O" Then
            r(i, 1) = t(1, j) & IIf(r(i, 1) = "", "", ";" & r(i, 1))
          End If
        Next j
      Next i
      ActiveSheet.Range("AB8").Resize(DL - 7).Value = r
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

Discussions similaires

  1. [CR XI] Comment se passer d'un sous report pour gagner du temps de traitement ?
    Par Adricube dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 18/11/2014, 12h06
  2. Réponses: 0
    Dernier message: 05/10/2014, 16h32
  3. Réponses: 1
    Dernier message: 26/06/2009, 15h27
  4. Sunopsis - Paralléliser 2 packages pour gagner du temps ?
    Par claclapub dans le forum Alimentation
    Réponses: 0
    Dernier message: 23/07/2007, 15h29
  5. VBA-E gagner du temps d'execution
    Par bernard38 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/10/2006, 09h50

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