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

  1. #1
    Membre à l'essai
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    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 émérite
    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
    Points : 2 657
    Points
    2 657
    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
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

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

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    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 émérite
    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
    Points : 2 657
    Points
    2 657
    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
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

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

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    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 émérite
    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
    Points : 2 657
    Points
    2 657
    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
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  7. #7
    Membre émérite
    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
    Points : 2 657
    Points
    2 657
    Par défaut
    Le code précédent est par macro.
    Si tu veux que cela se fasse automatiquement à la modification de ta cellule B14, il faut que tu ailles dans les procédures de ta feuille et que tu sélectionnes "Worksheet_Change" (ou simplement "Change").

    De là, ce petit bout de code simple devrait répondre à tes attentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("B14")) Is Nothing Then
        Columns(1).AutoFilter Field:=1, Criteria1:=Range("B14")
    End If
    End Sub
    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

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

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup c'est super,

    D'ailleurs si je veux faire en sorte que dès lors que je change une information sur la feuille:
    Sheets("PORTEF PRGE") dans le classeur:Windows("PORTEFEUILLE PRGE_Liste des PM_032014.xlsm")

    que cela lance la macro1 du classeur: Windows("organigramme test.xlsm").

    Je dois écrire: je ne suis pas sûr de bien spécifier le chemin d'accès et que ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Worksheet_Change(ByVal Target As Sheets)
    If Not Application.Intersect(Target, Sheets("PORTEF PRGE")) Is Nothing Then
        Excel.Run ("Macro1()")
     
    End If
    End Sub
    Qu'en penses-tu?
    Merci d'avance pour ton aide

    Très cordialement
    Médé

  9. #9
    Membre émérite
    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
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour mederick,

    Non, du tout.
    Tout simplement, dans la feuille PORTEF PRGE, tu vas dans le Worksheet_change et insère tout bêtement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
        Macro_auto
    End Sub
    "Macro_auto" est le nom de la macro à lancer !

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

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

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    Par défaut Dernier Souci
    Bonjour Kimy,

    Merci enormément, du coup dès que je modifie une valeur dans la feuille PORTEF PRGE la macro se lance automatiquement? 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
    Document ex.docx
    J'ai normalement une toute dernière requête s'il te plait!! Ma macro me permet de mettre à jour un fichier excel à partir d'un autre fichier excel (avec des modifications régulières) donc pour ce faire ma macro supprime dans la feuille organigramme les anciennes lignes des tableaux dans une même colonne ( 3 tableaux par colonne, tableaux espacés, dont chacun est actualisés avec une petite macro distincte) et ensuite la macro colle les nouvelles données actualisées dans chacun des tableaux. Cependant je désignais une cellule à la base (cf phto A2, A12,A21) pour que la macro colle au bon endroit mais après les modifications il y a des ajouts ou retraits de lignes et cela pose souci par rapport à la cellule de destination de mon "coller"

    J'ai pensé à lancer une recherche du titre du tableau pour faire insérer en dessous mais ca ne marche pas je crois...

    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
    Windows("organigramme test.xlsm").Activate
        Sheets("REPARTITION PART 1").Select
        ActiveSheet.Unprotect
     
        Range("A2").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlUp
     
        Windows("PORTEFEUILLE PRGE_Liste des PM_032014.xlsm").Activate
        Sheets(3).Select
        Range("A1").Select
        Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Windows("organigramme test.xlsm").Activate
        Sheets("REPARTITION PART 1").Select
        Range("A2").Select
        Selection.Insert Shift:=xlDown
    Comment ferais-tu stp?? Je te joins une copie écran pour que tu vois la disposition ainsi que le code de la procédure du supprimer anciennes valeurs, copier-coller.

    C'est mon dernier gros souci pour ma macro...

    Merci encore!! tu me sauves! Tu es vraiment le mec sur le site qui m'a aidé pour tous mes soucis avec ma macro!!!

    Très cordialement
    Médé

  11. #11
    Membre émérite
    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
    Points : 2 657
    Points
    2 657
    Par défaut
    mederick,

    Tout d'abord, voici ce que j'ai dit :
    "Macro_auto" est le nom de la macro à lancer !
    Donc si ta macro s'appelle "macro1", alors écris "macro1" tout simplement.

    Ensuite, je n'ai pas tout compris à ton problème...
    La seule chose que j'arrive à bien identifier c'est le fait que tu recherches la cellule de début de ton tableau pour y insérer des valeurs.
    Pour cela la fonction "find" te permet de faire ça.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Ma feuille").Columns(1).Find("Ce que je cherche", LookIn:=xlValues, LookAt:=xlWhole)
    Tu dois spécifier la feuille, puis une "Range" et enfin tu peux utiliser ta fonction "find".
    => La fonction find te renvoie la première cellule où est positionnée ce que tu as demandé.

    Dis-moi si tu souhaites plus d'explications.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

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

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    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 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...)

  13. #13
    Membre à l'essai
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    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

  14. #14
    Membre émérite
    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
    Points : 2 657
    Points
    2 657
    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
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  15. #15
    Membre à l'essai
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    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

  16. #16
    Membre émérite
    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
    Points : 2 657
    Points
    2 657
    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
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  17. #17
    Membre à l'essai
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    Par défaut
    Ok je vois,

    le code que tu m'as donné me permet de trouver la cellule "A11" avec find "T2" (raccorci de Tab2)
    ensuite ce que je veux faire c'est atteindre la cellule juste en dessous la cellule T2: la cellule "A12" pour supprimer les données du tableau (et ensuite refaire la recherche find atteindre la cellule juste en dessous de "A11" et coller mes nouvelles données dans mon tableau.) et donc la cellule "A12" est amenée à changer de numéro de ligne mais à colonne fixe en fonction de l'actualisation de mes données dans mes tableaux du dessus.

    Rg = .Columns(1).Find("T2", LookIn:=xlValues, LookAt:=xlWhole)
    Rg.Offset(1, i)
    Rg2= la cellule juste en dessous de Rg(première cellule de mon tableau)
    Le y(=i+1) est une variable pour désigner la ligne de Rg2: Rg2.Offset(1, y) = Rg.Offset(1, i + 1)

    Document ex.docx

    Je veux donc atteindre au final la cellule qui est selectionnée dans le doc que j'ai mis en pièce jointe.
    Je sais pas si c'est clair

    Cordialement

  18. #18
    Membre émérite
    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
    Points : 2 657
    Points
    2 657
    Par défaut
    Alors... je pense que tu mélanges beaucoup de choses.

    Tout d'abord une boucle "For" incrémente de manière naturelle le i à chaque occurrence. Cela signifie que si tu arrives dans une boucle For avec un i de 0 à l'infini, tu ne sortiras jamais de ta boucle.

    De plus, un offset positionne ton "curseur virtuel" déjà sur la cellule.

    Exemple :
    Rg = Range("A11")
    Rg.offset(1, 0) devient alors la cellule A12

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Set Rg = Range("A11")
        For i = 1 To 5
                Rg.Offset(i, 0) = i
        Next i
    Ce petit bout de code te permet la chose suivante :
    Tu places Rg en A11.
    Tu passes dans un boucle de i = 1 à 5, tu feras donc 5 fois la même chose avec i s'incrémentant de 1 à chaque passage sur "Next i".

    Premier passage (i = 1) :
    Rg (donc la cellule A11) possède un offset de i (=1) ligne et 0 colonne.
    Donc Rg.offset(i, 0) = A12.
    Tu places donc en A12 la valeur de i, à savoir 1.
    Tu incrémentes i.

    Second passage (i = 2) :
    Rg (donc la cellule A11) possède un offset de i (=2) lignes et 0 colonne.
    Donc Rg.offset(i, 0) = A13.
    Tu places donc en A13 la valeur de i, à savoir 2.
    Tu incrémentes i.

    Troisième passage (i = 3) :
    Rg (donc la cellule A11) possède un offset de i (=3) ligne et 0 colonne.
    Donc Rg.offset(i, 0) = A14.
    Tu places donc en A14 la valeur de i, à savoir 3.
    Tu incrémentes i.

    etc...

    Bref, je ne pourrais pas t'aider d'avantage si tu ne me dis pas exactement ce que tu souhaites faire avec un fichier Excel détaillé.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  19. #19
    Membre à l'essai
    Femme Profil pro
    banque
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : banque

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 15
    Points
    15
    Par défaut Explication avec fichier excel
    Je veux juste atteindre la cellule qui se trouve en dessous de la valeur "find" dont la référence de la cellule est variable.

    Je te joins en annexe un document excel ou je t'explique sur les feuilles 1 et 2 ce que je désire faire exactement.

    Cordialement

    Merci
    Explication 2.xlsx

+ 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