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 avec macro en if


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Par défaut probleme avec macro en if
    Bonjour,
    Dans un tableau j'aimerais qu'une macro analyse les cellules et si elles correpondent a la cellule de reference que cela entraine l'action de copier coller des cellules dans la 1er ligne vide d'une autre feuille. J'ai fait un code (1) ci dessous qui fonctionne des lors que je n'ai qu'une cellule mais lorsque je repete l'étape cela ne prend en compte que ma derniere cellule analysé code(2)
    Dans le code 2 par exemple j'aimerais que si (5,2)=(5,1) les informations liées soit copiées collées a la premiere ligne vide et que si (6,2)=6,1) alors les informations liées soient copiées collées a la premiere ligne vide, du coup à la deuxieme ligne dans mon exemple.
    Mon probleme c'est que la seule ligne qui se copie coller a la premiere ligne vide et la derniere que j'écris, dans mon exemple meme si (5,2)=(5,1), si (6,2)=(6,1) alors celle ci prendra la place de la premiere ligne dans mon tableau.

    code (1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub comparateur()
    Dim numlignevide As Integer
    numlignevide = ActiveSheet.Columns(1).Find("").Row
    Sheets("comparateur site").Activate
    If Cells(5, 2) = Cells(5, 1) Then 
    Sheets("aCCUEIL").Cells(numlignevide, 14).Value = Sheets("COMPARATEUR SITE").Cells(10, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 16).Value = Sheets("COMPARATEUR SITE").Cells(5, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 13).Value = Sheets("COMPARATEUR SITE").Cells(4, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 12).Value = Sheets("COMPARATEUR SITE").Cells(3, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 10).Value = Sheets("DOMICILE").Cells(1, 1).Value
    Sheets("aCCUEIL").Cells(numlignevide, 11).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
    end if
    sheets("accueil").activate
    end sub
    Code (2)
    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
    Sub comparateur()
    Dim numlignevide As Integer
    numlignevide = ActiveSheet.Columns(1).Find("").Row
    Sheets("comparateur site").Activate
    If Cells(5, 2) = Cells(5, 1) Then 
    Sheets("aCCUEIL").Cells(numlignevide, 14).Value = Sheets("COMPARATEUR SITE").Cells(10, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 16).Value = Sheets("COMPARATEUR SITE").Cells(5, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 13).Value = Sheets("COMPARATEUR SITE").Cells(4, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 12).Value = Sheets("COMPARATEUR SITE").Cells(3, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 10).Value = Sheets("DOMICILE").Cells(1, 1).Value
    Sheets("aCCUEIL").Cells(numlignevide, 11).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
    end if
     
    If Cells(6, 2) = Cells(6, 1) Then 
    Sheets("aCCUEIL").Cells(numlignevide, 14).Value = Sheets("COMPARATEUR SITE").Cells(10, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 16).Value = Sheets("COMPARATEUR SITE").Cells(6, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 13).Value = Sheets("COMPARATEUR SITE").Cells(4, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 12).Value = Sheets("COMPARATEUR SITE").Cells(3, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 10).Value = Sheets("DOMICILE").Cells(1, 1).Value
    Sheets("aCCUEIL").Cells(numlignevide, 11).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
    end if
    sheets("accueil").activate
    end sub

  2. #2
    Membre éprouvé
    Homme Profil pro
    Programmeur en temps libre
    Inscrit en
    Février 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeur en temps libre
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 68
    Par défaut
    Bonjour,

    c'est sur que ce code va écraser les anciennes valeurs.

    il faut réactualiser la variable numlignevide

    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
    Sub comparateur()
    Dim numlignevide As Integer
    numlignevide = ActiveSheet.Columns(1).Find("").Row
    Sheets("comparateur site").Activate
    If Cells(5, 2) = Cells(5, 1) Then 
    Sheets("aCCUEIL").Cells(numlignevide, 14).Value = Sheets("COMPARATEUR SITE").Cells(10, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 16).Value = Sheets("COMPARATEUR SITE").Cells(5, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 13).Value = Sheets("COMPARATEUR SITE").Cells(4, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 12).Value = Sheets("COMPARATEUR SITE").Cells(3, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 10).Value = Sheets("DOMICILE").Cells(1, 1).Value
    Sheets("aCCUEIL").Cells(numlignevide, 11).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
    end if
     
    numlignevide = ActiveSheet.Columns(1).Find("").Row
     
    If Cells(6, 2) = Cells(6, 1) Then 
    Sheets("aCCUEIL").Cells(numlignevide, 14).Value = Sheets("COMPARATEUR SITE").Cells(10, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 16).Value = Sheets("COMPARATEUR SITE").Cells(6, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 13).Value = Sheets("COMPARATEUR SITE").Cells(4, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 12).Value = Sheets("COMPARATEUR SITE").Cells(3, 2).Value
    Sheets("aCCUEIL").Cells(numlignevide, 10).Value = Sheets("DOMICILE").Cells(1, 1).Value
    Sheets("aCCUEIL").Cells(numlignevide, 11).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
    end if
    sheets("accueil").activate
    end sub
    ensuite je suppose que tu n'as pas que deux lignes à analyser, il faut donc faire une boucle:

    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
    ]Sub comparateur()
    Dim numlignevide As Integer, i As Integer
    numlignevide = ActiveSheet.Columns(1).Find("").Row
    Sheets("comparateur site").Activate
    For i = 5 To ActiveSheet.UsedRange.Rows.Count
        If Cells(i, 2) = Cells(i, 1) Then
            Sheets("aCCUEIL").Cells(numlignevide, 14).Value = Sheets("COMPARATEUR SITE").Cells(10, 2).Value
            Sheets("aCCUEIL").Cells(numlignevide, 16).Value = Sheets("COMPARATEUR SITE").Cells(i, 2).Value
            Sheets("aCCUEIL").Cells(numlignevide, 13).Value = Sheets("COMPARATEUR SITE").Cells(4, 2).Value
            Sheets("aCCUEIL").Cells(numlignevide, 12).Value = Sheets("COMPARATEUR SITE").Cells(3, 2).Value
            Sheets("aCCUEIL").Cells(numlignevide, 10).Value = Sheets("DOMICILE").Cells(1, 1).Value
            Sheets("aCCUEIL").Cells(numlignevide, 11).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
            numlignevide = numlignevide + 1
        End If
    Next
    End Sub
    n'hésites pas si tu as d'autres questions.

  3. #3
    Membre éclairé Avatar de eliniel
    Femme Profil pro
    Ingénieure Essais et validation
    Inscrit en
    Septembre 2014
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieure Essais et validation
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 115
    Par défaut
    il faut que tu incrémentes la cellule de destination.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Par défaut Merci
    Rebonjour,

    votre aide m'a été précieuse pour que mon code fonctionne, il est parfois rageux de se rendre compte qu'il suffisait de rajouter un élément simple pour que cela fonctionne, dans mon cas c'était rajouter "numlignevide +1"
    Donc mon code maintenant fonctionne et ressemble à ca

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Sub comparateur()
     
    Dim numlignevide As Integer
    numlignevide = ActiveSheet.Columns(1).Find("").Row
    Sheets("comparateur").Activate
     
        If Cells(5, 2) = Cells(5, 1) And Sheets("calculateur").Cells(11, 3) < Sheets("comparateur").Cells(10, 2) Then
            Sheets("synthese").Cells(numlignevide, 5).Value = Sheets("COMPARATEUR").Cells(10, 2).Value
            Sheets("synthese").Cells(numlignevide, 7).Value = Sheets("COMPARATEUR").Cells(5, 2).Value
            Sheets("synthese").Cells(numlignevide, 4).Value = Sheets("COMPARATEUR").Cells(4, 2).Value
            Sheets("synthese").Cells(numlignevide, 3).Value = Sheets("COMPARATEUR").Cells(3, 2).Value
            Sheets("synthese").Cells(numlignevide, 1).Value = Sheets("DOMICILE").Cells(1, 1).Value
            Sheets("synthese").Cells(numlignevide, 2).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
            numlignevide = numlignevide + 1
        End If
     
     
       If Cells(6, 2) = Cells(6, 1) And Sheets("calculateur").Cells(11, 3) < Sheets("comparateur").Cells(10, 2) Then
            Sheets("synthese").Cells(numlignevide, 5).Value = Sheets("COMPARATEUR").Cells(10, 2).Value
            Sheets("synthese").Cells(numlignevide, 7).Value = Sheets("COMPARATEUR").Cells(6, 2).Value
            Sheets("synthese").Cells(numlignevide, 4).Value = Sheets("COMPARATEUR").Cells(4, 2).Value
            Sheets("synthese").Cells(numlignevide, 3).Value = Sheets("COMPARATEUR").Cells(3, 2).Value
            Sheets("synthese").Cells(numlignevide, 1).Value = Sheets("DOMICILE").Cells(1, 1).Value
            Sheets("synthese").Cells(numlignevide, 2).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
            numlignevide = numlignevide + 1
        End If
     
     
       If Cells(7, 2) = Cells(7, 1) And Sheets("calculateur").Cells(11, 3) < Sheets("comparateur").Cells(10, 2) Then
            Sheets("synthese").Cells(numlignevide, 5).Value = Sheets("COMPARATEUR").Cells(10, 2).Value
            Sheets("synthese").Cells(numlignevide, 7).Value = Sheets("COMPARATEUR").Cells(7, 2).Value
            Sheets("synthese").Cells(numlignevide, 4).Value = Sheets("COMPARATEUR").Cells(4, 2).Value
            Sheets("synthese").Cells(numlignevide, 3).Value = Sheets("COMPARATEUR").Cells(3, 2).Value
            Sheets("synthese").Cells(numlignevide, 1).Value = Sheets("DOMICILE").Cells(1, 1).Value
            Sheets("synthese").Cells(numlignevide, 2).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
            numlignevide = numlignevide + 1
        End If
     
     
        If Cells(8, 2) = Cells(8, 1) And Sheets("calculateur").Cells(11, 3) < Sheets("comparateur").Cells(10, 2) Then
            Sheets("synthese").Cells(numlignevide, 5).Value = Sheets("COMPARATEUR").Cells(10, 2).Value
            Sheets("synthese").Cells(numlignevide, 7).Value = Sheets("COMPARATEUR").Cells(8, 2).Value
            Sheets("synthese").Cells(numlignevide, 4).Value = Sheets("COMPARATEUR").Cells(4, 2).Value
            Sheets("synthese").Cells(numlignevide, 3).Value = Sheets("COMPARATEUR").Cells(3, 2).Value
            Sheets("synthese").Cells(numlignevide, 1).Value = Sheets("DOMICILE").Cells(1, 1).Value
            Sheets("synthese").Cells(numlignevide, 2).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
            numlignevide = numlignevide + 1
        End If
     
     
        If Cells(9, 2) = Cells(9, 1) And Sheets("calculateur").Cells(11, 3) < Sheets("comparateur").Cells(10, 2) Then
            Sheets("synthese").Cells(numlignevide, 5).Value = Sheets("COMPARATEUR").Cells(10, 2).Value
            Sheets("synthese").Cells(numlignevide, 7).Value = Sheets("COMPARATEUR").Cells(9, 2).Value
            Sheets("synthese").Cells(numlignevide, 4).Value = Sheets("COMPARATEUR").Cells(4, 2).Value
            Sheets("synthese").Cells(numlignevide, 3).Value = Sheets("COMPARATEUR").Cells(3, 2).Value
            Sheets("synthese").Cells(numlignevide, 1).Value = Sheets("DOMICILE").Cells(1, 1).Value
            Sheets("synthese").Cells(numlignevide, 2).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
            numlignevide = numlignevide + 1
        End If
     
     Sheets("accueil").Activate
     
     End Sub
    Donc comme vous pouvez le voir il s'agit d'un tableau à 5 lignes (chaque cellules de chaques lignes correspondant à une condition if, le nombre de colonnes n'a pas forcement d'importance pour le moment (ça viendra après ) car j'aimerais apprendre à faire une boucle. Vous m'avez suggérez "for i=5 next" ceci étant je vous avoue n'avoir pas réussi à faire marcher le code avec ceci ne sachant pas comment cela fonctionne.
    Effectivement je remarque que dans mon code seul 3 éléments changes à chaque fois, le numéro des lignes dans la condition if et le numéro de ligne dans le 3eme ligne de code, ces 3 numéros de lignes correspondant toujours. Dans ce cas je pense pouvoir simplifiez mon code par un stratagème en l'occurrence une boucle mais je ne sais ni comment la placer, ni comment l’arrêter.
    Pourriez vous me donner une petite aide ou me conseiller un petit didacticiel compréhensible pour un amateur?
    Je souhaiterai faire par moi pour comprendre et apprendre donc s'il et possible de ne pas me faire le code mais de m'orienter simplement je vous en serai très reconnaissant

    Cordialement

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Par défaut resolu
    Bon ben j'ai reussi ma boucle come un grand c'est bon j'ai compris comment ça marché encore 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
    Sub comparateur()
     
    Dim numlignevide As Integer
    numlignevide = ActiveSheet.Columns(6).Find("").Row
    Sheets("comparateur").Activate
       For i = 5 To 9
       Cells(i, 2).Select
       If Cells(i, 2) = Cells(i, 1) And Sheets("calculateur").Cells(10, 3) < Sheets("comparateur").Cells(10, 2) Then
            Sheets("synthese").Cells(numlignevide, 10).Value = Sheets("COMPARATEUR").Cells(10, 2).Value
            Sheets("synthese").Cells(numlignevide, 12).Value = Sheets("COMPARATEUR").Cells(i, 2).Value
            Sheets("synthese").Cells(numlignevide, 11).Value = Sheets("calculateur").Cells(11, 3).Value
            Sheets("synthese").Cells(numlignevide, 9).Value = Sheets("COMPARATEUR").Cells(4, 2).Value
            Sheets("synthese").Cells(numlignevide, 8).Value = Sheets("COMPARATEUR").Cells(3, 2).Value
            Sheets("synthese").Cells(numlignevide, 6).Value = Sheets("DOMICILE").Cells(1, 1).Value
            Sheets("synthese").Cells(numlignevide, 7).Value = Sheets("EXTERIEUR").Cells(1, 1).Value
            numlignevide = numlignevide + 1
        End If
    next
     
    sheets("accueil").activate 
    end sub

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Tu peux même zigouiller cette ligne-là sans crainte:

    Tu peux presque toujours agir sur une cellule sans obligatoirement la sélectionner. Surtout que quand tu boucles sur des cellules, ou des feuilles, la sélection, ou l'activation à répétition fait perdre du temps.

    La sélection et l'activation sont avantageuses quand tu dois faire plusieurs actions (à la suite) sur le même objet. Mais là, puisque tu fais une seule action sur chaque cellule, l'adressage suffit amplement.

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

Discussions similaires

  1. [AC-2010] Probleme avec Macro et Parcourir
    Par Crusnok dans le forum IHM
    Réponses: 1
    Dernier message: 09/03/2012, 20h43
  2. probleme avec deux macros
    Par simplyc dans le forum Débuter
    Réponses: 4
    Dernier message: 23/12/2011, 15h55
  3. Probleme avec une condition dans une macro
    Par majudis dans le forum IHM
    Réponses: 1
    Dernier message: 08/10/2010, 17h29
  4. probleme importation avec macro
    Par olodin dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/06/2007, 15h54
  5. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 11h51

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