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 :

transfert Sélection avec souris vers tableau. [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Par défaut transfert Sélection avec souris vers tableau.
    hello à tous et bonne année 2022.

    vu sur ce forum ceci :

    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
    Sub TransfertPlageVersTableau()
     
        Worksheets("feuil1").Activate '(on active la feuille n°1)
        Dim Plage As Range
        Set Plage = Range("A1:B5") 'on agit sur la zone A1:B5 (que l'on a nommé et définit "Plage") 
     
        '-------------------- 
        'Méthode de la boucle
        '-------------------- 
     
    	'Dim TabOrd() As Double 
    	'c'est ce qu'il y avait à l'origine (Tableau dynamique non dimensionné nommé "TabOrd" typé avec des valeurs "Double")
     
    	' Je pense qu'il vaut mieux "typer" en "Variant" quand on utilise une sélection faite avec la souris..
    	' on peut peut alors sélectionner différentes valeurs ... non identiques
    	'la ligne devient alors :
    	Dim TabOrd() As Variant 
     
        Dim NumRow As Integer: Dim NumCol As Integer
    	NumRow = Plage.Rows.Count: NumCol = Plage.Columns.Count
        'NumRow récupère le nombre de lignes , NumCo récupère le nombre de colonnes
     
    	ReDim TabOrd(1 To NumRow, 1 To NumCol) 
    	'on redimensionne le tableau TabOrd en fonction des lignes et colonnes trouvées et on fait commencer les indices à 1 
     
    	Dim i As Integer: Dim j As Integer
    	For i = 1 To NumRow
            For j = 1 To NumCol
                TabOrd(i, j) = Plage(i, j).Value '(on transfert les valeurs de la "Plage" dans le tableau "TabOrd")
                Debug.Print "Tabord(" & i & "," & j & ")" & TabOrd(i, j) 'juste pour visualiser.
            Next j
        Next i
    End Sub
    cela fonctionne avec une plage que l'on définit dans le code. (Dim Plage As Range Set Plage = Range("A1:B5"))

    Mais je me pose la question suivante :
    comment pourrait-on faire pour une sélection faite avec la souris.. ?
    il faudrait demander au programme de prendre la sélection faite avec la souris et ensuite de faire le transfert dans un tableau ...
    mais je ne vois pas quelle instruction permet de faire cela..

    Merci de votre aide..

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Ne sachant pas dans quel contexte tu te trouves, je dirais que ce code ne sert à rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim TabOrder as variant
     
    'On place les valeurs sous forme de tableau
    tabOrder = Selection.value
    J'ai utilisé Selection mais je ne suis pas fan mais bien sûr des fois, pas le choix...

    Mais il faudrait en dire plus sur ce que tu souhaites faire avec ce tableau de valeurs. Si c'est pour accélérer le traitement de données, ça sera plus rapide comme ça.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Par défaut
    Re, Merci de ton aide.

    Contexte exemple..

    soit (A1:B4) qui contient des entiers. mais il pourrait y avoir des mélanges ....
    prenons l'exemple d'entiers ....

    avec une plage ou une zone le code sur mon 1° Post fonctionne ..

    mais avec une sélection... cela ne passe plus ...

    c'est normal puisque le code doit prendre en compte la sélection ...
    mais je ne vois pas quelle instruction gère cela ..
    je vois l'algo mais le code ..... pb ...


    => je souhaite faire la sélection avec la souris
    et non pas saisir la plage dans le vba... ni utiliser de nommage de plage dans la feuille..

    ensuite je souhaite faire le transfert dans un tableau ... qui lui est est en vba..

    ensuite par exemple ...

    - faire la somme des valeurs des ce tableau
    - retransférer ce tableau à un autre endroit .... (Tableau vers nouvel endroit)

    ce contexte ne me sert que pour travailler mon vba ... et pour essayer de comprendre ces notions de sélection ....

    un exemple de transfert d'une sélection (ici 4 lignes 2 colonnes) de données d'une feuille vers un tableau
    puis un tableau vers un autre endroit de la feuille...

    c'est le procédé/instruction de sélection que j'ai du mal a appréhender.

    parfois on utilise ActiveCell.CurrentRegion.Select parfois range("ZoneNommée").Select parfois autre chose ...
    ces notions ... j'avoue que j'ai beaucoup de mal....

    connaitrais-tu un site qui répertorie tous les objets VBA d'Excel ?

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    connaitrais tu un site qui répertorie tous les objets VBA d'Excel ?
    Bien sûr, il suffit de faire (le bonhomme fait une tête blasé mais ça n'est pas l'esprit de ma réponse) sur un des mots clé et tu seras redirigé vers la base de connaissance de Microsoft. C'est généralement plutôt clair... mais pas toujours.

    As-tu testé le code que j'ai mis?
    Selection représente la sélection active, sur la feuille active, du classeur actif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tabOrder = Selection.value
    Crée un tableau qui contient les valeurs. Tu peux ensuite faire des boucles pour te déplacer dans ces valeurs.

    Tu peux utiliser les espions VBA pour regarder comment est structuré le tableau.

    parfois on utilise "ActiveCell.CurrentRegion.Select" parfois "range("ZoneNommée").Select" parfois autre chose ...
    Il vaut mieux éviter les .Select, on peut travailler sur une plage, un onglet, un classeur sans pour autant que celui-ci soit actif... Sauf si on veut récupérer la sélection faite par l'utilisateur.

    Si tu veux que l'utilisateur choisisse une plage au cours de la macro, il me semble avoir lu il y a pas longtemps un code qui utilisait Inputbox avec un paramètre particulier... C'est ici...

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Par défaut
    Re,

    Ojets Excels vba...
    Bien sûr, il suffit de faire (le bonhomme fait une tête blasé mais ça n'est pas l'esprit de ma réponse) sur un des mots clé et tu seras redirigé vers la base de connaissance de Microsoft. C'est généralement plutôt clair... mais pas toujours.
    F1 je connais ...



    Mais pour ma part, je ne trouve pas que c'est très clair ......
    c'est pour cela que je demandais ...

    Pour répondre à ta question "As-tu testé le code que j'ai mis?

    testé ...

    avec 1 cellule sélectionnée ok..



    avec plusieurs cela ne passe plus ..


    Pour 1 cellule sélectionnée cela passe mais si on sélectionne plusieurs cellules cela ne passe plus ..
    c'est logique puisque "tabOrder = Selection.value" ne peut prendre qu'une seule valeur ...


    comment faire pour passer en revue en vba toutes les cellules faites avec une sélection faite par l'utilisateur ...

    quelle instruction permet de récupérer une sélection faite par un utilisateur ? (1 ou plusieurs cellules)
    et comment exploiter ce qui a été récupéré afin de le transférer dans un tableau ...
    Merci de ton aide

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Je pense que la ligne qui fait planté le code n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabOrder = Selection.Value
    Mais le MsgBox qui est en dessous. Tu ne peux pas lui passer un tableau de variant en tant que chaine de caractère.
    Ça fonctionne avec 1 cellule parce que la variant contient une valeur unique (et pas un tableau), donc VBA sait faire un transtypage vers une chaine.

    La seule limite de cette écriture réside dans le fait que la sélection doit être d'une seule plage. C'est la notion d'Areas, un Area étant une plage contigüe(dans le sens d'une sélection faite en une fois).
    Si tu utilises un espion sur un objet range, tu verras la collection Areas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim MaSelection as range
     
    Set MaSelection = Selection
    une fois la seconde ligne exécutée en pas à pas (F8), tu places un espion sur la variable MaSelection. Tu verras la section Aeras et le nombre d'Aeras présents dans la sélection. Si plus de 1, le code que je t'ai donné ne fonctionne plus.

    Si tu veux traiter le contenu des cellule 1 par 1, tu peux utiliser une boucle For ou For each ou Do, While...
    Tu trouveras plein d'exemple en cherchant ces mots clé.



    PS: Je ne cherchais pas à t’offenser avec la touche F1, c'est juste une base et j'en parle parce que je ne connais pas ton niveau, quel qu'il soit.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Je reprends
    Le code que je t’ai donné fonctionne pour une plage de type A1:c48 puisqu’elle est continue.
    Il ne fonctionne pas pour une plage de type A1:C2;E2:F5 car il y a deux plage en une.

    Pour récupérer une sélection, c’est le mot clé selection, il pointe vers la plage sélectionnée de la feuille active.

    Pour exécuter un code au changement de sélection, regarde dans les événements liés au worksheet dans vba, il y a selectionChange ( ou approchant, je ne peux pas regardé je suis sur un tel portable)

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Par défaut
    Re ..
    Testé avec avec le mot clé Selection, Cela fonctionne.. SUPER .....



    Par contre encore une chose ...

    "Selection" est considéré comme un range .. puisque cela peut être une cellule ou une Zone ...

    Pourtant..

    ** Dans Mon Code, lorsque j'utilise "Plage" (qui est aussi un Range) et que je mets un point ..., j'accède à ses propriétés



    ** Pour un Range "cité" aussi ...



    ** Mais quand je fais pareil pour Selection on ne me propose rien ??? or c'est pourtant un Range aussi ?



    Y a t-il une raison ?
    Parce que l'on a l'impression que ce mot Selection "n'appartient pas au Code VBA"

    -
    enfin tu dis :
    Pour exécuter un code au changement de sélection, regarde dans les événements liés au worksheet dans vba, il y a selectionChange ( ou approchant, je ne peux pas regardé je suis sur un tel portable)
    comment fais -on cela ?
    surement F1 mais comment ensuite ?

    -------------------------------------------------------------------------

    Petite chose aussi que je pige pas ...
    avec ce 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
    Dim Ln As Integer, Col As Integer
    Dim Plage As Range
    Set Plage = Selection
        
      'On remplit la Zone A12:D14 de données pour faire les Tests ...
       [A12] = "A": [B12] = "B": [C12] = "C": [D12] = "D"
       [A13] = "E": [B13] = "F": [C13] = "G": [D13] = "H"
       [A14] = "I": [B14] = "J": [C14] = "K": [D14] = "L"
      'Zone constitué de 3 lignes et de 4 colonnes.
      
      Range("A12:D14").Select                  '=> dans VBA je sélectionne A12:D14 de la Feuille 1
     'je n'ai pas utilisé le mot "Selection" mais c'est une sélection quand même non ? la preuve on voit sur la feuille que la sélection se fait bien .
    
      Plage = Selection  ' idem On affecte la sélection à "Plage"
    ' si je passe par 2 etapes  cad : Selection = Range("A12:D14").Select puis Plage = Selection le pb reste le même...
    'Ln et Col ne prennent pas les bonnes valeurs ??
    
    Ln = Plage.Rows.Count      
    Col = Plage.Columns.Count
    Ln et Col ne prennent pas les bonnes valeurs ???
    aurais tu une idée ?

    Trouvé ....
    suite à la Ligne 13 : Range("A12: D14").Select il Faut mettre Ligne 14 Set Plage = Selection et non pas Plage = Selection et alors cela fonctionne..

    Merci de ton aide pour le reste.

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    Alors pour le mot clé selection, si tu mets un espion dessus, tu vas voir que dans la colonne Type, il y a Object\Range. En fait au niveau VBA, selection est déclaré As Object, et ceci pour la bonne et simple raison que selection peut contenir un Range mais aussi un Shape (graphique, objet divers, image qui sont placé dans la feuille excel). Il convient donc d'être très prudent lors de l'utilisation de selection, qui, s'il est affecté à un range alors qu'il pointe un shape provoque un erreur d'exécution.

    Pour le _SelectionChange, c'est ici
    Nom : 2022-01-18_190741.png
