Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

utilisation de "With"

0 views
Skip to first unread message

Sunburn

unread,
Dec 3, 2008, 5:57:02 AM12/3/08
to
Bonjour,
comment puis-je indiquer plusieurs onglets pour ce code :
with sheets("30_31","30_41") est-il correcte ??
-----
> Sub FTS30()
> 'onglet 30_31
> With Sheets("30_31")
> 'deplacement
> .[H10:H29].Copy
> .[F10].PasteSpecial Paste:=xlPasteValues
> Application.CutCopyMode = False
> .[E10:E29,H10:H29].ClearContents 'effacement
> .[A4] = "NA" 'on met la valeur NA en A4
> End With
> End Sub
-----
Merci.
YANN

FFO

unread,
Dec 3, 2008, 6:08:28 AM12/3/08
to
Salut à toi

Il faut mettre :

For i = 1 To Sheets.Count
If "30_31,30_41" Like "*" & Sheets(i).Name & "*" Then
With Sheets(i)


'deplacement
.[H10:H29].Copy
.[F10].PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
.[E10:E29,H10:H29].ClearContents 'effacement
.[A4] = "NA" 'on met la valeur NA en A4
End With

End If
Next

Celà devrait te convenir
Dis moi !!!

Corto

unread,
Dec 3, 2008, 6:16:39 AM12/3/08
to
Bonjour Sunburn,
Si tu veux effectuer le même traitement sur plusieurs feuilles il faut plutôt utiliser For Each ...
Sub FTS30()
    'onglet 30_31
    For Each XSH In Sheets(Array("30", "31"))
        'deplacement
        With XSH

            .[H10:H29].Copy
            .[F10].PasteSpecial Paste:=xlPasteValues
            .[E10:E29,H10:H29].ClearContents  'effacement
            .[A4] = "#N:A"  'on met la valeur NA en A4
        End With
    Next XSH
    Application.CutCopyMode = False
 End Sub

Corto

Sunburn a écrit :

Jacky

unread,
Dec 3, 2008, 6:31:20 AM12/3/08
to
Re...
Voir message précèdent

--
Salutations
JJ


"Sunburn" <Sun...@discussions.microsoft.com> a écrit dans le message de
news: B2762DEB-7AC7-4677...@microsoft.com...

Sunburn

unread,
Dec 3, 2008, 7:54:01 AM12/3/08
to
re,
en fait, le nom de l'onglet n'a pas de relation avec une suite logique, donc
je vais peut etre opter pour la solution de Corto, qui a première vu, je
trouve moins complexe.
en fait, j'ai 4 et uniquement 4 onglets pour lesquels je veux ce traitement.
mais de toute façon, ça plante à ...clearcontents.
Estc-e que ça a à voir avec ma protection de classeur ?
YANN

"FFO" a écrit :

Sunburn

unread,
Dec 3, 2008, 7:59:03 AM12/3/08
to
Ok, ça fonctionne très bien. voila mon code :
----
Sub tets2()
ActiveWorkbook.Unprotect
'onglet 30_31
For Each XSH In Sheets(Array("30_31", "30_32"))

'deplacement
With XSH
.[H10:H29].Copy
.[F10].PasteSpecial Paste:=xlPasteValues
.[E10:E29,H10:H29,M10:M29,A36].ClearContents 'effacement

.[A4] = "#N:A" 'on met la valeur NA en A4
End With
Next XSH
Application.CutCopyMode = False
End Sub
-----
sauf que j'ai ma cellule A36 qui est fusionnée.
J'ai essayé .Unmerge.clearcontents, mais ça marche pas.....
Je comprend pas.
Si tu peux m'aider, merci beaucoup.
YANN

"Corto" a écrit :

Sunburn

unread,
Dec 3, 2008, 8:02:07 AM12/3/08
to
Jacky,
j'avais remis un post car je ne voyais plus ta réponse, et ne voulant pas
tomber dans les abimes du forums, j'ai reposté.
J'ai vu ta réponse, mais mon truc c'est que y'a pas de suite logique des
onglets, et je veux en sélectionner certains, pas en exclure certains.
peut etre dois-je adapter ton code :
if sh.name = "feuil1", "feuil2", ...
sinon, le code de corto m'a l'air pas mal.
YANN

"Jacky" a écrit :

FFO

unread,
Dec 3, 2008, 8:06:11 AM12/3/08
to
Rebonjour à toi

Ma proposition n'est pas du tout basé sur une suite logique
Il suffit simplement de lister tes Onglets sous cette forme :

30_31,30_41,32_58 etc.... dans la ligne :

If "30_31,30_41,32_58" Like "*" & Sheets(i).Name & "*" Then

Tous les Onglets listés seront inclus dans la procédure qui suit

Tu peux même faire appel à une cellule dans laquelle tu listeras tes Onglets
de la même façon et d'écrire la ligne d'instruction ainsi (pour A1):

If Range("A1") Like "*" & Sheets(i).Name & "*" Then

Pour modifier tes cellules dans une feuille il est indispensable de la
dévérouiller

Espérant avoir répondu à tes attentes
Dis moi !!!

FFO

unread,
Dec 3, 2008, 8:18:02 AM12/3/08
to
Rebonjour à toi
Si tu cherches simplement à vider les valeurs de tes cellules
mets plutôt cette ligne :

.[E10:E29,H10:H29,M10:M29,A36].Value = ""

Celà devrait être identique
Dis moi !!!

Corto

unread,
Dec 3, 2008, 8:22:53 AM12/3/08
to
Bonjour Sunburn,
Si c'est toujours la même cellule qui est fusionnée, tu peux remplacer

.[E10:E29,H10:H29,M10:M29,A36].ClearContents 'effacement
par
.[E10:E29,H10:H29,M10:M29].ClearContents 'effacement
.[A36].MergeArea.ClearContents
Sinon la meilleure solution est de défusionner toutes les cellules de la
feuille au début de la procédure par
ActiveSheet.Cells.UnMerge

Corto

Sunburn a écrit :

Sunburn

unread,
Dec 3, 2008, 8:34:00 AM12/3/08
to
Ok, ça marche, et effectivement, la defusion n'est pas envisageable, donc
j'utilise le 1).
Merci.

Jacky

unread,
Dec 3, 2008, 9:07:14 AM12/3/08
to
Re...

> sinon, le code de corto m'a l'air pas mal.
Tout à fait.
--
Salutations
JJ


"Sunburn" <Sun...@discussions.microsoft.com> a écrit dans le message de

news: 3E617CA1-5419-4EEE...@microsoft.com...

0 new messages