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 :

Utiliser target.value dans une plage


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut Utiliser target.value dans une plage
    Bonjour,

    j'ai une petite difficulté à écrire une code.
    J'ai une plage de cellule non contigues C1:L1 - C4:L4 - C7:L7 - C10:L10 .....(toujours avec un pas de 3).
    Et je souhaite utiliser target.value. Je ne sais pas où définir ma plage à l'intérieur de laquelle target.value sera appliquée ?
    j'ai le code de target.value pour tout un tableau mais pas pour une plage.

    Merci pour vos conseils
    @+

  2. #2
    Membre émérite
    Avatar de cb_60
    Homme Profil pro
    Chargé de mission technique
    Inscrit en
    Juillet 2007
    Messages
    1 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé de mission technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 253
    Points : 2 375
    Points
    2 375
    Billets dans le blog
    14
    Par défaut
    Bonsoir
    Il faudrais en voir un peu plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("C1:L1,C4:L4,C7:L7,C10:L10").Select
    ce que j'ai mis au dessus permet de selectionner tes cellules
    L'imagination est plus importante que le savoir.... A . Einstein.
    https://www.developpez.net/forums/blogs/179588-cb_60/
    Merci de cliquer sur pour clore cette discussion.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Bonjour,

    OK merci.
    Deux précisions :

    1 - mes lignes vont jusqu'à 112
    2 - je ne veux pas les sélectionner, je veux nommer cette plage et c'est à l'intérieur de cette plage que va s'appliquer target.value

  4. #4
    Membre émérite
    Avatar de cb_60
    Homme Profil pro
    Chargé de mission technique
    Inscrit en
    Juillet 2007
    Messages
    1 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chargé de mission technique
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 253
    Points : 2 375
    Points
    2 375
    Billets dans le blog
    14
    Par défaut
    Re
    Une adaptation d'une macro de Michel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
           Dim x As Integer, y As Integer
     
            'Crée une boucle de 1 à 112
            For x = 1 To 112 Step 3
                'Crée une boucle de 1 à 7
                For y = 1 To 7
                    'Ecrit dans les colonnes
                    Cells(x, y) = TAvaleur '"L" & x & "-C" & y
                Next y
            Next x
    correction pour ne pas boucler sur toutes les feuilles
    L'imagination est plus importante que le savoir.... A . Einstein.
    https://www.developpez.net/forums/blogs/179588-cb_60/
    Merci de cliquer sur pour clore cette discussion.

  5. #5
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    bonsoir,

    à ton tour de m'éclaircir


    c'est quoi pour toi
    Et je souhaite utiliser target.value
    target.value ?

    PS: pour t'aider, pour moi target et le nom du paramétre utilisé par Excel VBA, dans la plus part des procédure événementielles possédant un paramétre de type range (plage).
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    En fait, Target.value est utilisé comme RechercheV mais dans la cellule courante.

    le code ci-dessous fonctionne à merveille MAIS sur tout un tableau.

    Je cherche à limiter cela à, disons aux lignes 4 - 7 - 10 - 13 - 16 -.....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim i As Byte
    Dim code As String
     
    On Error GoTo fin
    If Target.Value <> "" Then
        code = Target.Value
        For i = 3 To 9
            If code = Cells(i, 14) Then Target.Value = Cells(i, 15)
        Next
    End If
    fin:
    End Sub

  7. #7
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    Bonjour,Pierre

    je continue à essayer de t'expliquer ce qu'est target avant de te répondre...

    regarde ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    tu vois bien que Target et un paramétre range de la fonction événemetielle Worksheet_change. Ainsi lorsque un changement intervient dans ta feuille excel , excel appelle cette fonction avec comme paramétre target qui pointe sur la plage de cellule modifié.

    cela n'as rien à voir avec rechercheV que tu "lance toi même" en lui passant tes paramétres.
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    441
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 441
    Points : 163
    Points
    163
    Par défaut
    Oui j'ai bien compris le fonctionnement de Worksheet_Change.

    Je cherche à adapter cela non pas à la feuille entière mais à une plage de lignes non contigues du style Plage_Change...

  9. #9
    Membre éprouvé
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Points : 1 191
    Points
    1 191
    Par défaut
    non je ne pense pas que tu puisse créer tes propres fonctions événementielles..


    mais tu peu tester la plage target en paramétre, pour cela utilise Intersect, fonction qui permet de renvoyé l'intersection de deux plage , dans ton cas la plage Target, et par exemple les colonnes ou ta fonction doit être active A:H..
    tu peu aussi tester le numéro de ligne Target.Row pour connaitre la ligne de ta cellule..
    cependant Target contient une plage et donc pas forcément une seule cellule par exemple dans le cas d'une copie d'une plage de donnée c'est toute la plage qui est envoyé par excel en paramétre à la fonction change..
    pour traiter cela tu peu boucler par un for Each dans chacune des cellules de la plage , cela donne :


    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
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim i As Byte
    Dim code As String
    Static yaEncours As Boolean
    Dim yaC As Range 'Cellule
    Dim yAPlage As Range
    '4 - 7 - 10 - 13 - 16
    '
    If Not yaEncours Then 'Si pas déjà en cours
      yaEncours = True
    'Limitation aux colones A et H ..
        Set yAPlage = Intersect(Range("A:H"), Target)
                If Not yAPlage Is Nothing Then 'IL ya bien des cellules dans l'intersection des deux plages
                   For Each yaC In yAPlage.Cells 'Parcours des cellules de la plage
                      If (yaC.Row - 1) Mod 3 = 0 Then ' Limitation au lignes '4 - 7 - 10 - 13 - 16 ....
                            code = yaC.Value
                           For i = 3 To 9
                              If code = Cells(i, 14) Then yaC.Value = Cells(i, 15)
                          Next
                       End If
                   Next
                End If
        yaEncours = False
     End If
    A oui j'ai rajouté yAEncours, pour éviter que la fonction parte en boucle..
    JacqueS.

    Ps: je ne télécharge les piéces jointes qu'en dernier recours .(et encore...)

    Pour devenir mon ami laissez moi un message

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Target renvoie à la plage (<> cellule) modifiée.

    Si tu modifies plusieurs cellules en même temps, la plage Target ne peut donc pas être utilisée comme ceci
    Tu dois donc utiliser une variable pour boucler sur les cellules de la plage Target

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim Cellule As Range
     
        For Each Cellule In Target.Cells
            If Cellule.Value <> "" Then
                ' ...
            End If
        Next
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2007
    Messages : 120
    Points : 181
    Points
    181
    Par défaut
    Salut le forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Not Application.Intersect(Target, Range("A1:A12, D4:D10, D20, D22, D55, E1:E12")) Is Nothing Then 
    MsgBox "Click on " & Target.Address 
    End If 
    End Sub

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Bonjour et Merci à tous pour votre aide
    Cela fonctionne.

  13. #13
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Citation Envoyé par Lao Pi Voir le message
    Cela fonctionne.
    Dans ce cas, veux-tu bien cliquer sur le bouton , stp?

    Merci
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

Discussions similaires

  1. plusieurs value dans une liste deroulante
    Par lepierre dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 16/11/2004, 14h53
  2. Utilisation de Getdate dans une fonction
    Par BaronSamdi dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/11/2004, 10h12
  3. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  4. [Applet]Utiliser plusieurs Applet dans une même classe
    Par BRAUKRIS dans le forum Applets
    Réponses: 5
    Dernier message: 11/06/2004, 15h27
  5. Réponses: 3
    Dernier message: 11/03/2004, 10h58

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