XL 2013 Syntaxe avec with ... end with : un ou plusieurs points ?

  • Initiateur de la discussion Initiateur de la discussion Sebast
  • Date de début Date de début

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 !

Sebast

XLDnaute Impliqué
Bonsoir à toutes et à tous,

après avoir cherché dans beaucoup de directions, je m'adresse à vous pour me dire quel arbre me cache la forêt …

Je suis bien conscient qu'avec with end with il faut mettre un point devant l'instruction mais du coup je me demande si je n'en mets pas un de trop
Quelle est la bonne syntaxe dans mon cas (car les deux fonctionnent !) :

Code:
Range(.Rows(Debut), .Rows(Fin)).Delete
ou
.Range(.Rows(Debut), .Rows(Fin)).Delete
Bizarrement, les deux lignes font le job (voir pièce jointe ou les toutes dernières lignes du code ci-dessous) mais j'ai peur que ça ne marche que par hasard, et qu'à l'avenir, dans un cas précis, ça coince …

Quelqu'un peut-il m'éclairer ?

Merci d'avance



Code:
Sub a0_squeeze3()
' 1 --- on trie d'abord sur le critère "Ville"
Dim lastlineVentes As Long
Dim VentesZone As Range
Dim Critere As Range

With Sheets("Ventes")

    lastlineVentes = .Range("A" & Rows.Count).End(xlUp).Row
    Set VentesZone = .Range("A2:E" & lastlineVentes)
    Set Critere = .Range("A1")  ' critère 'ville' est en colonne A
            
    VentesZone.Sort key1:=Critere, order1:=xlAscending, Header:=xlNo
       
       
    ' 2  --- on définit comment trouver la ville à supprimer
    Dim VilleASupprimer As String
    Dim Nombre As Long
    Dim ZoneOuChercher As Range
    Dim DernLign As Long
    Dim Debut As Long
    Dim Fin As Long

    VilleASupprimer = "absent de Table_client"


    ' 3 --- on évalue combien i y a de lignes correspondant au critère (sinon, plante qd =0)
     DernLign = .Range("A" & Rows.Count).End(xlUp).Row
     Set ZoneOuChercher = .Range("A1:A" & DernLign)

    Nombre = Application.WorksheetFunction.CountIf(ZoneOuChercher, VilleASupprimer)

    If Nombre = 0 Then
           MsgBox "Ciao, aucun enregitrement avec 'absent de Table_client'"
            Exit Sub
    Else
            MsgBox "Il y a " & Nombre & " lignes à supprimer"
            Debut = WorksheetFunction.Match(VilleASupprimer, ZoneOuChercher, 0)  ' 0 car correspondance exacte
            Fin = WorksheetFunction.Match(VilleASupprimer, ZoneOuChercher, 1) ' 1 permet de remonter le n° de ligne juste avant le changement

' ici mes doutes ...
            'Range(.Rows(Debut), .Rows(Fin)).Delete ' fonctionne SANS le point devant Range !
            .Range(.Rows(Debut), .Rows(Fin)).Delete ' fonctionne AVEC le point devant Range !
            
    End If
   
End With

End Sub
 

Pièces jointes

Re : Syntaxe avec with ... end with : un ou plusieurs points ?

Bonsour®

au sein d'un With...End With
il est préférable de toujours qualifier un range

car le range sans "." s'adresse toujours à la feuille active,
ce qui peut être ambiguë lorsque le with concerne une autre feuille
 
Re : Syntaxe avec with ... end with : un ou plusieurs points ?

Salut Modeste geedee,

merci pour ta remarque, moi aussi par principe je mets le point, pour lever toute ambiguité quant à la feuille active.

Mais justement, je suis plus qu'étonné qu'en utilisant l'instruction SANS le point et en ayant pointé auparavant dans une autre feuille, tout se déroule comme si j'avais utilisé l'instruction AVEC le point (normalement, sans le point, ça devrait intervenir sur la feuille active, donc une autre : celle pointée !)

mystère ...
 
Re : Syntaxe avec with ... end with : un ou plusieurs points ?

Bonjour à tous.


À Sebast : Je suis étonné de votre étonnement. Voyez si le classeur joint peut vous rassurer.​


Bonne journée.


ℝOGER2327
#8091


Mercredi 11 As 143 (Saint Ossian, barde postiche - fête Suprême Quarte)
22 Brumaire An CCXXIV, 3,6482h - azerole
2015-W46-5T08:45:20Z
 

Pièces jointes

Dernière édition:
Re : Syntaxe avec with ... end with : un ou plusieurs points ?

Bonjour à tous,

Fichier joint avec ces macros dans Feuil2 :

Code:
Sub AvecPoint()
With Feuil1
  Application.Goto .Range(.Rows(1), .Rows(5))
End With
End Sub

Sub SansPoint()
With Feuil1
  Application.Goto Range(.Rows(1), .Rows(5)) 'ne marche pas
End With
End Sub
A+
 

Pièces jointes

Re : Syntaxe avec with ... end with : un ou plusieurs points ?

Bonjour.

Tout dépend de quel objet (spécifié ou assumé) vous appelez sa méthode Range. En résumé :
VB:
Sub test()
MsgBox Feuil2.Range(Feuil2.[A1], Feuil2.[A2]).Address(External:=True) ' OK,
MsgBox Feuil1.Range(Feuil2.[A1], Feuil2.[A2]).Address(External:=True) ' Impossible !
MsgBox Application.Range(Feuil2.[A1], Feuil2.[A2]).Address(External:=True) ' OK quel que soit la feuille active
End Sub
Si l'objet n'est pas spécifié, Application est assumé dans un module standard, mais la feuille l'est dans son module objet, soit Me.
D'une façon générale, personnellement, je vous déconseille d'utiliser la méthode Range de l'objet Application chaque fois que vous pouvez utiliser celle d'un objet Worksheet.
 
Dernière édition:
Re : Syntaxe avec with ... end with : un ou plusieurs points ?

Bonjour,


Avec vos explications, je constate de visu les effets des différents codes.

Merci de vous êtes penchés sur mon cas, je commence à mieux cerner les subtilités ...

Bon weekend
 
Re : Syntaxe avec with ... end with : un ou plusieurs points ?

Re...


Bonjour à tous,

Fichier joint avec ces macros dans Feuil2 :

Code:
Sub AvecPoint()
With Feuil1
  Application.Goto .Range(.Rows(1), .Rows(5))
End With
End Sub

Sub SansPoint()
With Feuil1
  Application.Goto Range(.Rows(1), .Rows(5)) 'ne marche pas
End With
End Sub
A+
D'accord. Notez cependant que, conformément aux explications de Dranreb #7, la procédure :​
Code:
Sub SansPoint2()
With Feuil1
  Application.Goto Range(.Rows(1), .Rows(5))
End With
End Sub
fonctionne lorsqu'elle est placée dans un module standard.​


Bonne journée.


ℝOGER2327
#8092


Mercredi 11 As 143 (Saint Ossian, barde postiche - fête Suprême Quarte)
22 Brumaire An CCXXIV, 6,1735h - azerole
2015-W46-5T14:48:59Z
 
Dernière édition:
- 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

Discussions similaires

Réponses
4
Affichages
363
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
504
Réponses
2
Affichages
410
Retour