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 :

VBA Optimisation de Script


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    technicien de bureau d'etude
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : technicien de bureau d'etude

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Par défaut VBA Optimisation de Script
    Bonjour,

    Pouvez-vous me aidé ?

    J'aurais aimé optimisé mon scripte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$4:$AG$100"), , xlYes).Name = _
            "Tableau1"
        Range("B4").Select
        Selection.ListObject.ListColumns.Add Position:=1
        ActiveCell.FormulaR1C1 = "N°"
        Range("B5").Select
        ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=3, Criteria1:= _
            "Terminé"
        Range("B5:AH100").Select
        Selection.EntireRow.Delete
        ActiveSheet.ListObjects("Tableau1").Range.AutoFilter Field:=3
    Voila se qu'il fait pour moi :


    Étape 1 : Il crée un tableau qui a partir des cellule B4 jusqu’à AG100

    J'aurais aimé :

    Qu'il trouve la deniers ligne écrite et qu'il crée une valeur dynamique à la place de 100

    Exemple :

    $B$4:$AG$XX

    Étape 2 : Il supprime les lignes avec une valeur "terminé" dans la colonne C (ou colonne 2 du tableau)

    Mon script fonctionne que pour 100 lignes alors que demain je peux avoir un fichier avec 1000 ligne donc pour être sur qu'il le prenne en charge toute les lignes.

    Je sais pas si j'ai été claire mais je l’espéré :s

  2. #2
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 173
    Billets dans le blog
    2
    Par défaut
    Bonjour sawsliders,

    Peut-être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$4").currentregion, , xlYes).Name = _
    "Tableau1"

  3. #3
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 121
    Par défaut
    Salut

    Il faudra sans doute adapter un peu

    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
    Option Explicit
     
    Sub teste()
    Dim TheCell As Range
     
        'J'utilise activeSheet faute d'information mais il serait préférable de nommer sur quelle feuille tu travailles
        With ActiveSheet
            'On pointes les cellule de la colonne B l'une après l'autre
            For Each TheCell In .Range("D4", .Cells(.Rows.Count, "D").End(xlUp))
                'Si la cellule contient le mot clé, on supprime la ligne complète
                If TheCell.Value = "Terminé" Then TheCell.EntireRow.Delete
            Next
        End With
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre averti
    Homme Profil pro
    technicien de bureau d'etude
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : technicien de bureau d'etude

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Salut

    Il faudra sans doute adapter un peu

    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
    Option Explicit
     
    Sub teste()
    Dim TheCell As Range
     
        'J'utilise activeSheet faute d'information mais il serait préférable de nommer sur quelle feuille tu travailles
        With ActiveSheet
            'On pointes les cellule de la colonne B l'une après l'autre
            For Each TheCell In .Range("D4", .Cells(.Rows.Count, "D").End(xlUp))
                'Si la cellule contient le mot clé, on supprime la ligne complète
                If TheCell.Value = "Terminé" Then TheCell.EntireRow.Delete
            Next
        End With
     
    End Sub
    ++
    Qwaz
    Bonjour,

    Excuse moi de mon retard sur mon post.

    Je t'avoue que cette solution m'aurais intéressé en amont mais j'ai étudié mon excel sous forme de tableau (permet une intégration de formules sur toute une colonne entre deux lignes).

    si je suis ta formules cela me crée une vague d'erreur derriere sur mes autre lignes de codes.

  5. #5
    Membre averti
    Homme Profil pro
    technicien de bureau d'etude
    Inscrit en
    Juillet 2015
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : technicien de bureau d'etude

    Informations forums :
    Inscription : Juillet 2015
    Messages : 15
    Par défaut
    Citation Envoyé par tototiti2008 Voir le message
    Bonjour sawsliders,

    Peut-être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$4").currentregion, , xlYes).Name = _
    "Tableau1"
    Bonjour,

    Tout d'abord merci de ton écoute sur mon message précédent et désolé du retard sur mon retour.

    je dois le mettre a quel niveaux de mon script ?(remplace un bout à moi ?)

    Merci de ton retour

  6. #6
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 173
    Billets dans le blog
    2
    Par défaut
    Bonjour sawsliders, Bonjour Qwazerty,

    Citation Envoyé par sawsliders Voir le message
    Bonjour,

    Tout d'abord merci de ton écoute sur mon message précédent et désolé du retard sur mon retour.

    je dois le mettre a quel niveaux de mon script ?(remplace un bout à moi ?)

    Merci de ton retour
    Oui, ça remplace ta ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$B$4:$AG$100"), , xlYes).Name = _
    "Tableau1"
    Et ça ne réponds qu'à l'étape 1

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 121
    Par défaut
    Salut

    Désolé je ne comprends pas ton problème, j'imagine que le fait de supprimer une ligne complète efface des données situées en marge de ton tableau?

    Pour l'utilisation d'un tableau je ne savais pas [Edit]...oui c'est présent dans ton code je ne sais pas pourquoi je suis pas parti la dessus...[/Edit], c'est encore mieux, il suffit de donner à la boucle le nom de la colonne qu'elle doit contrôler, puis de supprimer non plus la ligne complète de la feuille mais uniquement la ligne du tableau.

    Avant de te proposer un code, j'aimerais être sur que cela colle à ton besoin.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une proposition qui semble répondre à tes deux demandes ... optimisable pour les plus tâtillons
    adapter la feuille (ligne 9)

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub ioi()
    Dim Tabl As ListObject
    Dim CellRech As Range
    Dim Repere As String
    Dim Continuer As Boolean
     
    Application.ScreenUpdating = False
     
    With Feuil1
        ' création du ListObject
        Set Tabl = .ListObjects.Add(xlSrcRange, .Cells(1, 2).CurrentRegion, , xlYes)
     
        ' on cherche la première occurence "terminé"
        Set CellRech = Tabl.Range.Columns(2).Find("terminé", .Cells(1, 3), xlValues, xlWhole)
     
        ' s'il y en a une
        If Not CellRech Is Nothing Then
     
            ' on stock l'adresse du résultat
            Repere = CellRech.Address
     
            ' on supprime la ligne
            CellRech.EntireRow.Delete
     
            ' on met un drapeau pour faire une boucle de recherche
            Continuer = True
            While Continuer = True
     
                ' recherche des occurences suivantes
                Set CellRech = Tabl.Range.Columns(2).Find("terminé", .Range(Repere).Offset(-1, 0), xlValues, xlWhole)
                If Not CellRech Is Nothing Then
                   Repere = CellRech.Address
                    CellRech.EntireRow.Delete
                Else
                    ' permet de s'arrêter quand il n'y a plus de résultat
                    Continuer = False
                End If
            Wend
        End If
    End With
     
    Application.ScreenUpdating = True
    End Sub

Discussions similaires

  1. [MySQL] Optimisation de scripts PHP/MySQL
    Par DgG dans le forum PHP & Base de données
    Réponses: 368
    Dernier message: 20/11/2013, 18h59
  2. Optimiser vos scripts
    Par djibril dans le forum Langage
    Réponses: 33
    Dernier message: 11/06/2009, 16h10
  3. [Oracle] Optimisation de script
    Par johnkro dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 12/07/2006, 10h33
  4. [Débutant] Accélérer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    Réponses: 6
    Dernier message: 24/03/2006, 12h37
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/08/2004, 08h33

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