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 :

Petit bug dans ma macro [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut Petit bug dans ma macro
    Bonjour,

    J'ai voudrait faire une macro qui me supprime une ligne si la cellule de la colonne C et D sont >= 0

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Colonne C | Colonne D
              |
    -334€     |  0(on laisse)
    0€        |  -100(on laisse)
    0€        |  0(on supprime)
    120€      |  0(on supprime)
    0€        |  40(on supprime)

    Voici ma macro :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TEST()
    Application.ScreenUpdating = False
    Dim cellule As Variant
    For Each cellule In Range("C:D")
    If cellule.Offset(0, 0) >= 0 And cellule.Offset(1, 0) >= 0 Then
    cellule.EntireRow.ClearContents
    End If
    Next cellule
    Application.ScreenUpdating = True
    End Sub
    Mais il me mets un message d'erreur

    Je ne comprends pas ce qui cloche


    Merci par avance

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Salut,

    Ci-joint une correction, de maniere generale, lorsqu'on veut supprimer
    des lignes, il vaut mieux commencer de la derniere ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Sub TEST()
        Dim Cpt As Integer
     
        Application.ScreenUpdating = False
            For Cpt = Range("C:D").SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
                If Range("C" & Cpt).Value >= 0 And Range("D" & Cpt).Value >= 0 Then
                    Rows(Cpt).Delete
                End If
            Next Cpt
        Application.ScreenUpdating = True
    End Sub
    ++
    Minick

  3. #3
    Membre habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut
    Ca ne fonctionne pas

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Pourquoi pas!!!!

    J'ai evidemment teste avant de poster, le probleme vient surement d'ailleurs....

    Ou est l'erreur, quel est le message (s'il y en a un)??
    Les valeurs sont elles bien numerique et non du texte??
    ++
    Minick

  5. #5
    Membre habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut
    Il s'arrête à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Cpt = Range("C:D").SpecialCells(xlCellTypeLastCell).Row To 1 Step -1

  6. #6
    Membre actif Avatar de le_dilem
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2005
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2005
    Messages : 313
    Points : 236
    Points
    236
    Par défaut Bonjour
    Essaye ç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
    18
    Sub Supprime()
     
    Dim I
    Dim val
    I = 1
     
    While Range("C" & I) <> ""
      val = Range("C" & I) + Range("D" & I)
    If val >= 0 Then
    Rows(I).Select
    Selection.Delete Shift:=xlUp
    'Range("e" & I) = val
    I = I - 1
    End If
    I = I + 1
     Wend
     
    End Sub
    Je fume du thé et je reste éveillé, le cauchemar continue.

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Oui mais quel est le message d'erreur??
    Depassement de capacite, par exemple, si c'est ca, change Interger en Long
    ++
    Minick

  8. #8
    Membre habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut
    Minick -> désolé, effectivement le message est bien "dépassement de capacité". J'ai changé en Long, mais il mouline longtemps sans résultat. Donc j'ai été obligé d'arrêté Excel avec le gestionnaire des taches

    le_dilem -> pareil, il mouline sans fin


    C'est peut-être parce que je suis sous Excel 2000 ?

  9. #9
    Membre actif Avatar de le_dilem
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2005
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2005
    Messages : 313
    Points : 236
    Points
    236
    Par défaut
    Chez moi ça marche bien
    peux que c'est Excel 2000.

    Essaye ça pour voir si c'est du à la sélection de la ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Supprime()
     
    Dim I
    Dim val
    I = 1
     
    While Range("C" & I) <> ""
      val = Range("C" & I) + Range("D" & I)
    If val >= 0 Then
    Range("e" & I) = val
    I = I - 1
    End If
    I = I + 1
     Wend
    Je fume du thé et je reste éveillé, le cauchemar continue.

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    Re,

    Est ce qu'il n'y aurai pas de gros temps de calculs.
    Si c'est le cas, a chaque suppression d'une ligne un calcul se fait et ca peut etre ton probleme.

    Ajoute cette ligne apres Screenupdating = False:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.Calculation=xlCalculationManual
    et cette ligne avant Screenupdating = True:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.Calculation=xlCalculationAutomatic
    ++
    Minick

  11. #11
    Membre habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut
    Bon, j'ai fait tout ce que tu m'as dit mais ça mouline toujours dans le vide

  12. #12
    Membre habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut
    C'est bon !!

    j'ai modifié ta première proposition en enlevant les calculs comme tu m'as dit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub TEST()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Dim Cpt As Integer
    For Cpt = Range("C:D").SpecialCells(xlCellTypeLastCell).Row To 1 Step -1
    If Range("C" & Cpt).Value >= 0 And Range("D" & Cpt).Value >= 0 Then
    Rows(Cpt).Delete
    End If
    Next Cpt
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    End Sub
    Par contre comment lui dire de commencer à la ligne 2, car il me supprime aussi ma ligne d'entête

  13. #13
    Membre actif Avatar de le_dilem
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2005
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Avril 2005
    Messages : 313
    Points : 236
    Points
    236
    Par défaut
    Row To 2
    Je fume du thé et je reste éveillé, le cauchemar continue.

  14. #14
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    434
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 434
    Points : 547
    Points
    547
    Par défaut
    re,

    Il suffit de s'arreter a la ligne 2 et pas 1 ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Cpt = Range("C:D").SpecialCells(xlCellTypeLastCell).Row To 2 Step -1
    ++
    Minick

  15. #15
    Membre habitué
    Homme Profil pro
    Assistant technique
    Inscrit en
    Février 2007
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Assistant technique
    Secteur : Services à domicile

    Informations forums :
    Inscription : Février 2007
    Messages : 336
    Points : 197
    Points
    197
    Par défaut
    Merci !!

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

Discussions similaires

  1. Bug dans une macro de copie de tableau Excel dans PPT
    Par sachadupuy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/05/2014, 11h29
  2. petit bug dans le contrôle LayerSwitcher ?
    Par betechsud dans le forum IGN API Géoportail
    Réponses: 8
    Dernier message: 16/10/2013, 11h11
  3. Réponses: 6
    Dernier message: 23/07/2012, 11h13
  4. Petit souci dans une macro - VBA
    Par chpierro62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 12/01/2012, 16h43
  5. bug dans une macro
    Par lsebastien dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/01/2009, 17h14

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