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 :

Aide sur VBA condition If /else if/end if


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut Aide sur VBA condition If /else if/end if
    Bonjour,

    J'essaie de programmer sous VBA,
    Je désire créer une fontion VBA qui me permette de copier le contenu des cellules de la colonne C et de le coller sur la même ligne dans la colonne E seulement si la cellule cible(dans la colonne E) est vide.

    Voila ce que j'ai tapé, pouvez-vous m'aider SVP, je suis vraiment bloqué...

    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
     
      Dim Row As Object
        Set Row = ActiveSheet.Range("C" & Rows.Count).End
     
        Range("A1").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        If Selection.SpecialCells(xlCellTypeBlanks).Select = True Then Row.Select Application.CutCopyMode = False
        Else
            If Selection.SpecialCells(xlCellTypeBlanks).Select = False Then Stop
        For Each Row In ActiveSheet.Column(C)
        Target.Row.Copy _
        Destination:=ActiveSheet.Range("E" & Row)
        Next Row
        End If

  2. #2
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour mederick,

    Voici ce que je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub copie_colle()
    Dim rng As Range
     
    With Worksheets("Feuil1")
        Set rng = .Range("C1")
        For i = 0 To .Columns(3).Find("*", , , , , xlPrevious).Row
            If rng.Offset(i, 2) = "" Then
                rng.Offset(i, 2) = rng.Offset(i, 0)
            End If
        Next i
    End With
     
    End Sub
    Dis moi si ça te convient !

    Cordialement,
    Kimy

  3. #3
    Membre averti
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut
    Merci énormément!!

    Ca marche super bien. Et je n'aurai jamais pu trouver ce code avec mes connaissances limitées en VBA. d'ailleurs as-tu un site ou je peux apprendre à coder qui soit progressif? Merci encore énormément.

    Ps une dernière petite question qui est simple cette fois je pense:

    Je fais un copier d'une cellule avec le nom d'une personne et je colle dans une recherche (filtre par nom) mais dans le code ca ne me note pas coller mais directement le nom de la personne, j'aimerai dire à VBA de coller le nom que j'ai copié pour la recherche (bien que j'ai fait cette macro par enregistrement des actions). Je ne sais pas comment faire cela non plus... Merci encore pour tout!!
    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
     
    'Macro pour J. DEMET
     
        Windows("organigramme test.xlsm").Activate
        Sheets("ORGANIGRAMME").Select
        Range("B14").Select
     
        Selection.Copy
        Windows("PORTEFEUILLE PRGE_Liste des PM_032014.xlsm").Activate
        ActiveSheet.Unprotect
        ActiveWindow.WindowState = xlNormal
        ActiveWindow.WindowState = xlNormal
        Sheets("PORTEF PRGE").Select
     
        ActiveSheet.Range("$A$4:$J$1437").AutoFilter Field:=3, Criteria1:= _
            "=J. DEMET", Operator:=xlAnd

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour mederick,

    Concernant ton filtre, tu as la solution avec l'instruction que tu as donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("$A$4:$J$1437").AutoFilter Field:=3, Criteria1:="=J. DEMET", Operator:=xlAnd
    Pour faire plus court, tu dois filtrer sur une range : "Range("$A$4:$J$1437")".

    Tu peux le faire sur des colonnes entières : "Columns(1).AutoFilter" + ...

    Bref, petite instruction qui filtre sur la colonne 1 de ton onglet "Feuil2" selon le mot "test2" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Macro_filtre()
    With Worksheets("Feuil2")
        .Columns(1).AutoFilter Field:=1, Criteria1:="test2"
    End With
    End Sub
    Plus de détails me permettrait de t'aider par rapport à ce filtre.

    Concernant l'apprentissage, c'est juste de mettre les mains dans le cambouis.

    Regarde sur internet, prends les différents codes, utilise l'enregistreur de macro (c'est très bien personne ne le fait) et modifie le code pour apprendre.

    Des tutos, au début... j'en n'ai jamais utilisé... à tord surement...
    Utilise les tutos du site lorsque tu es bloquée sur un point, ça t'aidera quoi qu'il arrive.

    Cordialement,
    Kimy

  5. #5
    Membre averti
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut
    Merci encore Kimmy pour ta réponse,

    malheuresement mon souci c'est que je veux que VBA copie et colle automatiquement le contenu de la cellule B14 pour si le nom de cette personne est amenée à être changée le logiciel fasse le nouveau filtre sur le nom de la nouvelle personne et non pas sur une donnée fixe 'J.DEMET' en gros la cellule B14 est une variable qui implémente la recherche filtre.

    Merci pour tes conseils, oui c'est ce que je fais je m'aide de l'enregistreur de macro pour m'aider et comprendre mieux comment cela fonctionne, bien que j'ai eu des cours de VBA en école cela reste limité... Et c'est vraiment important de savoir macroter

    Très cordialement
    Médérick
    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
     
    'Macro pour J. DEMET
     
    Windows("organigramme test.xlsm").Activate
    Sheets("ORGANIGRAMME").Select
    Range("B14").Select
     
    Selection.Copy
    Windows("PORTEFEUILLE PRGE_Liste des PM_032014.xlsm").Activate
    ActiveSheet.Unprotect
    ActiveWindow.WindowState = xlNormal
    ActiveWindow.WindowState = xlNormal
    Sheets("PORTEF PRGE").Select
     
    ActiveSheet.Range("$A$4:$J$1437").AutoFilter Field:=3, Criteria1:= _
    "=J. DEMET", Operator:=xlAnd .

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Macro_filtre()
    Dim variable1 as String
    With Worksheets("Feuil2")
        variable1 = .Range("B14")
        .Columns(1).AutoFilter Field:=1, Criteria1:=variable1
    End With
    End Sub

  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,

    sans aller plus loin
    ma macro s'appelle macro1 donc ca donne: est ce bien cela?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
        Macro1_auto
    End Sub
    et non, c'est plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
        Macro1
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Membre averti
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut
    Bonjour Kimy,

    J'ai essayé d'atteindre la première cellule de mes tableaux mais je n'y arrive pas avec le code que tu m'as donné...

    VBA me met une erreur de compilation en me disant que je dois mettre =

    Je ne comprends pas où je dois spécifier une range, ni le fonctionnement exact de cette ligne de code, j'ai compris que c'est une fonction qui trouve la première valeur de "ce que je recherche".

    D'ailleurs ce que je recherche doit être 'un nom?', 'une cellule'?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Windows("organigramme test.xlsm").Activate
    Worksheets("ORGANIGRAMME").Columns(1).Find("A2", LookIn:=xlValues, LookAt:=xlWhole)
    Comment est ce que cela pourra me permettre de trouver la première ligne et cellule juste en dessous du titre du tableau pour coller les infos actualisées?

    Merci encore Kimy

    Très cordialement

  9. #9
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    mederick,

    Tu disais que tu souhaitais apprendre le VBA. Donc il faut rechercher pour adapter !

    Bref, la solution est la suivante :
    quand tu souhaites atteindre une cellule, tu dois définir la variable qui va l'atteindre.
    Voici deux exemples :
    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
    'Cas 1 :
    Sub recherche_cell()
    'Définition de ta variable en tant que "Range"
    Dim Rng As Range
     
    'Avec la feuille "ORGANIGRAMME"
    With Worksheets("ORGANIGRAMME")
        'On set Rng à l'endroit ou se trouve la valeur "poste 503" dans la colonne 2
        Set Rng = .Columns(2).Find("poste 503", LookIn:=xlValues, LookAt:=xlWhole)
    End With
     
    'On affiche l'adresse de "Rng"
    MsgBox Rng.Address
     
    End Sub
     
    'Cas 2
    Sub recherche_cell2()
    Dim Rng As Range
     
    Set Rng = Worksheets("ORGANIGRAMME").Columns(2).Find("poste 503", LookIn:=xlValues, LookAt:=xlWhole)
     
    MsgBox Rng.Address
     
    End Sub
    Dans les deux cas, ta MsgBox t'afficheras (d'après ton image) "$B$11".

    Cela signifie que ta variable "Rng" contient désormais l'adresse B11.

    Tu n'as plus qu'à remplacer cette MsgBox par ce que tu souhaites.

    Cordialement,
    Kimy

  10. #10
    Membre averti
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut
    Bonjour Kimy,

    Merci pour ta réponse mais j'ai vraiment l'impression que tu penses que je ne cherche pas de moi même et que j'attende que tu fasse le travail pour moi, ce qui n'est pas le cas! J'essais d'apprendre et de coder comme je le peux avec mon peu de connaissance en VBA. Ce qui est logique pour toi ne l'est pas forcément pour moi tel que penser à définir une variable mais maintenant j'ai bien compris ca!!


    Merci pour le code il me permet de trouver la cellule au niveau du titre de mon tableau (j'ai entré le chiffre 2 pour permettre à excel de trouver le titre de mon tableau), maintenant j'essaye de dire à excel de me saisir la cellule juste en dessous, je me suis aidé de ton code pour une autre fonction mais cela ne marche pas certainement parce que je définie mal la variable y ou Rg2. Sais tu ce qui bug stp?

    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 Macro1()
    Dim Rg As Range
    Dim Rg2 As Range
    Dim y As Integer
    Windows("organigramme test.xlsm").Activate
    With Worksheets("REPARTITION PART 1")
        Set Rg = .Columns(1).Find("2", LookIn:=xlValues, LookAt:=xlWhole)
        For i = 1 To i = infini
            If Rg.Offset(1, i) Then
               Set Rg2.Offset(1, y) = Rg.Offset(1, i + 1)
            End If
    Next i
     
    End With
    MsgBox Rg2.Address
    End Sub

  11. #11
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Commentaire de ton code :
    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
    Sub Macro1()
    Dim Rg As Range
    Dim Rg2 As Range
    'A quoi sert cette variable ?
    Dim y As Integer
     
    'Pas besoin de ça je pense...
    'Windows("organigramme test.xlsm").Activate
     
    With Worksheets("REPARTITION PART 1")
        'Ok. Tu cherches donc la valeur "2" que tu as insérée. Je te propose de mettre un nom plus "complexe" du genre "Tab02".
        Set Rg = .Columns(1).Find("2", LookIn:=xlValues, LookAt:=xlWhole)
     
        'i jusqu'à "l'infini"... C'est bof... Il faut absolument corriger ça. Combien de i tu as ? Cela correspond à quoi ?
        For i = 1 To i = infini
            'Cette condition ne veut rien dire. Que souhaites-tu "vérifier" ?
            If Rg.Offset(1, i) Then
                'y n'est pas défini au préalable. Rg2 non plus. Cela signifie que tu essaies de faire un "offset" sur une cellule non définie.
                'De plus tu ne peux pas "seter" une variable avec un offset. Tu set une variable du type Set MaRange = "ce que tu veux".
                Set Rg2.Offset(1, y) = Rg.Offset(1, i + 1)
            End If
        Next i
    End With
     
    MsgBox Rg2.Address
     
    End Sub
    Je pense qu'il serait préférable que je te donne un exemple.

    Explicite clairement ce que tu souhaites faire avec tes tableaux, quel cas de figure et peut-être un fichier d'exemple avec ton état initial ainsi que ton état souhaité.

    Cordialement,
    Kimy

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

Discussions similaires

  1. [AC-2003] Aide sur la condition "select case"
    Par Ministic dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/03/2010, 11h22
  2. besoin d'aide sur VBA d'excel
    Par taraud dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/03/2010, 15h25
  3. [XL-2007] Aide sur une condition
    Par Nickname dans le forum Excel
    Réponses: 9
    Dernier message: 21/08/2009, 10h00
  4. aide sur vba et excel
    Par kouame34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/09/2007, 14h42
  5. demande d'aide sur VBA
    Par aralth dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/07/2007, 05h45

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