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 Sub

Mytå

Un gros merci , c'est une astuce simple à laquelle je n'avais pas pensé...

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).Select

C'est mon Range(Plage).Select qui plante parce que Plage contient plus de 255 caractères.

Merci!

Bioman 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).Select

C'est mon Range(Plage).Select qui plante parce que Plage contient plus de 255 caractères.

Merci!

Salut

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"

Bioman 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"

Salut

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).Select

A+

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 Sub

Mytå

Rechercher des sujets similaires à "exporter boucle"