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 :

Procédure événementielle avec plusieurs variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Par défaut Procédure événementielle avec plusieurs variables
    Bonjour tout le monde,

    D'après le FAQ de Skyroad, il est possible d'utiliser le code ci dessous en utilisant une seule variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Dim i As Long
    If Sh.Name <> "Feuil1" Or Target.Address(0, 0) <> "G26" Then Exit Sub
    While Sh.Range("G26") > Worksheets("Fusible").Range("A" & i + 3)
        i = i + 1
    Wend
    Sh.Range("G27") = Worksheets("Fusible").Range("A" & i + 3)
    If Sh.Range("G26") = "" Then
         Sh.Range("G27") = ""
    End If
    End Sub

    Donc je m'étais dit que je pouvais extrapoler ce système avec un nombre indéfini de variable (par la suite, je me suis rendu compte que ce que j'avais supposé était faux)

    J'ai voulu appliquer le code suivant (pour une application differente de la première) :

    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
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
     
    Dim m As Integer, n As Integer, p As Integer
     
    If Sh.Name <> "Feuil1" Or Target.Address(0, 0) <> "G14" Then Exit Sub
    If Sh.Name <> "Feuil1" Or Target.Address(0, 0) <> "K10" Then Exit Sub
     
     
    For p = 1 To 5
        If Worksheets("Feuil1").Range("G14") = Worksheets("Feuil2").Cells(27, 1 + p) Then
            Exit For
        End If
    Next
     
    If ComboBox1.Value = Worksheets("Feuil3").Range("A2") Then
     
        For m = 1 To 5
            If Dispo.Value = Worksheets("Feuil2").Cells(12, m + 1) Then
                Exit For
            End If
        Next
        For n = 1 To 12
            If Worksheets("Feuil1").Range("G14") = Worksheets("Feuil2").Range("A" & 12 + n) Then
                Exit For
            End If
        Next
     
        Worksheets("Feuil2").Range("B2") = Worksheets("Feuil2").Cells(12 + n, m + 1) * Worksheets("Feuil2").Cells(28, 1 + p)
     
    ElseIf ComboBox1.Value = Worksheets("Feuil3").Range("A1") Then
     
        For n = 1 To 12
            If Worksheets("Feuil1").Range("G14") = Worksheets("Feuil2").Range("K" & 12 + n) Then
                Exit For
            End If
        Next
     
        Worksheets("Feuil2").Range("B2") = Worksheets("Feuil2").Range("L" & n + 12) * Worksheets("Feuil2").Cells(28, 1 + p)
     
    End If
     
    End Sub

    Problème : quand je touche soit à la cellule "G14" en "Feuil1", soit à la cellule "K10" de la "Feuil1", le code affiche un message d'erreur comme étant une "forme ambiguë".

    je voudrais savoir quelle(s) modification(s) apporter afin de gérer un résultat (ici, en "B2" de la "Feuil2") en fonction de plusieurs variables (ici, 2)

    Merci de votre attention.

    PS : si vous avez des pistes au niveau du tutoriel et/ou du FAQ, je suis preneur car j'ai cherché toute l'après midi, et je dois admettre que je sèche un peu

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Déjà, si tu mets
    If Sh.Name <> "Feuil1" Or Target.Address(0, 0) <> "G14" Then Exit Sub
    Tu ne vérifieras jamais la ligne suivante si Target <> "G14"
    If Sh.Name <> "Feuil1" Or Target.Address(0, 0) <> "K10" Then Exit Sub
    et comme target est G14 si tu arrive à cette ligne, que si tu es en G14 tu n'es pas en K10, donc tu sors.
    Bref, tu sors à tous les coups.
    Vérifie ton code et reviens nous
    Bonne soirée

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Par défaut
    J'ai finalement utilisé le code suivant (il n'est pas optimal, je l'admets, mais apparament, il n'a pas l'air de bugger), j'ai donc :

    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
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
     
    Dim m As Integer, n As Integer, p As Integer
     
    If Sh.Name <> "Feuil1" Or Target.Address(0, 0) <> "G14" Or Sh.Name <> "Feuil1" Or Target.Address(0, 0) <> "K10" Then Exit Sub
     
     
    For p = 1 To 5
        If Worksheets("Feuil1").Range("G14") = Worksheets("Feuil2").Cells(27, 1 + p) Then
            Exit For
        End If
    Next
     
    If Worksheets("Valeur").Range("B1") = Worksheets("Feuil3").Range("A2") Then
     
        For m = 1 To 5
            If Dispo.Value = Worksheets("Feuil2").Cells(12, m + 1) Then
                Exit For
            End If
        Next
        For n = 1 To 12
            If Worksheets("Feuil1").Range("G14") = Worksheets("Feuil2").Range("A" & 12 + n) Then
                Exit For
            End If
        Next
     
        Worksheets("Feuil2").Range("B2") = Worksheets("Feuil2").Cells(12 + n, m + 1) * Worksheets("Feuil2").Cells(28, 1 + p)
     
    ElseIf ComboBox1.Value = Worksheets("Feuil3").Range("A1") Then
     
        For n = 1 To 12
            If Worksheets("Feuil1").Range("G14") = Worksheets("Feuil2").Range("K" & 12 + n) Then
                Exit For
            End If
        Next
     
        Worksheets("Feuil2").Range("B2") = Worksheets("Feuil2").Range("L" & n + 12) * Worksheets("Feuil2").Cells(28, 1 + p)
     
    End If
     
    End Sub

    Comme qui dirait : la nuit porte conseil

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    A mon avis, ce serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Sh.Name <> "Feuil1" Or _
      (Sh.Name = "Feuil1" and Target.Address(0, 0) <> "G14" and Target.Address(0, 0) <> "K10") Then Exit Sub
    Mais ce n'est qu'un avis

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Par défaut
    C'est pas faux, j'avais oublié mes notions de logiques combinatoires

    Rappel: a.(b+c)=(a.b)+(a.c)

    Merci de me l'avoir remis en mémoire

    A plus, le temps que je tente le coup

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 66
    Par défaut
    euh attends, là, tu as fait :

    S=a+(\a.b.c)

    Donc

    S=(a+\a).(a+b).(a+c)

    S=(a+b).(a+c)

    Par conséquent :

    S=a+(b.c)

    Donc en principe, il y a possibilité d'optimiser

    ++

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

Discussions similaires

  1. [URL Rewriting] Problème avec plusieurs variables
    Par kwzprtt dans le forum Apache
    Réponses: 2
    Dernier message: 13/05/2008, 01h00
  2. [DEBUTANT]Procédure stockée avec plusieurs requetes
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/06/2007, 17h49
  3. UPDATE avec plusieurs variables
    Par melmouj dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/03/2007, 14h51
  4. Procédure stockée avec une variable "OUT"
    Par Cpas2latarte dans le forum SQL
    Réponses: 5
    Dernier message: 13/03/2007, 10h22
  5. Procédure stockée avec plusieurs SELECT
    Par amatollah dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/03/2006, 21h26

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