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 :

Probleme If Then simplissime mais obsedant!


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut Probleme If Then simplissime mais obsedant!
    Bonjour,

    Comme beaucoup de gens qui débutent en VBA je suis obsédé par un code qui me parait simple mais dont je n'ai pas les connaissances pour le développer !

    Voilà, j'ai un onglet (onglet Coucou) avec en colonne A une liste de valeurs. J'ai un deuxième onglet (onglet Salut) dans lequel on retrouve des valeurs de la colonne A (dans un ordre différent) mais avec également des infos précieuses dans les colonnes B, C, D...

    L'idée est de créer une boucle If/Then grâce à laquelle à chaque fois qu'une valeur de la colonne A de coucou est identifiée dans la colonne B de Salut, on rapatrie les valeurs des colonnes B, C, D de Salut dans les colonnes B, C, D de Coucou...

    En gros un truc comme ça : (attention, vous allez vous moquer de moi )

    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
    Sub Remplissage Coucou
     
    Coucou = Worksheet.Coucou
    Salut = Worksheet.Salut
     
    For i = 1 To i = 500
    For m = 1 To m = 500
     
     If Coucou.Range("A",i) = Salut.Range("A",m) 
      then Coucou.Range("B",i).Value = Salut.Range("B",m).Value
      and Coucou.Range("C",i).Value = Salut.Range("C",m).Value
      and Coucou.Range("D",i).Value = Salut.Range("D",m).Value
      r = r+1
     
    'un truc comme ça!
    'après je bloque... 
     
        End If
    Next i
    End Sub
    Est-ce qu'un gentil bienfaiteur pourrait m'aider SVP?

    Florent

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Bonjour,
    Il y a de gros problème dans tes boucles FOR...
    tu as la première qui concerne le i, tu as bien un "Next i" par contre tu n'as pas de "Next m",
    tu utilises "r = r + 1" qui n'intervient nulle part ailleurs.
    Dans ta condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Coucou.Range("A",i) = Salut.Range("A",m) 
    then Coucou.Range("B",i).Value = Salut.Range("B",m).Value
    and Coucou.Range("C",i).Value = Salut.Range("C",m).Value
    and Coucou.Range("D",i).Value = Salut.Range("D",m).Value
    Il ne peut pas y avoir de And Voici déjà une écriture un peu différente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Coucou.Range("A",i) = Salut.Range("A",m)  Then
       Coucou.Range("B",i).Value = Salut.Range("B",m).Value
       Coucou.Range("C",i).Value = Salut.Range("C",m).Value
       Coucou.Range("D",i).Value = Salut.Range("D",m).Value
    Je n'ai pas beaucoup de temps de m'occuper de la programmation maintenant mais je te donne une piste pour améliorer ton code. Je verrai si je peux t'aider ultérieurement.

    A+

  3. #3
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    Oui désolé Electron... r = r+1 aurait du en fait être m = m+1...

    Est ce que la boucle ci-dessous fait plus de sens?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For i = 1 To i = 500
    For m = 1 To m = 500
     
    If Coucou.Range("A",i) = Salut.Range("A",m) 
    then Coucou.Range("B",i).Value = Salut.Range("B",m).Value
    and Coucou.Range("C",i).Value = Salut.Range("C",m).Value
    and Coucou.Range("D",i).Value = Salut.Range("D",m).Value
    m = m+1
     
    End If
    Next i
    End Sub
    En fait, j'avais mis m = m+1 pour l'obliger à aller regarder la ligne d'après dans le cas où Coucou.Range("A",i) <> Salut.Range("A",m)

    Comme je vous dis, je suis débutant donc je ne suis même pas sûr de savoir de quoi je parle!!

    Merci!
    Florent

    Merci Electron!!!
    Crois-moi que ça m'aide beaucoup!

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans la correction il manque toujours le Next m et il est inutile et surtout un risque d'erreur de faire un m = m + 1 (la boucle sert à incrémenter.
    En fait, j'avais mis m = m+1 pour l'obliger à aller regarder la ligne d'après dans le cas où Coucou.Range("A",i) <> Salut.Range("A",m)
    Il faut alors faire
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2013
    Messages : 151
    Par défaut
    Rebonjour,

    Voici un code qui devrait t'aider, je l'ai testé uniquement sur 5 Cellules, Il faut que tes valeurs de de A soient "unique" de préférence

    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 CopieDsSalut()
    '
    ' Copie des cellules de Coucou dans Salut si la cellule "A" contient des valeurs de Salut
    '
    Dim i As Long
    Dim j As Long
     
    j = 1
     
    For i = 1 To 5
        For j = 1 To 5
          If Worksheets("Coucou").Range("A" & i).Value = _
            Worksheets("Salut").Range("A" & j).Value Then
     
            Worksheets("Salut").Range("B" & j).Value = Worksheets("Coucou").Range("B" & i).Value
            Worksheets("Salut").Range("C" & j).Value = Worksheets("Coucou").Range("C" & i).Value
     
            Exit For
     
          End If
        Next j
     
        j = 1
     
    Next i
     
     
     
    End Sub
    Essaie, ça doit fonctionner.
    Tiens moi au courant.
    A+

  6. #6
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Février 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Février 2014
    Messages : 10
    Par défaut
    Fantastique !
    Merci beaucoup Michel, merci Philippe, mes bienfaiteurs belges
    A bientôt et take care!
    Florent

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/09/2012, 09h13
  2. Réponses: 0
    Dernier message: 13/01/2011, 08h09
  3. problem export then import with ldifde
    Par christa_k dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 27/07/2010, 12h06
  4. Probleme JavaScript ET C#,mais .Net est un bulldozer
    Par akli2008 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 19/05/2008, 11h42
  5. Question de math simplissime mais par pour moi
    Par denis.ws dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/04/2008, 12h50

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