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 !!!!!!!!!!!!
A voir également:

3 réponses

Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   954
 
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
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
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