OVH Cloud OVH Cloud

besloin d'aide pour simplifier

9 réponses
Avatar
mrossier
bjour,
j'avais fait ca dans le pass=E9, mais je suis bloqu=E9 en ligne 31.
Y'a moyen de faire plus simple sans blocage ? Mci

'Button macro "T_RECAPAccess"
'-------------------------------------------------------
'Copie et transfert de la ligne de donn=E9es du worksheet "RECAPACCESS"
'dans file "01_TESTACCESS1.xls"

Range("A2:IC2").Select
Selection.Copy
'-----------
Windows("01_TESTACCESS1.xls").Activate
If Range("A2") =3D Empty Then
Range("A2").Select
.=2E.
ElseIf Range("A31") =3D Empty Then
Range("A31").Select
Else
Range("A2").Select
End If
Selection.PasteSpecial Paste:=3DxlValues, Operation:=3DxlNone,
SkipBlanks:=3D _
False, Transpose:=3DFalse
End Sub

9 réponses

Avatar
Oliv'
bjour,
j'avais fait ca dans le passé, mais je suis bloqué en ligne 31.
Y'a moyen de faire plus simple sans blocage ? Mci

'Button macro "T_RECAPAccess"
'-------------------------------------------------------
'Copie et transfert de la ligne de données du worksheet "RECAPACCESS"
'dans file "01_TESTACCESS1.xls"

Range("A2:IC2").Select
Selection.Copy
'-----------
Windows("01_TESTACCESS1.xls").Activate
If Range("A2") = Empty Then
Range("A2").Select
...
ElseIf Range("A31") = Empty Then
Range("A31").Select
Else
Range("A2").Select
End If
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:úlse
End Sub



Regarde donc la fonction "select case" dans l'aide

Le empty semble mal utilisé
essaye avec
range("a2").value=""

--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Have a nice day
Oliv'
Pour me joindre : http://cerbermail.com/?V8r2o1YHl4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Avatar
anonymousA
bonjour,

si je crois bien saisir la logique des elseif, je te propose la chose
suivante qui suppose 2 choses. La 1ere, tu connais l'index ou le nom de
la feuille destinataire dans le fichier 01_TESTACCESS1.xls ou bien
c'est la feuille active, la 2eme c'est que tu exécutes la macro avec
la feuille du classeur source active à ce moment là.

Set wshdest =
Workbooks("01_TESTACCESS1.xls").Sheets(nomfeuillereception)

With wshdest
valbool = (Not IsEmpty(.Range("A2")) And Not IsEmpty(.Range("A31"))) Or
IsEmpty(.Range("A2"))

If valbool Then
Set celldest = .Range("A2")
Else
Set celldest = .Range("A31")
End If

End With

Range("A2:IC2").Copy
celldest.PasteSpecial Paste:=xlValues

Application.CutCopyMode = False

A+
Avatar
mrossier
Re-bjr, l'analyse est juste.
Une question : Est ce que ceci va me copier la ligne du classuer source
en 1ere postion (ligne 1) si elle est vide
en 2eme si la ligne 1 est vide
et ainsi de suite jusqu'a la ligne 31 ?
Merci
Avatar
mrossier
Mci Oliv'
J'ai regarde le select case qui semble la solution ideale,
mais je ne connais pas le code VB, et a mon age (!) c'est pas facile.
Peux-tu me donner un bout de code que je puisse adapter.
Mci
Avatar
mrossier
Mci Oliv'
J'ai regarde le select case qui semble la solution ideale,
mais je ne connais pas le code VB, et a mon age (!) c'est pas facile.
Peux-tu me donner un bout de code que je puisse adapter.
Mci
Avatar
Oliv'
Mci Oliv'
J'ai regarde le select case qui semble la solution ideale,
mais je ne connais pas le code VB, et a mon age (!) c'est pas facile.
Peux-tu me donner un bout de code que je puisse adapter.
Mci


Faudrais que tu expliques exactement ce que tu veux faire avec des mots si
tu ne connais pas bien vba.

Avatar
mrossier
Avec mes mots.Je suis dans le file SOURCE .xls et worksheet RECAPACCESS
J'ai une ligne de données dans les colonnes A2 à IC2 ( texte et
numerique)
Je clique un bouton et ces données sont transferees dans le file
01_TESTACCESS1.xls.xls / Worksheet COPIE en A2:IC2
Le file SOURCE.xls est remis a zero et les nouvelles valeur sont
calculées
le bouton me prend ces nouvelles données et les transfere en ligne
A3:IC3 (puisque A2:IC2 deja remplie)
et ainsi de suite jusqu'en A31:IC31.
Ce que je voudrais c'est un procedure plus simple que celle mentionnée
avec les ElseIf et qui ne s'arrete pas en ligne 31 mais puisse
continuer.
Ensuite ce nouveau fichier est transfere dans ACCESS.
Mci de l'aide
Avatar
anonymousA
rien de tout ca. Selon la logique qui était suivie, ca copiera la
plage A2:IC2 du classeur source à partir de la cellule A2 du classeur
destinataire si cette cellule A2 est vide OU si la cellule A2 ET la
cellule A31 sont non vides. Dans tous les autres cas, ca copiera la
plage A2:IC2 du classeur source à partir de la cellule A31 du classeur
destinataire .
En aucun cas, toujours selon la logique préalable ca ne copiera
quelque chose ailleurs sur le classeur destinataire.

Si ce n'était pas ce que tu voulais faire, c'est que la logique de ton
programme initial n'est pas correcte.

A+
Avatar
anonymousA
dans ma réponse à ton 2eme post, je n'avais pas lu ce post là. En
conséquence, du coup je comprends mieux ce que tu veux faire.
Attention, la messagerie coupera sans doute l'instruction commencant
par workbooks alors que celle-ci est sur une seule ligne

Range("A2:IC2").Copy
Workbooks("01_TESTACCESS1.xls").Sheets(nomfeuillereception).range("A65536") .end(xlup).offset(1,0).PasteSpecial
Paste:=xlValues
Application.CutCopyMode = False

Les instructions précédents copieront ce qu'il ya en plage A2:IC2 du
classeur source sur les plages du classeur destinataire allant de A2
jusqu'à Ax puisque on écrit à partir de la 1ere cellule vide de la
feuille du classeur destinataire. Cette procédure peut copier jusqu'à
la 65536 eme ligne mais n'a pas de gestionnaire d'erreur pour gérer au
delà.

A+