VBA Excel - sélection plages

Résolu/Fermé
sygmajf99 Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 6 juillet 2012 - 11 janv. 2011 à 04:04
sygmajf99 Messages postés 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 6 juillet 2012 - 11 janv. 2011 à 14:19
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 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
11 janv. 2011 à 04:19
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
11 janv. 2011 à 08:30
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 14 Date d'inscription lundi 10 janvier 2011 Statut Membre Dernière intervention 6 juillet 2012
11 janv. 2011 à 14:19
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