Je ne trouve pas l'erreur dans le code

Hugues

XLDnaute Impliqué
Bonjour Le Forum,

J'ai une erreur dans le code que je ne trouve pas. Je souhaite copier certaines cellules (a,c,d,i,l,y)par ligne de la feuille 'facturation_usagers' si la valeur de la colonne z = 'non' et coller ces valeurs dans la feuille 'journées en attente' à partir de la ligne 7.

Merci par avance pour l'aide.

Hugues

Sub en_attente()

'Dim lign As Integer, a As Integer, b As Integer, lign As Integer

a = 5
b = 7

ActiveWorkbook.Worksheets('facturation_usagers').Activate
lign = Range('a65536').End(xlUp).Row '+1

For a = 5 To lign
If Sheets('facturation_usagers').Range('z' & a) = 'non' Then

Range('a' & a, 'C' & a, 'D' & a, 'I' & a, 'L' & a, 'Y' & a).Select
Selection.copy
Sheets('journées_en_attente').Select
Range('G' & b).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
b = b + 1

End If
Next


End Sub
 

Hugues

XLDnaute Impliqué
Bonsoir Jacques

C'est une erreur de compilation : nombre d'arguments incorrect ou affectation de propriété incorrecte.
La ligne qui pose problème : Range('a' & a, 'C' & a, 'D' & a, 'I' & a, 'L' & a, 'Y' & a).Select

Merci pour l'aide
 

Jacques87

XLDnaute Accro
ajoute WorkSheet('facturation_usagers'). devant Range('a' & a, 'C' & a, 'D' & a, 'I' & a, 'L' & a, 'Y' & a).Select, ça ne mange pas de pain

Quand on travaille sur plusieurs feuilles, personnellemnt je préfère à chaque fois rappeler la feuille concernée quand je sélectionne des cellules
Certes parfois ça m'alourdi mon code, mais ...

2) on m'a toujours dit qu'activer une feuille n'est pas la sélectionner

essaie donc
ActiveWorkbook.Worksheets('facturation_usagers').Select
au lieu de
ActiveWorkbook.Worksheets('facturation_usagers').Activate

on verra si les conseils donnés s'avèrent être exacts

à ta disposition et bonne soirée
 

Jacques87

XLDnaute Accro
Bonsoir Abel

je me pose une question suite à ton intervention qui bien sur est super correcte (ça va de soi)

Range('A5,B7,C8').Select sélectionnera uniquement que les 3 cellules citées
ne pourrait-on pas adapté cei au cas de Hugues, car ce qui me gène ce sont les paramètres

Range (''A' & a, 'B & b, 'C' & c') crée une erreur, n'est ce pas

Bonne soirée Abel
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Hugues, Abel, Jacques, bonsoir le forum,

Je te propose ce code modifié issue de ta macro :


Sub en_attente()

Dim lign As Integer, a As Integer, b As Integer, dest As Range

b = 7

ActiveWorkbook.Worksheets('facturation_usagers').Activate
lign = Range('a65536').End(xlUp).Row

For a = 5 To lign

If Sheets('facturation_usagers').Range('z' & a) = 'non' Then
Set dest = Sheets('journées_en_attente').Range('G' & b)
Sheets('facturation_usagers').Range('a' & a & ',C' & a & ',D' & a & ',I' & a & ',L' & a & ',Y' & a).Copy
dest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
b = b + 1
End If

Next
Application.CutCopyMode = False
End Sub
 

Abel

XLDnaute Accro
Bonjour le fil, le forum,

Jacques, dans le bout de code que tu as mis en ligne, c'est une question de guillemets :

Range (''A' & a, 'B & b, 'C' & c')

Range ('A' & a & ', B' & b & ', C' & c).

Avec a, b et c renseignés par ailleurs.

Regarde l'exemple de Robert.

En fait, entre les parenthèses du Range (), ce doit être une chaine de caractères. Donc les éléments doivent être concaténés.

J'aurais pu le faire comme ça. J'avoue ne pas y avoir pensé sur le coup.

Abel.
 

Jacques87

XLDnaute Accro
Bonjour Abel

J'entends bien ce que tu me dis, mais il y a un truc que je ne comprends toujours pas à cause des guillemets

par exemple si tu veux sélectionner A1 et B5, tu écriras :
Range('A1,B5').Select
et non pas
Range('A1','B5').Select qui si je ne me trompe équivaut à Range('A1:B5').Select

quand il y a plus de 2 cellules, exemple Range('A1','B2','C4').Select crée une erreur, il faut écrire Range('A1,B2,C4').Select

quand il y a des paramètres, il faut faire attention au jeu des guillemets, donc ce que Robert ou toi même écrivez :
Range ('A' & a & ', B' & b & ', C' & c).

équivaut pour a=2, b=3 et c=4 par exemple à :
Range('A2','B3','C4') donc une errreur doit se créer
C'est pourquoi, tout en sachant que mon code est faux,je cherchais à écrire quelque chose du type Range('A1,B2,C4') avec le double jeu de guillemets.
Enfin, chose que j'ai du mal à maîtriser, je sais que dans ce cas on doit utiliser des guillemets et des apostrophes combinées.

Ce n'est pas que je sois pinailleur, mais cette question me turlupine depuis un certain temps, donc si tu peux éclairer ma lanterne ....

Bien cordialement
 

Abel

XLDnaute Accro
Re,

Range ('a1', 'b5') correspond à range (cell(1,1), cell (5,2)).
C'est à dire, coin supérieur gauche et coin inférieur droit d'une plage.
C'est, effectivement l'équivalent de range ('a1:b5').

Range ('a1,b5'), avec une virgule et non un double point comme séparateur, indique à Excel deux cellules distinctes et non deux extrémités d'une plage.

Donc, dans le cas de variables si on fait :
range('a' & i , 'b' & j) il interprète ça comme deux extrémités.
Ca fonctionne si on met tout sur la même ligne ou la même colonne :
range('a' & i , 'b' & i, 'g' & i), là Excel sélectionne tout de Ai à Gi.
S'il y a plus de deux éléments sur des lignes ou des colonnes différentes avec cette syntaxe, il sera perdu en cherchant ses coins sup gauche et inf droit.
D'où une erreur.

Pour obtenir une chaine 'At, Hs, Gu, Kv' il faut le concaténer différemment :
range ('A' & t & ',H' & s & ',G' & u & ',K' & v).


Abel.

Message édité par: Abel, à: 09/01/2006 11:48

Message édité par: Abel, à: 09/01/2006 11:50
 

Discussions similaires

Statistiques des forums

Discussions
312 327
Messages
2 087 315
Membres
103 515
dernier inscrit
Cherbil12345