VBA Excel - sélection plages
Résolu
sygmajf99
Messages postés
18
Statut
Membre
-
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 !!!!!!!!!!!!
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
-
Salut le forum
Regarde si cela pourrait te faire avancerFunction 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å -
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 -
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.