Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

utilisation de "With"

10 réponses
Avatar
Sunburn
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

10 réponses

Avatar
FFO
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 !!!
Avatar
Jacky
Re...
Voir message précèdent

--
Salutations
JJ


"Sunburn" a écrit dans le message de
news:
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



Avatar
Sunburn
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 :

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 !!!



Avatar
Sunburn
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 :

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 :
> 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
>
>



Avatar
Sunburn
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 :

Re...
Voir message précèdent

--
Salutations
JJ


"Sunburn" a écrit dans le message de
news:
> 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
>





Avatar
FFO
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 !!!
Avatar
FFO
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 !!!
Avatar
Corto
Bonjour Sunburn,
Si c'est toujours la même cellule qui est fusionnée, tu peux re mplacer
.[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 d e la
feuille au début de la procédure par
ActiveSheet.Cells.UnMerge

Corto

Sunburn a écrit :
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 :


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 :

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









Avatar
Sunburn
Ok, ça marche, et effectivement, la defusion n'est pas envisageable, donc
j'utilise le 1).
Merci.
YANN

"Corto" a écrit :

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 :
> 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 :
>
>
>> 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 :
>>
>>> 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
>>>
>>>
>>>



Avatar
Jacky
Re...
sinon, le code de corto m'a l'air pas mal.


Tout à fait.
--
Salutations
JJ


"Sunburn" a écrit dans le message de
news:
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 :

Re...
Voir message précèdent

--
Salutations
JJ


"Sunburn" a écrit dans le message de
news:
> 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
>