Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 16h01   #1
Invité de passage
 
Homme Michaël
Étudiant
Inscription : août 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 6
Points : 0
Points : 0
Par défaut problème de macro

Bonjour je n'arrive pas à comprendre pourquoi cette macro ne fonctionne pas :

Code :
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.
michaeldms est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 17h01   #2
Nouveau Membre du Club
 
Homme
Chef de projet MOA
Inscription : juillet 2011
Messages : 22
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 : 22
Points : 32
Points : 32
Bonjour,

Voici u ne solution alternative

Code :
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
dave92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 18h17   #3
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
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.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 09h49   #4
Invité de passage
 
Homme Michaël
Étudiant
Inscription : août 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Michaël
Âge : 25
Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : août 2011
Messages : 6
Points : 0
Points : 0
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.
michaeldms est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 11h40   #5
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 692
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 692
Points : 1 443
Points : 1 443
Bonjour,

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

Code :
.Cells(i, 1) & .Cells(i, 2) & .Cells(i, 3) = .Cells(j, 1) & .Cells(j, 2) & .Cells(j, 3)
Tu indiques :

Citation:
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.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h44.


 
 
 
 
Partenaires

Hébergement Web