incompatibilité de type sur plage de cellules

gueyou

XLDnaute Nouveau
Bonjour,

J'ai une erreur lors de l'exécution de mon code que je n'arrive pas à résoudre:
j'ai 2 feuilles:
- une courante où sont affichées 2 dates dans 2 cellules (colonnes D et F).
- feuille Quanti où la colonne C contient des dates consécutives
J'aimerai définir old_plage, une plage de cellules de Quanti comprise entre les 2 dates affichées sur la feuille courante.

lors de la sélection d'une cellule de la ligne, j'obtiens un code erreur 13: incompatibilité de type à propos de la ligne rouge ci-dessous
Merci d'avance pour votre retour :)

Code:
Public old_plage
Option Explicit

Sub Worksheet_SelectionChange(ByVal Sel As Range)
Dim x, y, e As Integer
Dim c, d As Integer
Dim d1, d2 As Date
x = Sel.Row
d1 = Cells(x, 4).Value
d2 = Cells(x, 6).Value

If d1 = 0 Or d2 = 0 Then
Exit Sub
Else
    For y = 6 To 400
        If Worksheets("Quanti").Cells(y, 3).Value = d2 Then
           [COLOR="Red"] c = Worksheets("Quanti").Cells(y, 3).Address[/COLOR]
            MsgBox (c)
        End If
        If Worksheets("Quanti").Cells(y, 3).Value = d1 Then
            d = Worksheets("Quanti").Cells(y, 3).Address
            MsgBox (d)
        End If
    Next
    old_plage = Worksheets("Quanti").Range(c, d).Address
    MsgBox (old_plage)
End If

End Sub
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : incompatibilité de type sur plage de cellules

Bonjour

Tu es sûr que c'est sur cette ligne que tu as l'erreur et non sur la ligne du d

car tu déclares ton d en integer alors que l'adresse c'est du string

petite remarque tes variables x, y c et d1 sont déclarées en variant

il faut faire par exemple

Dim d1 As Date, d2 As Date
 

gueyou

XLDnaute Nouveau
Re : incompatibilité de type sur plage de cellules

je bloque maintenant dans la suite du code (ligne en rouge):
erreur 424: objet requis
Est-ce encore une histoire de déclaration d'objets ?
Merci

Code:
Private Sub Worksheet_Change(ByVal Modif As Range)
Dim x As Integer, y As Integer, z As Integer
Dim e As String, f As String
Dim d3 As Date, d4 As Date
Dim Cellule As Range
Dim toto As Range
x = Modif.Row
d3 = Cells(x, 4).Value
d4 = Cells(x, 6).Value

If d3 = 0 Or d4 = 0 Then
Exit Sub
Else
    For y = 6 To 400
        If Worksheets("Quanti").Cells(y, 3).Value = d3 Then
            e = Worksheets("Quanti").Cells(y, 3).Address
        End If
        If Worksheets("Quanti").Cells(y, 3).Value = d4 Then
            f = Worksheets("Quanti").Cells(y, 3).Address
        End If
    Next
    new_plage = Worksheets("Quanti").Range(e, f).Address
    MsgBox (new_plage)
End If

For z = 5 To 65
    If Worksheets("Quanti").Cells(2, z).Value = Cells(x, 1).Value Then
        [COLOR="Red"]For Each Cellule In old_plage[/COLOR]
            If Not Intersect(Cellule, new_plage) Is Nothing Then
                Cellule.Offset(0, z - 3).Value = "0"
            End If
        Next Cellule
        For Each Cellule In new_plage
            If Cells(x, 5).Value = "Matin" Then
                Cellule.Offset(0, z - 3).Value = "1"
            Else:
                Cellule.Offset(0, z - 3).Value = "0,5"
            End If
            If Cells(x, 7).Value = "Matin" Then
                Cellule.Offset(0, z - 3).Value = "0,5"
            Else:
                Cellule.Offset(0, z - 3).Value = "1"
            End If
        Next
    End If
Next

End Sub
 

gueyou

XLDnaute Nouveau
Re : incompatibilité de type sur plage de cellules

old_plage est en fait défini dans la première procédure selectionChange
dont je veux reprendre la valeur dans Worksheet_change.

-> ce que j'aimerais faire, c'est comparer deux plages: l'une définie à la sélection de la cellule (old_plage), l'autre définie à la modification de la cellule (new_plage).
Comment faire la référence à la variable définie plus haut ?

Code:
Public old_plage, new_plage
Option Explicit

Sub Worksheet_SelectionChange(ByVal Sel As Range)
...
Private Sub Worksheet_Change(ByVal Modif As Range)
...
 

gueyou

XLDnaute Nouveau
Re : incompatibilité de type sur plage de cellules

Merci Pascal,
Je viens de passer les déclarations publiques dans un module du projet: la variable old_plage dans la 1e partie du code n'est pas trouvée.(erreur d'execution 91: objet non trouvé).
Y a t il une manip en plus à faire pour eviter ce message d'erreur ?
 

gueyou

XLDnaute Nouveau
Re : incompatibilité de type sur plage de cellules

j'ai mis juste dans la fonction juste après les déclarations de variables:

Set old_plage = Worksheets("Quanti").Range("C7:C7")

de telle façon à initialiser old_plage.
Le pb est qu'il modifie la valeur de Quanti!C7 par "C7:C7", alors que je voulais juste initialiser la variable old_plage. :(
 

gueyou

XLDnaute Nouveau
Re : incompatibilité de type sur plage de cellules

Bonjour,

Finalement, je n'ai toujours pas trouvé la réponse à mon problème.
Alors voici mon fichier avec la macro concernée.
Il doit s'agir d'une histoire de déclaration de variables...

Mon but est de mettre à jour une grille de données journalière en fonction d'une plage de dates définie par un utilisateur.
Pour cela j'ai 2 feuilles:
- "entrées_sorties" où sont affichées 2 dates dans 2 cellules (colonnes F et H).
- "Quanti" où la colonne C contient la plage des dates.

-> Dans ma macro:
"Sub Worksheet_BeforeDoubleClick" j'ai défini une plage de cellules old_plage.
"Sub Worksheet_Change" j'ai défini une plage de cellules new_plage, puis comparaison de old_plage avec new_plage pour l'affichage du résultat.

Et ça ne fonctionne pas: si quelqu'un pouvait m'apporter un peu d'aide...

Merci d'avance! :)

Hugues
 

Pièces jointes

  • Suivi_Congestest.zip
    34.1 KB · Affichages: 10

Statistiques des forums

Discussions
312 392
Messages
2 088 004
Membres
103 695
dernier inscrit
acimi