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 :

Conversion d'une sélection de cellule Excel en plage VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    R&D systèmes embarqués
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D systèmes embarqués

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Par défaut Conversion d'une sélection de cellule Excel en plage VBA
    Bonjour,

    dans un premier temps j'aimerai m'instruire. comment convertir une sélection de cellule dans Excell en plage exploitable pour faire du calcul via du code VBA?

    ensuite j'expose mon problème à résoudre. peut être que je ne vais pas dans la bonne direction, à vous de me dire s'il vous plait

    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
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' formule fonctionnant dans Excel
    ' =ENT(SOMME(C6:E6)/60)+(SOMME(C6:E6)-60*ENT(SOMME(C6:E6)/60))/60
     
    ' le but est de transformer la somme d'une sélection de données, exprimées en minutes, en heure et décimale d'heure dans la cellule W1:Y1 qui est fusionnée.
    ' cette sélection peut être faite à la volée dans un tableur (en générale une sélection de cellules contiguës soit en ligne, soit en colonne).
    ' ce code sera intégré à la feuille de calcul.
    ' j'aimerai qu'au changement de sélection cette macro se lance automatiquement dans la macro : Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
     
    Dim masomme As Double
     
    masomme = Application.WorksheetFunction.Sum(Range("L207:V207"))
    ' c'est ici que le Range("L207:V207") doit être remplacé par ma sélection
     
        Range("W1:Y1").Value = Int(masomme / 60) + (masomme - 60 * Int(masomme / 60)) / 60
     
     
    End Sub

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Citation Envoyé par vynmarius Voir le message
    c'est ici que le Range("L207:V207") doit être remplacé par ma sélection
    Bonsoir,
    Pour cela il te suffit de remplacer ton range figé par l'adresse de ta sélection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    masomme = Application.WorksheetFunction.Sum(Range(Target.Address))

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour à tous,

    par sécurité j'ajouterai une limitation à la plage concernée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim pl As Range
    Set pl = Intersect(target, [A2:G10])
    If Not pl Is Nothing Then
        ' calcul
        ' ...
    End If
    utiliser pl.Adress ensuite.
    eric

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonsoir, petit complément :

    Dans Private Sub Worksheet_SelectionChange(ByVal Target As Range), la variable Target désigne l’ ensemble de cellules sélectionnées (1 ou plusieurs).

    Dans S= Application. Sum(Target), la variable S est la somme ces cellules sélectionnées.

    Il suffira de l’utiliser comme, par exemple, [W1] = Int(S / 60) + (S - 60 * Int(S / 60)) / 60 où W1 est la première cellule d’une plage fusionnée ou pas.

    Avec l’observation d’Eric, je proposerai donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim S As Double
        If Not Intersect(Target , [Plage]) Is Nothing Then 'partie de la plage sélectionnée nommée Plage
            S = Application.Sum(Target)
           [W1] = Int(S / 60) + (S - 60 * Int(S / 60)) / 60
        End If
    End Sub
    Pour ma part, je me contenterai de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_SelectionChange(ByVal R As Range)
        Dim S As Double
        If Not Intersect(R, [Plage]) Is Nothing Then _
            S = Application.Sum(R) : [W1] = Int(S / 60) + (S - 60 * Int(S / 60)) / 60
     End Sub

  5. #5
    Membre habitué
    Homme Profil pro
    R&D systèmes embarqués
    Inscrit en
    Juin 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D systèmes embarqués

    Informations forums :
    Inscription : Juin 2015
    Messages : 12
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses, j'étais en congés

    je teste ça et je reviens vers vous.

    bonne soirée


    Finalement j'ai eu le temps de tester, vos 3 solutions fonctionnent !

    Mais j'ai adopté la version la plus experte, merci pour vos idées et votre temps

    j'ai bien aimé la définition de R directement dans la ligne 'Private Sub' quand on ne sait pas lire on ne comprend pas ! grâce à vous je sais déjà un peu mieux lire du code ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub Worksheet_SelectionChange(ByVal R As Range)
     
        Dim S As Double
     
        If Not Intersect(R, [Plage]) Is Nothing Then _
           S = Application.Sum(R): [W1] = Int(S / 60) + (S - 60 * Int(S / 60)) / 60
     
    End Sub

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

Discussions similaires

  1. [XL-2016] MAJ TCD selon une sélection de cellule ( boucle while) en VBA
    Par Mirk37 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/08/2017, 21h21
  2. Impression PDF d'une sélection de cellules
    Par d0n32 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/11/2011, 17h53
  3. Réponses: 2
    Dernier message: 03/05/2006, 22h34
  4. concaténation en vba dans une formule de cellule Excel
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/12/2005, 22h58
  5. appliquer une formule à +sieurs cellules excel
    Par ramsesthebest dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/09/2005, 20h36

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