Problème selection range

Bonjour,

j'ai besoin d'agrandir la plage de cette fonction. Elle fonctionne et sert à supprimer des checkbox afin de ne pas les dupliquer quand j'en recréer. Les lignes où j'ai mis "xx" sont les lignes que je vient d'ajouter, le reste fonctionne bien. La ligne posant problème est : "set myrange2 = ... " avec une erreur 1004. Je ne sais pas pourquoi j'ai régulièrement des problèmes avec l'utilisation de range(cells, cells), (myrange fonctionne correctement).

Sub SuprCheck()
'Fonction qui va supprimer les checkbox en fonction de la machine
'Elle est appelée à des endroits différents dans le programme

    Dim acc As Worksheet, ma As Worksheet
    Dim myrange As Range, myrange2 As Range
    Dim check As CheckBox
    Dim N As Integer, v As Byte

    Set acc = Sheets("Accueil")
    N = acc.Range("A1").Value 'N = 1, 2 ou 3 selon la Machine
    v = acc.Range("A2").Value 'v = 0, 1 ou 2 selon la pompe de Resato
    'les msgbox peuvent interrompre le programme tout en indiquant la donnée voulu : outil de débug efficace
    'MsgBox v

    If N = 1 And v = 0 Then 'Choisit où picher et placer les données en fonction de la pompe/machine
xx        Set ma = Sheets(1)
xx        lgn = ma.Cells(Rows.Count, 1).End(xlUp).Row 'Défini la dernière ligne de la plage cliquée
        Set myrange = acc.Range("D13:D40")
xx        Set myrange2 = ma.Range(Cells(3, 7), Cells(lgn, 7))
    ElseIf N = 1 And v = 1 Then
xx        Set ma = Sheets(1)
xx        lgn = ma.Cells(Rows.Count, 8).End(xlUp).Row
        Set myrange = acc.Range("G13:G40")
xx        Set myrange2 = ma.Range(Cells(3, 14), Cells(lgn, 14))
    ElseIf N = 1 And v = 2 Then
xx        Set ma = Sheets(1)
xx        lgn = ma.Cells(Rows.Count, 15).End(xlUp).Row 'Défini la dernière ligne de la plage cliquée
        Set myrange = acc.Range("J13:J40")
xx        Set myrange2 = ma.Range(Cells(3, 21), Cells(lgn, 21))
    ElseIf N = 2 Then
xx        Set ma = Sheets(2)
xx        lgn = ma.Cells(Rows.Count, 1).End(xlUp).Row
        Set myrange = acc.Range("M10:M46")
xx        Set myrange2 = ma.Range(Cells(3, 7), Cells(lgn, 13))
    ElseIf N = 3 Then
xx        Set ma = Sheets(3)
xx        lgn = ma.Cells(Rows.Count, 1).End(xlUp).Row
        Set myrange = acc.Range("P10:P46")
xx        Set myrange2 = ma.Range(Cells(3, 7), Cells(lgn, 13))
    End If

    For Each check In acc.CheckBoxes 'Supprimme TOUTES les checkbox de la ligne afin d'éviter les doublons et les mauvais
        If Not Intersect(check.TopLeftCell, myrange) Is Nothing Then 'MyRange choisit la plage de la machine choisie
            check.Delete
        End If
    Next
xx    For Each check In ma.CheckBoxes 'Supprimme TOUTES les checkbox de la ligne afin d'éviter les doublons et les mauvais
xx        If Not Intersect(check.TopLeftCell, myrange2) Is Nothing Then 'MyRange choisit la plage de la machine choisie
xx            check.Delete
xx        End If
xx    Next
End Sub

Merci

Bonjour,

Essaie avec :

