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 :

Exécuter macro si cellule contenue dans une plage [Toutes versions]


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
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 11
    Par défaut Exécuter macro si cellule contenue dans une plage
    Bonjour à tous,

    Je cherche à moyen de faire fonctionner une macro sous conditions.

    L'objectif est de faire en sorte que si la cellule (G1) est contenue dans plage de cellules située en colonne B (de B9 à la dernière ligne de la colonne B) alors elle exécute une macro (que j'ai déjà créé). Si la cellule (G1) n'est pas contenue dans la plage de cellules en colonne B, alors elle affichera 100% dans la cellule B3.

    Je dois exécuter cette opération sur plus d'une centaines de feuilles d'où la pertinence d'utiliser une macro Excel afin de gagner en efficacité.

    J'ai essayé le code suivant en faisant quelques recherches sur le sujet sans succès:
    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 Test()
    Dim dl As Long
    Dim k As Integer
     
    'Pour chaque feuille du classeur
    For k = 6 To Sheets.Count
     
    dl = Range("A" & Rows.Count).End(xlUp).Row
     
    If Not Intersect(Range("G1"), Range("B9:B" & dl)) Is Nothing Then _
    Range("B3").Select
    ActiveCell.FormulaR1C1 = "100%"
     
    Else
     
    '(Code Macro déjà écrit mais assez long pour être copié ici)
     
    End If
    Next k
    End Sub
    Quelqu'un aurait-il une solution à me proposer?

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Nefko, bonjour le forum,

    La cellule G1 ne sera JAMAIS dans une plage ne contenant que des cellules de la colonne B !...

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 11
    Par défaut
    C'est vrai que je suis allé un peu vite mais il y a t-il alors un moyen de chercher la valeur de la cellule G1 dans la plage situé en colonne B qui contient également plusieurs valeurs?

    Je viens également de penser à une autre méthode que j'ai essayé mais que je n'arrive pas à faire fonctionner. L'idée serait de retranscire sous un code VBA:
    Si (NB.SI(B9:Bi);G1)>0) = 0 Alors la cellule B3 = 100%
    Si non, exécute la macro.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    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 680
    Par défaut
    Bonjour,

    Citation Envoyé par Nefko Voir le message
    Je viens également de penser à une autre méthode que j'ai essayé mais que je n'arrive pas à faire fonctionner. L'idée serait de retranscire sous un code VBA:
    Si (NB.SI(B9:Bi);G1)>0) = 0 Alors la cellule B3 = 100%
    Si non, exécute la macro.
    Une proposition a adapter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If WorksheetFunction.CountIf(Columns(1), Cells(1, 1).Value) Then
    cell(,)=
    Else
    call lamacro
    End If

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    exemple sur tout les sheets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
        For Each sh In Worksheets
            If WorksheetFunction.CountIf(sh.Range("B9", sh.Cells(Rows.Count, "B").End(xlUp)), sh.[G1].Value) Then
                'si oui
                Call lamacro
            Else
                'si non
                sh.[B3] = "100%"
            End If
        Next
    End Sub
    exemple sur certains sheets en particuliers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     
       myarray = Array(1, 4, 8, 12) ' les element de l'array peuvent etre des noms en toutes lettres ET !! entre guillement chacun des  Nom !!!!!!!
        For i = LBound(myarray) To UBound(myarray)
            If WorksheetFunction.CountIf(Sheets(myarray(i)).Range("B9", Sheets(myarray(i)).Cells(Rows.Count, "B").End(xlUp)), Sheets(myarray(i)).[G1].Value) Then
                'si oui
                Call lamacro
            Else
                'si non
                Sheets(myarray(i)).[B3] = "100%"
            End If
        Next
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2019
    Messages : 11
    Par défaut
    Encore une fois Merci !

    J'ai pu résoudre mon problème grâce à vos suggestions !

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

Discussions similaires

  1. Tester si valeur d'une cellule est contenue dans une plage
    Par Fabert dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 20/04/2015, 14h34
  2. [XL-2010] Coordonnées de cellule contenues dans une variable suite
    Par Henri1830 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/08/2012, 21h03
  3. Exécution d'un SELECT contenu dans une variable.
    Par lecail65 dans le forum Développement
    Réponses: 6
    Dernier message: 20/07/2010, 15h06
  4. suppression cellule vide dans une plage ?
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/10/2007, 15h01
  5. [VBA-E] Savoir si une cellule est contenue dans une plage
    Par psych0o0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/05/2006, 14h12

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