Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
 

PascalXLD

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

effectivement c'etait sur d...

Je cherchais l'erreur ailleurs que c'etait juste dans les déclarations

Merci beaucoup, ça fonctionne!

Pas grave mais tu as pris la bonne habitude de déclarer tes variables

Par contre fait attention au petit point que je mentionnais sur les déclarations sur la même ligne
 

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…