Set myrange2 = ma.Cells(3, 7).resize((lgn)

Cdlt.

Bonjour,

L'erreur récurrente que tu as avec range(cells, cells) vient certainement du fait que tu ne précises la feuille que pour le range, mais tu oublies de le faire pour les cells.
Il faudrait plutôt quelque chose du genre :

MaFeuille.Range(MaFeuille.Cells(1, 1), MaFeuille.Cells(1, 100))

Ou encore :

With MaFeuille
    .Range(.Cells(1, 1), .Cells(1, 100))
End With

En l'absence de précision, VBA se base sur la feuille active.

Re,

Bonjour Pedro22,
J'ai écrit une connerie ?
Cdlt.

Re,

Bonjour Pedro22,
J'ai écrit une connerie ?
Cdlt.

Salut Jean-Eric,

Je ne sais pas, je n'avais même pas vu ton message !

Ah oui ca fonctionne !

Je pensais qu'en précisant la feuille du range, comme les cellules sont spécifiés dans le range, elles étaient automatiquement associés.

Merci.

Re,

Je rectifie la chose :

Set myrange2 = ma.Cells(3, 7).resize((lgn-2)

Cdlt.

Bonjour, je reviens pour une question qui est toujours en rapport avec le sujet.

J'ai aussi apporté des ajouts à un autre code, je ne peux pas faire de CountIf avec colonne lorsque je lui ai mis une union de plusieurs plages. Y a-t-il un moyen afin de réutiliser cette fonction avec cette plage de cellules. Dans ce cas on a M=2, tout foncitonne mais ça plante à NombreCkb

    Dim N As Byte, e As Byte, i As Byte, j As Byte, v As Byte, a As Byte, M As Byte
    Dim NombreCkb As Byte, colonne As Range, acc As Object, ma As Object, lgn As Integer, lgn2 As Integer
    Set acc = Sheets("Accueil")
    N = acc.Range("A1").Value
    v = acc.Range("A2").Value
    M = acc.Range("A3").Value
    If M = 0 Then 'On est en Page d'accueil
        If N = 1 And v = 0 Then
            'Set lgn = acc.Cells(Rows.Count, 2).End(xlUp).Row
            Set colonne = acc.Range("D13:D40")
        ElseIf N = 1 And v = 1 Then
            Set colonne = acc.Range("G13:G40")
        ElseIf N = 1 And v = 2 Then
            Set colonne = acc.Range("J13:J40")
        ElseIf N = 2 Then
            Set colonne = acc.Range("M10:M46")
        ElseIf N = 3 Then
            Set colonne = acc.Range("P10:P46")
        End If
    ElseIf M = 1 Then 'On est en Page 1
        Set ma = Sheets(1)
        lgn = ma.Cells(Rows.Count, 1).End(xlUp).Row 'Défini la dernière ligne de la plage cliquée
        Set colonne = Union(ma.Range(ma.Cells(3, 7), ma.Cells(lgn, 7)), ma.Range(ma.Cells(3, 14), ma.Cells(lgn, 14)), ma.Range(ma.Cells(3, 21), ma.Cells(lgn, 21))) 'La plage correspond aux checkbox des 3 Pompes
    ElseIf M = 2 Then 'On est en Page 2
        Set ma = Sheets(2)
        lgn = ma.Cells(Rows.Count, 1).End(xlUp).Row 'Défini la dernière ligne de la plage cliquée
        lgn2 = ma.Cells(Rows.Count, 9).End(xlUp).Row 'Pour les entretiens
        Set colonne = Union(ma.Range(ma.Cells(3, 7), ma.Cells(lgn, 7)), ma.Range(ma.Cells(3, 14), ma.Cells(lgn2, 14)))
    ElseIf M = 3 Then 'On est en page 3
        Set ma = Sheets(3)
        lgn = ma.Cells(Rows.Count, 1).End(xlUp).Row 'Défini la dernière ligne de la plage cliquée
        lgn2 = ma.Cells(Rows.Count, 9).End(xlUp).Row 'Pour les entretiens
        Set colonne = Union(ma.Range(ma.Cells(3, 7), ma.Cells(lgn, 7)), ma.Range(ma.Cells(3, 14), ma.Cells(lgn2, 14)))
    End If

    NombreCkb = Application.WorksheetFunction.CountIf(colonne, "TRUE")

Bonjour,

Pour commencer :

Dim NombreCkb As Double

Cdlt.

Re,

ça ne fonctionne pas avec double, ca marche avec les extermités de chaque plage mais je ne sais pas si ça va prendre beaucoup plus de ressources ?

If lgn < lgn2 Then
    lgnn = lgn2
Else
    lgnn = lgn
End If
colonne = ma.Range(ma.Cells(3, 7), ma.Cells(lgnn, 14))

au lieu de 

colonne = Union(ma.Range(ma.Cells(3, 7), ma.Cells(lgn, 7)), ma.Range(ma.Cells(3, 14), ma.Cells(lgn2, 14)))
Rechercher des sujets similaires à "probleme selection range"