Macro excel: Selections multiples

Résolu
Bonjour,

je suis debutant sur les macros de excel et j'aurais besoin d'aide.

Ayant chercher un peu partout mais n'ayant pas trouver une solution, je voudrais savoir si il est possible de faire une selection de plusieurs cellules, selection avec controle ou maj, et de recuperer les lignes de ces cellules actives.

Je sais que pour une seule cellule active nous pouvons faire:
r = Activecell.row

J'ai aussi essayé avec une boucle mais le problème c'est que je n'ai que la première ligne de selectionné et je ne sais pas comment nous pouvons selectionner les autres cellules selectionné...

Merci d'avoir lu mon problème,

Cordialement

5 réponses

  1. Bonjour,

    Pour compter le nombre de cellule puis les parcourrir les unes apres les autres J'ai vu cette option :

    imax = Selection.Areas.Count
    For i = 1 To imax
    Selection.Areas(i).Value = imax
    Next

    a modifier bien sur

    a+

    jéjé
    1. Modérateur
      Bonjour,
      Je te livre "brut de décoffrage" trois codes trouvés sur : https://apprendreexcel.com/
      Teste les et si tu as besoin de conseil ou d'adaptation, n'hésite pas à poser d'autres questions.

      Sub SelectionPlageAvecSouris()
            Dim Plage As Range
            Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
            MsgBox ("La plage que vous avez séléctionnez est : " & Plage.Address)
      End Sub
      
      Sub SelectionDiscontinue()
            Dim Z1, Z2, MaPlageMultiZone As Range
            Worksheets("Feuil1").Select
            Range("A1").Select
            ActiveCell.End(xlDown).Select
            Zone1 = ActiveCell.Address
            Selection.Offset(0, 2).Select
            Zone2 = ActiveCell.Address
            Set Z1 = Range("A1", Zone1)
            Set Z2 = Range("C1", Zone2)
            Set MaPlageMultiZone = Union(Z1, Z2)
            ZoneSelection = MaPlageMultiZone.Select
      End Sub
      
      Sub SelectionDeuxColonnesNonContigues()
      ' Soit les colonnes A (1) et D (4) à sélectionner
            NCol1 = 1
            NCol2 = 4
            Union(Cells(1, NCol1), Cells(1, NCol2)).EntireColumn.Select
      End Sub
      1. Sauf erreur, ces macros ne peuvent être utilisé seulement si nous connaissons soit les lignes ou les colonnes selectionnées.

        Car mon problème c'est que je suis sur un tableau on selectionne une ou plusieurs lignes une autre feuille s'ouvre et recopie les informations qui sont sur la ligne selectionnée.

        Mais ceci est deja fait, si vous voulez que je vous link ma macro demandé le moi.

        Mais le problème c'est que je n'arrive pas à avoir les autres numeros de lignes selectionnées.

        j'ai deja reflechit a çà avec cette acro:

        Dim a_imp()

        For e = 1 to ActiveWindows.rangeSelection.count

        For h=1 To 300

        If activecell.row = h then
        l = l + 1
        ReDim Preserve a_imp(l)
        a_imp(l) = h
        'Récupèration du numero de ligne
        Goto 5
        End If

        Next

        5

        'ActiveCell suivant

        Next

        Si vous avez d'autre idées je suis preneur

        Merci pour votre reponse
        1. Avec mon code, tu peux obtenir tous les num de lignes de toutes les cellules selectionnées :

          imax = Selection.Areas.Count
          For i = 1 To imax
          r = Selection.Areas(i).row
          Next
        2. Ok je vais essayer je vous redis si ca marche.
        3. Ca marche super bien.

          Je vous remercis pour votre aide ça m'a été très utile. :)

          Bonne journée

          Et encore merci
      2. Modérateur
        Sinon en adaptant un peu (beaucoup) le premier code que j'ai donné on obtient :
        Sub SelectionPlageAvecSouris() 
        Dim MonTableau() As String 
        Dim Plage As Range 
        Dim j As Integer 
        Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8) 
        MonTableau = Split(Plage.Address, ",") 
            For j = 0 To UBound(MonTableau) 
                MsgBox MonTableau(j) 
            Next j 
        End Sub

        Suffit de sélectionner x cellules avec la souris et la touche Ctrl (continue ou discontinue la plage, peu importe...) quand la macro le demande...
        Cordialement,
        -- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
        1. Bonjour,

          je sais que le sujet est vieux mais vous pourrez surement m'aider.
          J'ai mis sur place une macro permettant de sélectionné la case de la colonne et de copier la cellule en B en étant sur n'importe quelle cellule de la ligne qui m'intéresse.

          Cependant j'aimerai pouvoir sélectionné des cases de plusieurs lignes et lancer ma macro qui irait ma sélectionner plusieurs case dans ma colonne B. Je joins un bout du code que j'ai créé.

          Dim select1 As Object
          Dim str As String
          Dim dir As String
          Workbooks.Open Filename:="X:\Departements\Sys-Plat DSMP\Apprenti\Lucas\Projet Processus\RLT_LOG\BL.xls"
          Workbooks("Fichier RLT_Log.xls").Activate
          Range("B" & ActiveCell.Row).Select 'Sélectionner la cellule à lintersection de la colonne B et de la ligne active
          selection.Copy
          Set select1 = selection
          Workbooks("BL.xls").Activate
          Range("A11:D12").Select
          ActiveSheet.Paste

          Workbooks("Fichier RLT_Log.xls").Activate
          select1.Offset(0, -1).Select
          ....

          Merci de votre réponse, enfin j'espère que vous me répondrez, vous ou quelqu'un...
          1. Modérateur
            Salut,
            Regarde cette macro de : https://apprendreexcel.com/ que j'ai légèrement modifié pour toi.
            Split(MonTableau(j), "$")(2) te donne ici le numéro des lignes que tu as sélectionné...

            Sub SelectionPlageAvecSourisetrestitution()
            Dim MonTableau() As String
            Dim Plage As Range
            Dim j As Integer
            Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8)
            MonTableau = Split(Plage.Address, ",")
                For j = 0 To UBound(MonTableau)
                    MsgBox Split(MonTableau(j), "$")(2)
                Next j
            End Sub