Exporter cellules par une boucle
Bonjour à tous,
Dans une boucle je scan ligne par ligne les valeurs d'une colonne et tant que je ne rencontre pas de valeur vide, je veux copier certaines cellules de la ligne en question pour ensuite les coller dans un nouveau classeur. Est-ce possible? Y a-t-il un moyen d'ajouter des cellules à une sélection déjà active ou je devrai faire mes copier/coller en plusieurs fois?
Exemple:
x = 18
While Range("A" & x) <> ""
Range("D" & x & ",F" & x).Select ' à chaque boucle, je veux ajouter à la sélection
x = x + 1
Wend
Merci!
Bonjour Bioman,
Essaie avec ceci:
'En supposant que ta feuille de données soit la feuille 1 et que tu copies sur la feuille 2
'Cells(ligne, colonne)
x = 4
While Worksheets("Feuil1").Cells(x, 2).Value <> ""
Worksheets("Feuil1").Cells(x, 4).Copy Destination:=Worksheets("Feuil2").Cells(x, 4)
Worksheets("Feuil1").Cells(x, 6).Copy Destination:=Worksheets("Feuil2").Cells(x, 6)
x = x + 1
Wend
Salut le forum
Tu peux essayer avec ce code
Sub PlageSelect()
Dim Plage As String
Dim x As Byte
x = 18: Plage = ""
While Range("A" & x) <> ""
If Plage = "" Then
Plage = Cells(x, "D").Address + "," + Cells(x, "F").Address
Else
Plage = Plage + "," + Cells(x, "D").Address + "," + Cells(x, "F").Address
End If
x = x + 1
Wend
Range(Plage).Select
End SubMytå
Un gros merci
Rebonjour,
La solution mentionnée par Myta fonctionne bien, mais si ma variable Plage contient plus de 255 caractères, la macro plante quand je fais:
Range(Plage).Select
Est-ce qu'il y a un moyen de contourner cette limitation?
Merci!
Salut le forum
Bioman ajuste ta variable
Dim x As Byte
Byte de 0 à 255
Integer de -32 768 à 32 767
Long de -2 147 483 648 à 2 147 483 647
Mytå
Et comment on fait quand notre variable est un string?
Dim Plage As String
Dim x As Byte
x = 18
Plage = ""
While Range("AY" & x) <> "" 'On boucle dans les codes employés jusqu'à ce qu'une cellule soit vide.
If Plage = "" Then
Plage = Cells(x, "AY").Address + "," + Cells(x, "P").Address + "," + Cells(x, "R").Address + "," + Cells(x, "U").Address + "," + Cells(x, "V").Address
Else
Plage = Plage + "," + Cells(x, "AY").Address + "," + Cells(x, "P").Address + "," + Cells(x, "R").Address + "," + Cells(x, "U").Address + "," + Cells(x, "V").Address
End If
x = x + 1
Wend
Range(Plage).SelectC'est mon Range(Plage).Select qui plante parce que Plage contient plus de 255 caractères.
Merci!
SalutBioman a écrit :Et comment on fait quand notre variable est un string?
Dim Plage As String Dim x As Byte x = 18 Plage = "" While Range("AY" & x) <> "" 'On boucle dans les codes employés jusqu'à ce qu'une cellule soit vide. If Plage = "" Then Plage = Cells(x, "AY").Address + "," + Cells(x, "P").Address + "," + Cells(x, "R").Address + "," + Cells(x, "U").Address + "," + Cells(x, "V").Address Else Plage = Plage + "," + Cells(x, "AY").Address + "," + Cells(x, "P").Address + "," + Cells(x, "R").Address + "," + Cells(x, "U").Address + "," + Cells(x, "V").Address End If x = x + 1 Wend Range(Plage).SelectC'est mon Range(Plage).Select qui plante parce que Plage contient plus de 255 caractères.
Merci!
regarde dans ta valeur de plage si une des données n'est pas en erreur, ou vide
soit par msgbox, soit en la copiant dans une cellule
A+
J'avais déjà fait le test. J'ai fait un MsgBox de Plage et il ne contient rien de bizarre. J'ai aussi fait un MsgBox de Len(Plage) avec différents tests. Il a marché tant que Len(Plage) était < 255. Aussitôt que j'ai dépassé, ça m'a fait une erreur:
"Method 'Range' of object '_Global' failed"
J'avais déjà fait le test. J'ai fait un MsgBox de Plage et il ne contient rien de bizarre. J'ai aussi fait un MsgBox de Len(Plage) avec différents tests. Il a marché tant que Len(Plage) était < 255. Aussitôt que j'ai dépassé, ça m'a fait une erreur:
"Method 'Range' of object '_Global' failed"
SalutBioman a écrit :J'avais déjà fait le test. J'ai fait un MsgBox de Plage et il ne contient rien de bizarre. J'ai aussi fait un MsgBox de Len(Plage) avec différents tests. Il a marché tant que Len(Plage) était < 255. Aussitôt que j'ai dépassé, ça m'a fait une erreur:
"Method 'Range' of object '_Global' failed"
essaie en le déclarant en Variant au lieu de string, ou plus simple :
Dim Plage As Range
Dim X As Long
X = 18
While Range("AY" & X) <> "" 'On boucle dans les codes employés jusqu'à ce qu'une cellule soit vide.
Set Plage = Union(Plage, Cells(X, "AY"), Cells(X, "P"), _
Cells(X, "R"), Cells(X, "U"), Cells(X, "V"))
X = X + 1
Wend
Range(Plage).SelectA+
Merci, ca semble bien fonctionner sauf un dernier point. Quand je fais dans mon while
Set Plage = Union(Plage, Cells(X, "AY"), Cells(X, "P"), _
Cells(X, "R"), Cells(X, "U"), Cells(X, "V")) Il me fait une erreur lors de ma 1re boucle puisque j'utilise Plage sans l'avoir initialisé. Est-ce qu'il y a un moyen d'initialiser un objet à vide? Nothing libère l'object, donc ca ne marche pas plus...
Merci!
Salut le forum
A tester sur ton application
Sub PlageSelect()
Dim Plage As Range
Dim x As Long
x = 18
While Range("A" & x) <> ""
If Plage Is Nothing Then
Set Plage = Union(Cells(x, "B"), Cells(x, "C"), _
Cells(x, "E"), Cells(x, "F"), Cells(x, "H"))
Else
Set Plage = Union(Plage, Cells(x, "B"), Cells(x, "C"), _
Cells(x, "E"), Cells(x, "F"), Cells(x, "H"))
End If
x = x + 1
Wend
If Plage Is Nothing Then Exit Sub
MsgBox Plage.Address
Plage.Select
End SubMytå