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 :

Amélioration code VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Par défaut Amélioration code VBA
    Bonjour
    Voici un bout de code que je souhaite améliorer mais je n'y arrive pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'Suppression des entrées sur feuille plan d'action
    Sheets("Plan action").Select
    Range("A1").End(xlDown).Offset(1, 0).Select
    While ActiveCell.Value <> "Date"
        If ActiveCell.Offset(0, 1).Value = "1" Then
           ActiveCell.EntireRow.Delete
        End If
    ActiveCell.Offset(-1, 0).Select
    Sheets("Plan labo").Select
    Wend
    Je pense que l'on peut faire avec un truc du style

    For each cell...
    Next cell
    Mais le problème est que je ne trouve pas la solution pour faire une selection en tenant de la dernière cellule pleine de la colonne B.

    Merci de votre aide.

    Fred

  2. #2
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour amelyfred,
    While ActiveCell.Value <> "Date"
    il ne faut pas utiliser le mot "Date" de cette facon, ce mot est réserver à excel, même mit en String cela devient trop astreignant pour la compréension.
    je n'ai pas fait de test sur le restant du code, mais déja là il faut modifier.
    si tu cherche à trouver une valeur exact, d'une facon simple et sans boucle
    utisile la fontion EQUIV (Match en vba), par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not IsError(Application.Match(valeur,  Workbooks("fichier1.xls").Sheets("feuil1").Range("A:A"), 0)) Then
    ligne =Application.Match(valeur,  Workbooks("fichier1.xls").Sheets("feuil1").Range("A:A"), 0)) 
    Else
    MsgBox "aucune ligne trouvée"
    End If

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Par défaut
    Merci pour ta réponse mais je ne suis pas sur d'avoir bien exposé mon problème.
    Dans un fichier j'ai un tableau dont le nombre de ligne n'est pas fixe.
    Et je souhaite faire une macro qui supprime toute les lignes qui comporte dans la colonne b la valeur 1.

    J'ai donc fait une macro qui fait :
    Sélectionne la feuille "plan action"
    Place toi à la dernière cellule non vide de la colonne A
    Si la valeur de la cellule d'a coté = 1 alors supprime la ligne.
    Sinon sélectionne la cellule supérieur.
    Fais tout ca jusqu'en haut du tableau.
    A la fin selectionne la feuille 1

    Pour cela j'ai donc créer le code exposé plus haut.
    Maintenant il me semble que ce style de code ralenti tout, je souhaiterais faire un truc du genre.

    Pour chaque cellule de la plage A2 à G(dernière cellule pleine) de la feuille "Plan action" si la valeur de la cellule B = 1 supprime la ligne correspondante.

    J'ai donc penser à un truc du style:
    For each cell ...
    Next cell

    Mais je trouve pas la syntaxe exacte pour définir correctement la plage (qui peut être variable).

    J'espère que c'est plus clair.
    Merci d'avance.
    Fred

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Tu peux faire quelque chose qui ressemble à cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim l As Long, lDer As Long
    Dim wSh As Excel.Worksheet
     
    Set wSh = ThisWorkbook.Worksheets("Plan action")
    lDer = wSh.Range("A" & Application.Rows.Count).End(xlUp).Row
     
    For l = lDer To 1 Step -1
        If wSh.Cells(l, 2) = 1 Then wSh.Rows(l).Delete
    Next l
     
    Set wSh = Nothing
    Cordialement,

    PGZ

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    313
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 313
    Par défaut
    Merci je vais essayer!!!

Discussions similaires

  1. Amélioration code VBA
    Par Hélixe dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/02/2013, 11h46
  2. Améliorer code VBA pour mise en forme
    Par majothi dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 28/12/2012, 08h20
  3. Amélioration d'un code VBA
    Par Jerome25 dans le forum VBA Access
    Réponses: 7
    Dernier message: 02/08/2011, 15h43
  4. Réponses: 3
    Dernier message: 06/09/2005, 10h27
  5. Comment creer une procédure stockée à partir d'un code VBA?
    Par Alcor020980 dans le forum Connexion aux bases de données
    Réponses: 4
    Dernier message: 24/05/2005, 19h55

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