Problème de typage de variable ?

Bonjour à tous,

Je souhaite supprimer toutes les lignes contenant le mot ADHESIF (pour l'exemple) sans passer par une boucle.

J'ai créé une variable qui concatène toutes les lignes contenant le mot "ADHESIF*" trouvées lors d'une recherche dans une colonne.

Tout va bien jusqu'à l'instruction de suppression.

Si je renseigne ma variable dans l'instruction de suppression, ça ne fonctionne pas.

Par contre, si je copie le contenu de cette variable dans une cellule d'une feuille et que je colle ce contenu dans l'instruction à la place de ma variable, ça fonctionne !

D'où mon interrogation sur le typage de la variable...

Mais à part une string je ne vois pas trop ce que pourrait être le type de ma variable (si c'est bien ça le problème).

Merci d'avance pour vos lumières et de votre indulgence à propos de ma façon de coder...

Je sais que je peux faire une boucle mais bon je voudrais comprendre pourquoi ça ne fonctionne pas.

Cordialement.

(le fichier joint contient la macro).

Sub MiseFormeAGORA_TEST()

Dim AgoraNew As Worksheet
Dim DFLtoDELETE As String
Dim DFL_Search As Range
Dim NbOCCURDFL As Integer
Dim DFLaddress As Long
Dim x As Integer
Dim y As Integer
Dim tabDFL() As Variant
Dim Filter_Search As Range
Dim RowsToDelete As String

Set AgoraNew = Application.ActiveSheet

'Recherche du mot ADHESIF dans la colonne W pour l'exemple
DFLtoDELETE = "ADHESIF*"
Set DFL_Search = AgoraNew.Range("A:A").Find(DFLtoDELETE)
If DFL_Search Is Nothing Then
Else: NbOCCURDFL = Application.WorksheetFunction.CountIf(AgoraNew.Range("A:A"), DFLtoDELETE) - 1
End If

DFLaddress = DFL_Search.Row 'stocke l'adresse de la première occurence trouvée

x = 0
ReDim tabDFL(NbOCCURDFL)
Do
    Set DFL_Search = AgoraNew.Range("A:A").FindNext(DFL_Search)
   x = x + 1
    tabDFL(0) = DFLaddress
    If DFLaddress = DFL_Search.Row Then Exit Do
    tabDFL(x) = DFL_Search.Row
Loop While DFLaddress <> DFL_Search.Row

'***************************************************************************************************************************
'Suppression des lignes contenant les articles à supprimer
'SOLUTION 1 avec sélection
RowsToDelete = tabDFL(0) & ":" & tabDFL(0) 'boucle pour concaténer toutes les lignes à supprimer dans la variable RowsToDelete 
For y = 1 To UBound(tabDFL)
    RowsToDelete = RowsToDelete & "," & tabDFL(y) & ":" & tabDFL(y)
Next
RowsToDelete = Chr$(34) & RowsToDelete & Chr$(34) 'Ajout des guillemets (chr$(34)) 

AgoraNew.Range("B2") = RowsToDelete 'pour tester ma variable et faire un copier-coller pour essai
AgoraNew.Range(RowsToDelete).Select 'instruction delete remplacé par select pour test ---> Ne fonctionne pas ou si mais avec "peu" de lignes !!!
AgoraNew.Range(RowsToDelete).Delete ---> Ne fonctionne pas

' Cette instruction fonctionne alors que le contenu de la variable est identique !
AgoraNew.Range("6:6,12:12,13:13,19:19,20:20,25:25,26:26,30:30,31:31,38:38,42:42").Select
' Cette instruction fonctionne
AgoraNew.Range("6:6,12:12,13:13,19:19,20:20,25:25,26:26,30:30,31:31,38:38,42:42").Delete 

End Sub
3sup-article.xlsm (18.46 Ko)

Bonjour pipout64,

C'est l'ajout des Chr(34) qui fait que cela ne fonctionne pas, supprime cette ligne et le 1er delete sur "B2" ainsi que le select et tout fonctionnera (j'ai testé).

Cdlt,

Cylfo

Bonjour pipout64,

Les guillemets entourent des expressions constante et littérales : x = "123" ou y = "1,2,3".

x et y contiennent un texte. Inutile de rajouter à x ou y des guillemets.

RowsToDelete est une variable. Elle contient déjà un texte (d'après votre construction dans le code). Il n'est donc pas nécessaire d'entourer son contenu par des guillemets.

La ligne ci-dessous est totalement inutile et toxique. Votre chaine de caractères contenant les numéros de ligne commence et finit bien par un nombre et (non par un guillemet).

RowsToDelete = Chr$(34) & RowsToDelete & Chr$(34) 'Ajout des guillemets (chr$(34)) - Ligne à supprimer.

Exemple : quand vous supprimez la ligne 1 :

soit vous écrivez: range("1:1").delete

soit vous écrivez :

ligne="1:1"

range(ligne).delete

Bonjour Cyflo et mafraise !

Merci pour la célérité dont vous avez fait preuve pour me répondre.

C'est fou le temps qu'on peut passer pour ces !

Ce qui est étonnant, c'est qu'au tout début je n'avais pas ajouté ces guillemets (chr$(34)) mais comme ça ne fonctionnait pas je les ai ajoutés !

J'ai fait tellement de manipulations que je ne sais plus exactement.

Quoi qu'il en soit, je vous remercie pour vos lumières.

et j'ai bien retiendu la leçon.

Bien à vous.

Rechercher des sujets similaires à "probleme typage variable"