trop d'arguments VBA

J

JC de Lorient

Guest
Bonjour le forum,

j'ai un souci avec la macro suivante
je pense d'après le message d'erreur que g dépassé la capacité d'arguments (plus de 30)

existe il une solution ou une autre méthode pour arriver a mes fins?

Merci a vous

JC

Sub MultiCellCopy()
Dim PlageSource As Range, Cell As Range
Dim LastLine As Long
Dim Colonne As Byte


With Sheets("Fiche_paye")
Set PlageSource = Application.Union(.Range("i9"), .Range("e21"), .Range("f21"), .Range("e22"), .Range("e23"), .Range("g25"), .Range("g26"), .Range("g29"), .Range("f31"), .Range("f33"), .Range("f35").Range("f43"), .Range("f45"), .Range("f49"), .Range("f51"), .Range("f53"), .Range("f55"), .Range("f57"), .Range("j31"), .Range("j33"), .Range("j35"), .Range("j37"), .Range("j39"), .Range("j41"), .Range("j43"), .Range("j45"), .Range("j47"), .Range("j49"), .Range("j51"), .Range("j53"), .Range("j55"), .Range("k59"), .Range("i61"), .Range("k61"), .Range("g65"), .Range("f67"), .Range("f69"), .Range("e71"), .Range("f71"), .Range("e75"), .Range("f75"), .Range("i62"), .Range("i63"), .Range("i64"), .Range("k62"), .Range("k63"), .Range("k64"), .Range("e76"), .Range("f76"), .Range("i76"), .Range("k76"))



End With

LastLine = Sheets("Récap").Range("A65536").End(xlUp).Row + 1
Colonne = 1


For Each Cell In PlageSource
With Sheets("Récap")
.Cells(LastLine, Colonne) = Cell
End With
Colonne = Colonne + 1
Next

End Sub
 
M

Minick

Guest
Salut,

Essay avec une plage nomée, tu ne devrais plus avoir de probleme

Apres selections de tes cellules à historiser,
Insertion/nom/definir -> tu nomes ta selection et dans ton code

For Each Cell In Sheets("fiche_paye").names('Ta plage nomée')
....


@+ Minick
 
J

JC de Lorient

Guest
Salut Mimick re le forum

Je te remercie
g nommée ma liste de cellule

par contre g tjrs une erreur "1004" je te joint mon code afin de voir ou peut etre l'erreur


merci bcp
Sub MultiCellCopy()
Dim PlageSource As Range, Cell As Range
Dim LastLine As Long
Dim Colonne As Byte


LastLine = Sheets("Récap").Range("A65536").End(xlUp).Row + 1
Colonne = 1

For Each Cell In Sheets("fiche_paye").Names("transfert")
With Sheets("Récap")
.Cells(LastLine, Colonne) = Cell
End With
Colonne = Colonne + 1
Next

End Sub
 
@

@+Thierry

Guest
Bonjour JC, Minick, le Forum

Tiens je vois que ce code a fait un bout de chemin depuis ce Lien supprimé

Je pense que tu n'as pas fait attention à la correction de Minick...

Sub MultiCellCopy()
Dim PlageSource As Range, Cell As Range
Dim LastLine As Long
Dim Colonne As Byte


LastLine = Sheets("Récap").Range("A65536").End(xlUp).Row + 1
Colonne = 1

   For Each Cell In Range("transfert")
      With Sheets("Récap")
         .Cells (LastLine, Colonne) = Cell
      End With

      Colonne = Colonne + 1
   Next

End Sub

On notera que lors de l'usage d'une référence Range à une plage nommée, il n'est pas nécessaire d'indiquer la feuille, le plage nommée étant unique.

Bon Week End
@+Thierry
 
J

JC de Lorient

Guest
merci a vous !

g toujours un souci !!

mon problème vient de ma liste nommée

1) si je mets dans ma liste les références de cellules sous la forme : =Fiche_paye!$E$21;Fiche_paye!$E$25;Fiche_paye!$E$27 etc etc je ne peux pas mettre mes 51 cellulles (qui ne sont pas adjacentes)

2) si je mets dans ma liste les références de cellules sous la forme :
=E21+E25+E27 etc etc là c mon code VBA qui ne comprends pas

Y a t il une solution a ce problème?

merci pour la solution si elle existe !

JC
 
@

@+Thierry

Guest
Bonsoir Jean Marie, Minick, JC de Lorient, le Forum

Ah je ne savais pas que l'on avait des limites dans les plages nommées...

Alors qu'à celà ne tienne voici une solution 100% VBA, qui passe par une Array qui n'a pas de limite, pour construire un Tableau Séquentiel "DataSource", que je délimite donc à 51 Data de type String... et que j'envoie ensuite en feuille "récap", tu noteras que cette array dynamique est en base 0 (d'où le DataSource(y - 1) pour le décalage)

Ne sachant pas le contenu de tes 51 cellules, si tu as des problèmes pour récupérer des valeurs de type numérique ou date alors change la déclaration de Variable de String à Variant (plus gourmant en ressource)

Sub MultiCellCopy()
Dim DataSource(50) As String
Dim LastLine As Long
Dim Item As Variant
Dim i As Byte, y As Byte

LastLine = Sheets("Récap").Range("A65536").End(xlUp).Row + 1


   For Each Item In Array("i9", "e21", "f21", "e22", "e23", "g25", "g26", "g29", "f31", "f33", _
                           "f35", "f43", "f45", "f49", "f51", "f53", "f55", "f57", "j31", "j33", _
                           "j35", "j37", "j39", "j41", "j43", "j45", "j47", "j49", "j51", "j53", _
                           "j55", "k59", "i61", "k61", "g65", "f67", "f69", "e71", "f71", "e75", _
                           "f75", "i62", "i63", "i64", "k62", "k63", "k64", "e76", "f76", "i76", "k76")

     DataSource(i) = Sheets("fiche_paye").Range(Item)
     i = i + 1
   Next

   For y = 1 To 51
       With Sheets("Récap")
           .Cells(LastLine, y) = DataSource(y - 1)
       End With
   Next

End Sub


Je pense que ce coup-ci ce devrait faire l'affaire... Et c'est un bon exemple d'usage d'Array fixe pour construction de tableaux...

Bonne Soirée à tus et toutes
@+Thierry
 

Statistiques des forums

Discussions
312 322
Messages
2 087 284
Membres
103 507
dernier inscrit
tapis23