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. 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
    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. 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