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 :

problème de macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Par défaut problème de macro
    Bonjour je n'arrive pas à comprendre pourquoi cette macro ne fonctionne pas :

    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
    Sub test()
    Dim i As Long, j As Long, x As String
     
    Application.ScreenUpdating = False
     
    With Sheets(1) '<-- nom ou position de la feuille à adapter
        For i = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
            x = .Cells(i, 1) & .Cells(i, 2) & .Cells(i, 3)
            For j = i - 1 To 1 Step -1
                If .Cells(j, 1) & .Cells(j, 2) & .Cells(j, 3) = x Then
                    If .Cells(j, 4) < .Cells(i, 4) Then
                        .Rows(j).Delete
                    Else
                        .Rows(i).Delete
                        Exit For
                    End If
                End If
            Next j
        Next i
    End With
     
    Application.ScreenUpdating = True
     
    End Sub

    Elle a pour but sur plusieurs lignes où les 3 premières colones sont les mêmes de garder que la ligne où la colone 4 est supérieure et de supprimer les deux autres.

  2. #2
    Membre confirmé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juillet 2011
    Messages : 27
    Par défaut
    Bonjour,

    Voici u ne solution alternative

    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
     
    Sub test()
    Dim i As Long, j As Long, x As String
    Dim CurLig As Long
    Dim CurX As String
        Application.ScreenUpdating = False
        With Sheets(1)
            CurLig = 1  '<-1ère ligne du tableau (hors éventuelle ligne d'entête)
            CurX = .Cells(CurLig, 1) & .Cells(CurLig, 2) & .Cells(CurLig, 3)
            i = CurLig + 1
            While .Cells(i, 1).Value <> vbNullString
                x = .Cells(i, 1) & .Cells(i, 2) & .Cells(i, 3)
                If x = CurX Then
                    If .Cells(i, 4).Value < .Cells(CurLig, 4).Value Then
                        .Rows(i).Delete
                    Else
                        .Rows(CurLig).Delete
                        CurLig = i - 1
                        CurX = .Cells(CurLig, 1) & .Cells(CurLig, 2) & .Cells(CurLig, 3)
                    End If
     
                Else
                    CurLig = i
                    CurX = .Cells(CurLig, 1) & .Cells(CurLig, 2) & .Cells(CurLig, 3)
                    i = i + 1
                End If
            Wend
        End With
        Application.ScreenUpdating = True
    End Sub

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Pourquoi dis-tu que ta macro ne fonctionne pas ?
    - tu n’obtiens pas le résultat attendu ?
    - le code génère une erreur ?

    Je l’ai testé sur quelques lignes et il a bien réalisé le traitement indiqué (sur les lignes contigües).

    Cordialement.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Par défaut
    Bonjour,

    En fait elle me supprime des lignes qui ne devraient pas être supprimées. j'ai fais plusieur test et c'est toujours le cas.

  5. #5
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Ta procédure supprime une ligne si la condition suivante est satisfaite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(i, 1) & .Cells(i, 2) & .Cells(i, 3) = .Cells(j, 1) & .Cells(j, 2) & .Cells(j, 3)
    Tu indiques :

    Elle a pour but sur plusieurs lignes où les 3 premières colonnes sont les mêmes de ne garder que la ligne où la colonne 4 est supérieure et de supprimer les deux autres.
    En fait, elle ne supprime pas que les "deux autres" mais toutes les autres qui satisfont la condition.

    Autre piste, si les cellules des 3 premières colonnes sont vides, la condition est satisfaite.

    As-tu vérifié le contenu des 3 premières colonnes des lignes qui sont effacées alors qu’elles ne le devraient pas ?

    Cordialement.

Discussions similaires

  1. Problème de macro
    Par Zorko dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2007, 18h15
  2. [Macro] problème de macro
    Par pouii dans le forum IHM
    Réponses: 2
    Dernier message: 02/05/2007, 13h58
  3. [VBA]Problème de macro et de dimension.
    Par Invité dans le forum Général VBA
    Réponses: 2
    Dernier message: 26/04/2007, 11h50
  4. Problème sur macro (2 exécutions de code)
    Par Tsuna78 dans le forum Access
    Réponses: 2
    Dernier message: 19/03/2007, 20h24
  5. [VBA-E] Problème activation macro
    Par kamshaa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/02/2007, 17h02

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