Affichages : 233
Taille : 46,1 Ko

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 57
    Par défaut
    Re,

    Merci des infos.

    Pour Terminer ..

    Pour exécuter un code au changement de sélection, regarde dans les événements liés au worksheet dans vba, il y a selectionChange
    c'est avec F1 ou par le Net ?
    je demande cela car concernant les événements .. je ne vois pas ou aller voir.

    Cordialement

  11. #11
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut

    J'ai mis un screenshot pour t'indiquer où aller.
    Tu doubles cllick sur la feuille dont tu veux intercepter le changement de cellule dans la fenêtre de gauche. ça va t'afficher le code de la feuille.
    Ensuite dans le fenêtre de saisie du code, dans la 1ère liste déroulante en haut, tu choisis "Worksheet", dans la seconde liste tu auras tous les événements liés au worksheet... dont SelectionChange.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. transfert des données textbox vers tableau excel
    Par ramsapat dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/07/2018, 15h57
  2. [AC-2007] Zone de liste modifiable, sélection avec souris
    Par Liz99 dans le forum IHM
    Réponses: 3
    Dernier message: 02/02/2011, 12h50
  3. [Flex4] sélection avec souris
    Par phoenixatareva dans le forum Flex
    Réponses: 3
    Dernier message: 22/09/2010, 09h51
  4. Réponses: 1
    Dernier message: 20/04/2009, 15h18
  5. Problème avec StingTokenizer vers tableau de String
    Par Invité dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 06/10/2006, 11h22

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