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

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

  • Question_forum_12112015.xlsm
    173.7 KB · Affichages: 31

Modeste geedee

XLDnaute Barbatruc
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
 

Sebast

XLDnaute Impliqué
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 ...
 

ROGER2327

XLDnaute Barbatruc
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

  • Pointer ou ne pas pointer, là est la question.xlsm
    22.8 KB · Affichages: 33
Dernière édition:

Sebast

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

Bonjour Roger2327,

merci pour ce fichier explicatif. En le consultant je comprends mais toujours pas pourquoi dans mon cas d'espèce ça marche, d'où qu'on pointe.


Bonne journée
 

job75

XLDnaute Barbatruc
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

  • Avec ou sans point(1).xlsm
    22.8 KB · Affichages: 25

Dranreb

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

Sebast

XLDnaute Impliqué
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
 

ROGER2327

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

Discussions similaires

Réponses
1
Affichages
169
Réponses
2
Affichages
154
Réponses
0
Affichages
155

Statistiques des forums

Discussions
312 302
Messages
2 087 039
Membres
103 439
dernier inscrit
julienpipiou