[RESOLU]erreur -2147352571 : le type ne correspond pas

elect31

XLDnaute Nouveau
Bonsoir à tous
Je crée des controles images dynamiquement, mais je n'arrive pas à les supprimer.
Je connais la syntaxe :
dim nom_img as string 'Nom du controle
monUserForm.Frame1.Controls remove nom_img

Ce code fonctionne très bien sur un fichier en modèle réduit, mais quand je l'incorpore dans mon projet, ... j'ai l'erreur -2147352571 : le type ne correspond pas.

Je joins le fichier si une âme charitable veut bien y jeter un oeil.???

Tout se passe dans la proc évenementielle Private Sub ListBxClasse_Click() de UFrmProfilEleve

Le mot de passe pour fermer le userform est bob. Je vous vois sourire, mais c'est rapide devant les élèves; ils n'ont pas le temps de regarder le clavier...

Les images créées sont des coches vertes qui se créent et se positionnent automatiquement si la cellule de la feuille parcourue : ligne 410 (Set cell = ThisWorkbook.Worksheets(date_seance) _
.Range("H5").Offset(laLigne, LaColonne))
est en fond rose : ligne 430 (If cell.Interior.Color = RGB(242, 220, 219) Then).

J'arrive très bien à mettre des coches si vous cliquez sur l'élève1, mais elles ne se suppriment pas sans erreur si je passe à un autre élève à l'aide de la listbox du formulaire.

J'ai géré l'erreur avec une étiquette gestionErreur: en fin de procédure.
Cette erreur se situe en ligne 210 .Controls.Remove nom_img

Si la solution pouvait fonctionner avec XL 2003 à 2010????

Je vous remercie de vos lumières.
 

Pièces jointes

  • type.zip
    467.9 KB · Affichages: 64
  • type.zip
    467.9 KB · Affichages: 73
  • type.zip
    467.9 KB · Affichages: 81
Dernière édition:

elect31

XLDnaute Nouveau
Re : erreur -2147352571 : le type ne correspond pas

Merci d'avoir jeté un oeil à mon message. J'ai retiré toute indication patronymique, mais j'ai du mal à envoyer une version simplifiée du projet.
J'en ai bien une mais elle fonctionne, elle ne reproduit pas l'erreur qui apparaît sur celui que j'envoie.
Dites moi si cela suffit?

Merci d'avance
 

elect31

XLDnaute Nouveau
Re : erreur -2147352571 : le type ne correspond pas

J'ai trouvé une solution qui fonctionne:
Ce que j'utilisais:
Dim C as Control
dim nom_img as string 'Nom du controle
nom_img=C.name
monUserForm.Frame1.Controls remove nom_img


ce qu'il fallait utiliser:
For Each C In .Controls
If TypeOf C Is Image Then
.Controls.Remove C.Name
End If
Next C

En utilisant la propriété name directement, sans passer par une variable string, ça fonctionne. Je comprends que le "type", ce devait être ça.
Si je voulais continuer à utiliser une variable pour nom_image, quel serait le type de variable qu'il faudrait déclarer?
 

elect31

XLDnaute Nouveau
Re : erreur -2147352571 : le type ne correspond pas

Oui moi aussi ça fonctionne.
Même ce code là fonctionnait sur le petit échantillon que je m'étais fait, mais quand je passe sur mon projet ça génère une erreur.

dim nom_img as string
monUserForm.Frame1.Controls remove nom_img


C'est le remove nom_img qui plante alors que le
Dim C as control
monUserForm.Frame1.Controls remove C.name

marche sans problème.

C'est là où je ne comprends pas.??? L'aide de remove propose : "Des valeurs numériques tout comme des valeurs de chaînes sont acceptables" et "Si la valeur est une chaîne, elle doit correspondre à un nom de membre valide."
Il me semblait que Dim nom_img as string pouvait suffire.

Bref ça marche mais je n'ai pas compris pourquoi.

Je mettrai RESOLU dans une semaine si ça ne dérange pas, au cas où quelqu'un aurait une idée du pourquoi du comment.

En tous les cas merci de ton aide. Et au moins j'aurai appris un mot "Palsambleu". Je croyais qu'il n'y avait que le capitaine Haddock qui disait ça.:cool:
 
Dernière édition:

elect31

XLDnaute Nouveau
Re : erreur -2147352571 : le type ne correspond pas

Si tu relis bien le message #4, tu verras que c'est quelque chose que je n'avais pas oublié.
J'avais mis un condensé de mon code pour attirer l'attention sur la syntaxe de remove, mais je n'avais pas oublié d'affecter la variable.
Voici mon code exact:
Celui qui ne fonctionne pas:
Code:
        With UFrmProfilEleve.Controls("FrameSeance" & CStr(i))
            For Each C In .Controls
                If TypeOf C Is Image Then
                    nom_img = C.Name
                    .Controls.Remove Controls(nom_img)
                End If
            Next C
        End With
Celui qui fonctionne :
Code:
        With UFrmProfilEleve.Controls("FrameSeance" & CStr(i))
            For Each C In .Controls
                If TypeOf C Is Image Then
                    .Controls.Remove C.Name
                End If
            Next C
        End With
i est bien déclaré ainsi que C
 

elect31

XLDnaute Nouveau
Re : erreur -2147352571 : le type ne correspond pas

Tu ne peux pas supprimer avec Remove un contrôle que tu aurais placé à la construction du form.
Remove ne sert que si tu as construit ton contrôle à la volée.
Il faudrait rajouter ça avant de vouloir supprimer l'image:
Code:
                        Set img = UserForm1.Controls.Add("Forms.Image.1", , True)
Si l'image est ajoutée par du code, alors tu peux employer Remove

C'est normal que tes 2 cas de Remove ne fonctionnent pas.
 

Staple1600

XLDnaute Barbatruc
Re : erreur -2147352571 : le type ne correspond pas

Re


Tu n'étais pas loin ;)

cela fonctionne chez moi
Code:
Sub testok()
Dim img
Set img = UserForm1.Controls.Add("Forms.Image.1", , True)
Dim c As Control, nom_img$
With UserForm1
            For Each c In .Controls
                If TypeOf c Is Image Then
                    nom_img = CStr(c.Name)
                    .Controls.Remove .Controls(nom_img).Name ' ok
                End If
            Next c
        End With
End Sub
 

Statistiques des forums

Discussions
312 111
Messages
2 085 395
Membres
102 882
dernier inscrit
Sultan94