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 boucle VBA balayant une plage de colonnes [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut Problème boucle VBA balayant une plage de colonnes
    Bonjour,


    Etant novice en macro Excel, je souhaite faire part à la communauté développez.net d'un problème que je ne sais résoudre sur l'une de mes macro Excel.

    Le problème est le suivant : J'ai un code identique allant de la colonne 25 à la colonne 70. Ce code est une recherche de valeur mettant en relation les lignes 2 et 3. En remplaçant les "Cells()" par des "Range()" pour indiquer cellule / cellule, le code fonctionne mais je ne parviens pas à faire une boucle pour balayer cette plage de cellules.


    Si dessous mon code; Si quelqu'un peut m'éclairer sur mon erreur... Merci par 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
     
    Dim i As Integer
     
    With Sheets("LISTING")
     
    For i = 25 To 70
     
    If Sheets("RELEVE").Range("B14:B54").Find(Sheets("LISTING").Cells(2, i)) Is Nothing Then
        Cells(3, i).Value = ""
    Else
           If WorksheetFunction.VLookup(.Cells(2, i).Value, Sheets("RELEVE").Range("B14:K54"), 10, False) = "" Then
           Cells(3, i).Value = ""
           Else: Cells(3, i).Value = WorksheetFunction.VLookup(.Cells(2, i).Value, Sheets("RELEVE").Range("B14:K54"), 10, False)
           End If
    End If
     
    Next i
     
    End With

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets("RELEVE").Range("B14:B54").Find(Sheets("LISTING").Cells(2, i)) Is Nothing Then


    ton problème est ici, je crois

    tu recherche une place de cellule dans une cellule


    https://msdn.microsoft.com/fr-fr/lib.../ff839746.aspx

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut
    Bonjour et merci a-diard pour ton retour.


    Pourtant je ne pense pas que le blocage soit à ce niveau. Sur cette ligne, je recherche la valeur d'une cellule d'une feuille dans une plage de cellule d'une autre feuille...

    En retirant la boucle et en affectant le code qu'à une cellule, le code foncitonne. Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    With Sheets("LISTING")
    If Sheets("RELEVE").Range("B14:B54").Find(Sheets("LISTING").Range("Y2")) Is Nothing Then
        Range("Y3").Value = ""
    Else
           If WorksheetFunction.VLookup(.Range("Y2").Value, Sheets("RELEVE").Range("B14:K54"), 10, False) = "" Then
           Range("Y3").Value = ""
           Else: .Range("Y3").Value = WorksheetFunction.VLookup(.Range("Y2").Value, Sheets("RELEVE").Range("B14:K54"), 10, False)
           End If
    End If
    End With

    En ajoutant la boucle, la code bloque systématiquement à la ligne suivant le "Else".

    Penses-tu que ma boucle est bien écrite ?

  4. #4
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    erreur de ma part

    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
    Sub essai()
     
    Dim i As Integer
     
    With Sheets("LISTING")
     
    For i = 25 To 70
     
    If Sheets("RELEVE").Range("B14:B54").Find(Sheets("LISTING").Cells(2, i)) Is Nothing Then
        .Cells(3, i).Value = ""
    Else
           If WorksheetFunction.VLookup(.Cells(2, i).Value, Sheets("RELEVE").Range("B14:K54"), 10, False) = "" Then
           .Cells(3, i).Value = ""
           Else: Cells(3, i).Value = WorksheetFunction.VLookup(.Cells(2, i).Value, Sheets("RELEVE").Range("B14:K54"), 10, False)
           End If
    End If
     
    Next i
     
    End With
    End Sub
    pour moi ça fonctionne

    peut étre en ajoutant un . devant cells

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Si je peux me permettre.

    Le code initial présente des redondances et des approximations
    - objets Range non attachés ("." manquants)
    - Même objet utilisé à l'initiation de With et à l'intérieur

    Méthode simple:
    Chercher la valeur dans la colonne
    Si trouvée : retourner la cellule située sur la même ligne 9 colonnes à droite (vide ou non vide ne change rien)
    Si non trouvée : Retourner ""

    Soit :

    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
    Option Explicit
     
    Public Sub essai()
     
    Dim i As Byte
    Dim t As Range
     
    Application.ScreenUpdating = False
     
    With Worksheets("LISTING")
     
            For i = 25 To 70
                    'Recherche de la vleur
                    Set t = Worksheets("RELEVE").Range("B10:B54").Find(.Cells(2, i), LookIn:=xlValues)
                    If t Is Nothing Then
                            .Cells(3, i).Value = ""
                    Else
                            .Cells(3, i).Value = t.Offset(0, 9).Value
                    End If
            Next i
     
    End With
     
    'Libération de la variable
    Set t = Nothing
     
    End Sub
    A noter que la méthode IIF retourne une erreur.

    Revenir si nécessaire.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur commercial
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut
    Merci beaucoup pour vos retours.

    A_diard, j'ai essayé de rajouter les "." et même la désignation des Sheets devant les Cells pensant que la boucle faisait perdre la macro entre les deux feuilles... Mais cela ne marche pas de mon côté.

    MarcelG, merci pour ton retour, le code est en effet plus qu'approximatif !
    Par rapport à ta proposition e code, je ne comprends comment la valeur présente dans la Sheets("LISTING") est enregistrée pour ensuite être recherchée dans la Sheets("RELEVE"). L'est-elle ?



    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
     
     
    Dim i As Integer
     
    With Sheets("LISTING")
     
    For i = 25 To 70
     
    If Sheets("RELEVE").Range("B14:B54").Find(Sheets("LISTING").Cells(2, i)) Is Nothing Then
        Sheets("LISTING").Cells(3, i).Value = ""
    Else
           If WorksheetFunction.VLookup(Sheets("LISTING").Cells(2, i).Value, Sheets("RELEVE").Range("B14:K54"), 10, False) = "" Then
           Sheets("LISTING").Cells(3, i).Value = ""
           Else: Sheets("LISTING").Cells(3, i).Value = WorksheetFunction.VLookup(Sheets("LISTING").Cells(2, i).Value, Sheets("RELEVE").Range("B14:K54"), 10, False)
           End If
    End If
     
    Next i
     
    End With

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

Discussions similaires

  1. [XL-2007] [Problème Maro Vba ] Exporter une colonne en fichier Texte
    Par TuPicol dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/03/2014, 21h11
  2. VBA Effacer une plage de cellules
    Par monsterfab dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/12/2006, 17h18
  3. [VBA] Copier une plage de cellules dans un fichier fermé
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 16h52
  4. [VBA Excel] Trier une plage à plusieurs colonnes
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/12/2005, 17h04
  5. [VBA] Parcourir une plage de cellule
    Par Dinytro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/09/2005, 08h18

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