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] probleme de parcours de colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tiotel
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 75
    Par défaut [VBA] probleme de parcours de colonne
    Bonjour à vous tous,

    Cela fais longtemps que je n'ai pas posté. Je reviens cette fois ci avec un petit script VBA.

    Celui ci compare deux feuilles d'un classeur

    La feuille Export, elle contient un export du fichier NK2 d'outlook. Elle contient deux colonnes

    La feuille Import, elle contient un export de mes contact. La colonne qui m'interesse est la "AW".


    Je compare la colonne A du feuiller Export à la colonne AW du feuiller Import.

    Si l'adresse mail contenue dans A est présente dans AW. Je supprime la ligne.

    Mon code est le suivant mais ne fonctionne pas. Est ce que quelqu'un aurait une petite idée du problème

    Merci d'avance

    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
     
     
    Sub Macro1()
     
        Dim f1 As Worksheet
        Dim f2 As Worksheet
     
        Set f1 = Worksheets("Export")
        Set f2 = Worksheets("import")
     
        'on parcours la colonne A de export
        For i = 2 To f1.Range("A65536").End(xlUp).Row
     
            'on parcours la colonne AW de import
            For j = 2 To f2.Range("AW65536").End(x1Up).Row
     
                'on compare les deux valeurs
                If (f1.Range("A", i).Value = f2.Range("AW", j).Value) Then
     
                    'on supprime la ligne
                    f1.Cells("A", i).EntireRow.Delete
     
                End If
            Next
        Next
     
     
    End Sub

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    tu ne dis pas ce qui ne marche pas... ni ou ....
    Boule de Cristal où est tuuuuuuuuuu. ???

    il me semble voir un problème de logique.

    For i = 2 to ... end
    For j = 2 to ...end
    If =
    delete ligne i
    problème 1 : Tu a supprimé la ligne i, donc la I+1 devient i et tu continue ta boucle avec j+ 1. c'est faux

    problème 2 : tu changes ton nombre de lignes en cours de boucle (delete) et ta limite de boucle est le nombre de lignes de départ...

    Essaie plutôt ceci, que je n'ai pas testé.

    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
    Sub Macro1()
     
        Dim f1 As Worksheet
        Dim f2 As Worksheet
        
        Set f1 = Worksheets("Export")
        Set f2 = Worksheets("import")
        
        'on parcours la colonne A de export
        For i = f1.Range("A65536").End(xlUp).Row to 2 step -1
            
            'on parcours la colonne AW de import
            For j = f2.Range("AW65536").End(x1Up).Row to 2 step - 1
            
                'on compare les deux valeurs
                If (f1.Range("A", i).Value = f2.Range("AW", j).Value) Then
                    
                    'on supprime la ligne
                    f1.Cells("A", i).EntireRow.Delete
                   exit for
                
                End If
            Next j
        Next i
        
     
    End Sub

    NB : pour faire mieux, il y a .FIND pour faire une recherche. Cela t'évite la boucle J

  3. #3
    Membre confirmé Avatar de tiotel
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 75
    Par défaut
    Bonjour,

    Désolé j'avais la tête ailleur.

    J'ai corriger mon code car il n'y avais énormément de faute dedans et j'ai aussi ajouter tes modifications apportées.

    J'ai toujours la même erreurs : Erreur définie par l'application ou par l'objet. id 1004

    la ligne en question est en rouge

    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
    Sub Macro1()
    
        Dim f1 As Worksheet
        Dim f2 As Worksheet
        
        Set f1 = Worksheets("Export")
        Set f2 = Worksheets("import")
        
        'on parcours la colonne A de export
         For i = f1.Range("A65536").End(xlUp).Row to 2 step -1
    
            
            'on parcours la colonne AW de import
            For j = f2.Range("AW65536").End(x1Up).Row to 2 step - 1
            
                'on compare les deux valeurs
                'If (f1.Range(i, "A").Value = f2.Range(j, "AW").Value) Then
                If (LCase(f1.Cells(i, "A").Value) = LCase(f2.Cells(j, "AW").Value)) Then
                           
                    'on supprime la ligne
                    f1.Cells(i, "A").EntireRow.Delete
                	exit for
                End If
            Next j
        Next i
        
    
    End Sub
    Merci pour l'idée du find mais j'ai envie de garder mes deux boucles. Je sais c'est un peu bourrin

  4. #4
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Re,
    la ligne est fausse (elle m'avait échappé). Le Row est en trop

    ceci fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     For j = f2.Range("AW65535").End(xlUp) To 2 Step -1
    Même faute sur l'autre boucle.

Discussions similaires

  1. [VBA] Problem de suppression de composant
    Par jesus144 dans le forum IHM
    Réponses: 9
    Dernier message: 26/04/2006, 10h03
  2. [VBA-E] PROBLEME de recherche entre colonnes
    Par july92 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/02/2006, 09h35
  3. [VBA] Probleme de caractères spéciaux dans nom de classeur
    Par RedBurn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/12/2005, 19h13
  4. Réponses: 10
    Dernier message: 01/12/2005, 09h47
  5. Réponses: 10
    Dernier message: 13/06/2005, 16h02

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