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 :

Optimisation de macro [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Par défaut Optimisation de macro
    Bonjour à tous,

    Cela fait quelques jours que je cherche à amélioré la rapidité de ma macro mais sans succès.

    Le but recherché est de copier certaines colonnes de la 2eme feuille sur la 1ere
    Mais au vue du temps nécessaire à l'exécution de la macro je pense qu'excel n'apprécie pas vraiment mon improvisation.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub actualiser()
    Worksheets("Feuil1").Columns("b").Value = Worksheets("Feuil2").Columns("z").Value
    Worksheets("Feuil1").Columns("c").Value = Worksheets("Feuil2").Columns("a").Value
    Worksheets("Feuil1").Columns("d").Value = Worksheets("Feuil2").Columns("f").Value
    Worksheets("Feuil1").Columns("e").Value = Worksheets("Feuil2").Columns("c").Value
    Worksheets("Feuil1").Columns("f").Value = Worksheets("Feuil2").Columns("o").Value
    Worksheets("Feuil1").Columns("g").Value = Worksheets("Feuil2").Columns("aa").Value
    Worksheets("Feuil1").Columns("h").Value = Worksheets("Feuil2").Columns("m").Value
    End Sub
    Je vous remercie d'avance pour les solutions apporté à mon problème.
    Cordialement,

  2. #2
    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,

    Essaies :
    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
    Sub actualiser()
    Dim w1 As Worksheet
    Dim w2 As Worksheet
    Dim r1 As Range
    Dim r2 As Range
      Set w2 = Worksheets("Feuil1")
      Set r2 = w2.UsedRange
      Set w1 = Worksheets("Feuil1")
      Set r1 = w1.Range(r2.Address)
      Intersect(r1, w1.Columns("b")).Value = Intersect(r2, w2.Columns("z")).Value
      Intersect(r1, w1.Columns("c")).Value = Intersect(r2, w2.Columns("a")).Value
      Intersect(r1, w1.Columns("d")).Value = Intersect(r2, w2.Columns("f")).Value
      Intersect(r1, w1.Columns("e")).Value = Intersect(r2, w2.Columns("c")).Value
      Intersect(r1, w1.Columns("f")).Value = Intersect(r2, w2.Columns("o")).Value
      Intersect(r1, w1.Columns("g")).Value = Intersect(r2, w2.Columns("aa")).Value
      Intersect(r1, w1.Columns("h")).Value = Intersect(r2, w2.Columns("m")).Value
    End Sub

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par Zarik1888 Voir le message
    Mais au vue du temps nécessaire à l'exécution de la macro
    C'est sûr qu'Excel n'apprécie pas de copier plus d'un million de lignes par colonne …
    Surtout si la plupart de ces lignes sont vides, quel dommage !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub actualiser()
        With Feuil2.UsedRange.Rows
            VA = Application.Index(.Value, Evaluate("ROW(1:" & .Count & ")"), [{26,1,6,3,15,27,13}])
        End With
             Feuil1.Cells(2).Resize(UBound(VA), UBound(VA, 2)).Value = VA
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  4. #4
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Autre solution envisageable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub actualiser()
     
    With Worksheets("Feuil2")
        For i = 2 To 8 'de ta colonne 2 à la colonne 8
        y = Split(.Columns(i).Address(ColumnAbsolute:=False), ":")(1) 'récupère la lettre de la colonne
        x = .Range(y & Rows.Count).End(xlUp).Row 'récupère la dernière ligne avec des valeurs de cette colonne
        Worksheets("Feuil1").Range(y & "1:" & y & x).Value = Worksheets("Feuil2").Range(y & "1:" & y & x).Value 'copie les données
        Next i 'colonne suivante
    End With
     
    End Sub

  5. #5
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Surtout si la plupart de ces lignes sont vides, quel dommage !
    Pourrai t on adapter quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Worksheets("Feuil2").Columns("z").Value <>"" Then
    Worksheets("Feuil1").Columns("b").Value = Worksheets("Feuil2").Columns("z").Value
    Else
    End If

  6. #6
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Citation Envoyé par Stanler Voir le message
    Pourrai t on adapter quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Worksheets("Feuil2").Columns("z").Value <>"" Then
    Worksheets("Feuil1").Columns("b").Value = Worksheets("Feuil2").Columns("z").Value
    Else
    End If
    La tu vérifie juste si toute la colonne n'est pas vide et non les lignes vides de cette colonne

  7. #7
    Candidat au Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2
    Par défaut
    Les solutions que vous m'avez apporté ont grandement optimisé la macro, ça n'a rien à voir avec mon bricolage.

    Je vous remercie pour votre rapidité et votre disponibilité !

    Cordialement,

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

Discussions similaires

  1. [XL-2003] Optimiser une macro VBA
    Par momo93240 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/07/2011, 16h46
  2. [XL-2000] Optimisation de macro
    Par kev159 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/09/2010, 11h05
  3. [XL-2003] Optimisation de macro travaillant sur d'autres classeurs
    Par diude54 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/09/2009, 09h35
  4. [XL-2003] Optimiser une macro de mise en forme d'un Tableau
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2009, 12h19
  5. Optimiser une macro
    Par PiliSql dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/05/2008, 20h18

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