VBA Excel - sélection plages

Résolu
sygmajf99 Messages postés 18 Statut Membre -  
sygmajf99 Messages postés 18 Statut Membre -
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. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   957
     
    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
  2. Utilisateur anonyme
     
    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
  3. sygmajf99 Messages postés 18 Statut Membre
     
    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