VBA Excel - sélection plages

Résolu
Bonjour,

J'aimerais sélectionner (pour la copie), 2 plages de cellules, où chaque plage n'est pas nécessairement collée sur l'autre. Je voudrais joindre les 2 "range" suivants. Quel est la meilleure méthode (j'ai essayé par un loop, mais c'est trop long).

Range(Cells(4, 1), Cells(ligne, 3)).Select
Range(Cells(4, a), Cells(ligne, b)).Select


Voici mon code en entier au cas où..

Sub Impression_Multi()
Dim a As Integer
Dim b As Integer

choix1 = Sheets("Impression").Cells(1, 1).Value
choix2 = Sheets("Impression").Cells(2, 1).Value
ligne = Sheets("Rép-Questions COM").Range("a4").End(xlDown).Row

a = choix1 + 4
b = choix2 + 4

Range(Cells(4, 1), Cells(ligne, 3)).Select
Range(Cells(4, a), Cells(ligne, b)).Select

End Sub


MERCI !!!!!!!!!!!!

3 réponses

  1. Merci.

    Myta : Que doit-on mettre à la place de Cellules1(X) dans ton code ?

    AGi67.fr : Merci, ca fonctionne super bien. J'ai compris le code après quelques recherches.
    0
    1. Bonjour sygmajf99

      Je peux te proposer :

      Sub Impression_Multi()
      Dim a As Integer
      Dim b As Integer
      Dim s as String
      Dim col1, col2 as String

      choix1 = Sheets("Impression").Cells(1, 1).Value
      choix2 = Sheets("Impression").Cells(2, 1).Value
      ligne = Sheets("Rép-Questions COM").Range("a4").End(xlDown).Row
      a = choix1 + 4
      b = choix2 + 4

      s = Cells(a, a).Address
      pos1 = InStr(1, s, "$", 1)
      pos2 = InStr(pos1 + 1, s, "$", 1)
      col1 = Mid(s, pos1 + 1, pos2 - (pos1 + 1))
      s = Cells(b, b).Address
      pos1 = InStr(1, s, "$", 1)
      pos2 = InStr(pos1 + 1, s, "$", 1)
      col2 = Mid(s, pos1 + 1, pos2 - (pos1 + 1))

      Range("A" & 4 & ":" & "C" & ligne & "," & col1 & 4 & ":" & col2 & ligne).Select
      End Sub

      Cdlmt

      Patrice
      0
      1. Contributeur
        Salut le forum

        Regarde si cela pourrait te faire avancer
        Function CreationTableau(ParamArray Cellules1()) As Variant
            'Adapté de:
            'http://support.microsoft.com/?kbid=213403
            '
            Dim VarTab() As Variant
            Dim Temp As Variant
            Dim i As Integer
            Dim w As Integer, X As Integer, y As Integer, z As Integer
            
            i = 1
            
            'Boucle sur les éléments du tableau de paramètres.
            For X = 0 To UBound(Cellules1)
                If TypeName(Cellules1(X)) = "Range" Then
                    Set Temp = Cellules1(X)
                    'Vérifie si le paramètre passé à la fonction est une cellule simple
                    'ou une plage.
                    If IsArray(Temp) Then
                        'Intègre chaque cellule de la plage dansle tableau.
                        For y = 1 To UBound(Temp.Value)
                            For z = 1 To UBound(Temp.Value, 2)
                                'Permet de filtrer les cellules vides.
                                'If Not IsEmpty(Temp(y, z).Value) Then
                                    ReDim Preserve VarTab(1 To i)
                                    VarTab(i) = Temp(y, z).Value
                                    i = i + 1
                                'End If
                            Next z
                        Next y
                        Else
                            'Permet de filtrer les cellules vides.
                            'If Not IsEmpty(Temp) Then
                                'Intègre la cellule dans le tableau.
                                ReDim Preserve VarTab(1 To i)
                                VarTab(i) = Temp
                                i = i + 1
                            'End If
                    End If
                Else
                    ReDim Preserve VarTab(1 To i)
                    VarTab(i) = Cellules1(X)
                    i = i + 1
                End If
            Next X
            
            CreationTableau = VarTab
        End Function
        
        Sub Test()
            Dim Tb As Variant, xTab As Variant
            
            Tb = CreationTableau(Range("A1:A10"), Range("C1:C10"), Range("E1"), 80)
            
            '--- Vérifie si le tableau est vide ---
            On Error Resume Next
            'xTab va prendre la valeur Empty si le tableau est vide.
            xTab = UBound(Tb)
            On Error GoTo 0
            
            'Renvoie le nombre d'éléments du tableau
            If Not IsEmpty(xTab) Then MsgBox UBound(Tb)
        End Sub
        

        Référence : Silkyroad Developpez.Com

        Mytå
        0