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 boucles for next imbriquées en vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Dirigeant de cabinet de consulting
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dirigeant de cabinet de consulting
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 10
    Points
    10
    Par défaut problème de boucles for next imbriquées en vba
    Bonjour,

    je suis en train de tenter de comparer deux fichiers Excel sur l'égalité de deux colonnes. Quand on trouve la même valeur de ces deux colonnes dans une ligne de la feuille A et de la feuille B, on copie ces deux lignes à la suite dans une feuille doublon, sinon, on ne copie que la ligne de la feuille A dans une feuille importable. Ensuite, on travaillera à la main sur la feuille doublon et on complètera la feuille "importable", mais cela est une autre histoire. Pour le moment, j'ai écrit le code suivant mais je reçois une erreur "il manque un for avant le next". Pourtant, il me semble avoir précisé la variable pour chaque boucle. Où est l'erreur? Merci.

    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
    31
    32
    33
    34
    35
    36
    37
    Sub Remplissage_doublons_simples()
    'définition des variables
    Dim li As String
    li = 1
    Dim ld As String
    Dim ln As String
    Dim la As String
    Dim cola As String
    Dim cold As String
     
    'nombre de lignes de "nouveau"
    ln = 1
    While Worksheets("Nouveau").Cells(ln, 1) <> ""
    ln = ln + 1
    Wend
    ' nombre de ligne de "actuel"
    la = 1
    While Worksheets("Actuel").Cells(la, 1) <> ""
    la = la + 1
    Wend
    'Recherche dans les lignes de "nouveau"
    For lign_var = 2 To ln
        For lign_varr = 2 To la
            If Worksheets("Nouveau").Cells(lign_var, 5) = Worksheets("Actuel").Cells(lign_varr, 7) And Worksheets("Nouveau").Cells(lign_var, 2) = Worksheets("Actuel").Cells(lign_varr, 2) Then
                For coli = 1 To 10
                Worksheets("Importable").Cells(li, coli) = Worksheets("Nouveau").Cells(lign_var, coli)
                Next coli
            li = li + 1
            Else
                For coln = 1 To 10
                Worksheets("Doublons").Cells(ld, coln) = Worksheets("Actuel").Cells(lign_var, coln)
                Worksheets("Doublons").Cells(ld + 1, coln) = Worksheets("Actuel").Cells(lign_var, coln)
                Next coln
            ld = ld + 2
        Next lign_varr
    Next lign_var
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    C'est un end if qu'il te manque.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    et le End If ???
    Par contre avant de te lancer tu ferais bien de lire quelques tutos sur le B.A.BA de vba, c'est le minimum.
    À commencer par les déclarations et type des variables parce que là...
    eric

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    pour ce genre de problématique une seule & unique boucle est nécessaire lors du contrôle !
    Soit via le B-A-BA d'Excel, à savoir la fonction EQUIV (Application.Match en VBA, Windows / MAC)
    soit via un dictionnaire (consulter l'aide VBA de l'objet Dictionary, plus rapide mais Windows only) …

    Sans compter les nombreux exemples dans les discussions de ce forum quelle que soit la méthode retenue !

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Stockholm, London, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Dirigeant de cabinet de consulting
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dirigeant de cabinet de consulting
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci de ces réponses, je vais mettre en application. Merci notamment à Marc-L pour sa proposition de simplifier cela avec une fonction EQUIV, je vais enquêter là-dessus. De fait, la programmation n'est pas du tout mon métier et je découvre VBA par moi-même au fur et à mesure. Et comme je travaille sur Mac, le bouquin que j'ai acheté pour démarrer n'est pas le mieux adapté. Donc, j'ai bien conscience que mon morceau de code est loin d'être optimal.

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Il est alors vraiment nécessaire de renseigner le préfixe de la discussion (MAC + version) lors de sa création !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

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

Discussions similaires

  1. Plusieurs boucles For next imbriquées
    Par athos7776 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/04/2011, 22h48
  2. [Toutes versions] Message d'erreur pour 2 boucles "For...next" imbriquées.
    Par vivi4561 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/09/2009, 14h41
  3. [Ex-03] Boucle For Next et Do Loop imbriquées
    Par moilou2 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/10/2008, 18h08
  4. Réponses: 3
    Dernier message: 24/05/2007, 17h56
  5. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36

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