VBA - With..End With imbriqués

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

tototiti2008

XLDnaute Barbatruc
Bonjour à tous,

Une petite question à nos spécialistes VBA,

Je viens de faire un code où j'ai imbriqué 2 With...End With qui portaient sur 2 objets différents.
Il s'agissait d'une erreur de ma part mais j'ai constaté que le code ne plantait pas (en fait il tournait même bien).

Je suis décidé à éviter ce genre de pratique à l'avenir, à moins que certains connaissent des "règles d'utilisations propres" de With...End With imbriqués sur des objets différents.

Si vous avez des infos sur le sujet, pour que je me couche moins bête ce soir 😉

Merci d'avance
 
Re : VBA - With..End With imbriqués

Salut Tototiti

Bien que surement moins specialiste que toi en VBa , j'ai l'impression que l'aide est assez claire sur ce point :

Vous pouvez imbriquer des instructions With en plaçant un bloc With à l'intérieur d'un autre. Toutefois, les membres des blocs With externes étant masqués dans les blocs With internes, vous devez fournir dans les blocs internes une référence complète pour tous les membres d'un objet figurant dans un bloc externe.

je resumerais visuellement comme ceci:

With A
1) .C ----> A.C
With B
.C ----> B.C
A.C obligatoire pour definition identique à 1)
End With
.C ----> A.C
End With
 
Re : VBA - With..End With imbriqués

Bonjour Staple,

Voilà le code que j'ai proposé sur le forum, et qui tourne malgré 2 With imbriqués :

Code:
Sub texte()
    Dim SourceWkb As Workbook, NbLignes As Long, NbColonnes As Long, FS As FileSearch
    Set FS = Application.FileSearch
    With FS
        .LookIn = "Z:\"
        .Filename = "fdece*.txt"
        If .Execute(msoSortByLastModified, msoSortOrderAscending) > 0 Then
            For i = 1 To .FoundFiles.Count
                Workbooks.OpenText Filename:=.FoundFiles(i), Origin:= _
                    xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _
                    , ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:= _
                    False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _
                    , Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
                    Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _
                    16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1)), _
                    TrailingMinusNumbers:=True
                Set SourceWkb = ActiveWorkbook
                NbColonnes = SourceWkb.ActiveSheet.Range("IV1").End(xlToLeft).Column
                NbLignes = SourceWkb.ActiveSheet.Range("A65536").End(xlUp).Row
                With SourceWkb.ActiveSheet
                    .Range(.Cells(2, 1), .Cells(NbLignes, NbColonnes)).Copy Destination:=ThisWorkbook.Worksheets("fdece").Range("A65536").End(xlUp).Offset(1, 0)
                End With
                SourceWkb.Close False
            Next i
        End If
    End With
End Sub

pour mieux comprendre le contexte, voici le fil concerné :

https://www.excel-downloads.com/threads/importation-de-fichiers-txt.104069/

comme ça commence à être long, j'avais posté ce code en post #21
 
Re : VBA - With..End With imbriqués

Bonjour PierreJean,

On dirait que l'aide VBA XL2000 est plus précise que sur 2003.
Moi j'ai juste un exemple avec 2 With imbriqués sur un même Objet, mais des propriétés plus ou moins fines :

Sub MyInput()
With Workbooks("Book1").Worksheets("Sheet1").Cells(1, 1)
.Formula = "=SQRT(50)"
With .Font
.Name = "Arial"
.Bold = True
.Size = 8
End With
End With
End Sub

ça clarifie les choses
si je comprends bien, dans un nouveau With (interne), on oublie les précédents jusqu'à sortir de l'interne.
 
Re : VBA - With..End With imbriqués

Re

au vu de 2007, je ne suis pas persuadé 😉

Mais bon, on ne choisit pas toujours sur quelle version on travaille... je trouve qu'au moins, jusqu'à la version 2003, ils sont restés assez cohérents avec le logiciel original.
Pour 2007 je ne suis pas sûr.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour