XL 2016 probleme incompatibilité de type

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Flo79

XLDnaute Nouveau
Bonjour a tous !

C'est la première fois que je demande de l'aide sur un forum. Excuser-moi par avance si je ne respecte pas les code d'usage. Je suis débutant bidouilleur sur VBA.
J'ai réalisé un tableau pour mon travail à remplir par un userform. Tout marche presque bien sauf une erreur "incompatibilité de type" lorsque je sélectionne un client dans une combotext. Je ne trouve pas la solution malgré les nombreux forum visité. Quelqu'un peut-il m'aider ? Je joint le fichier et merci d'avance !
 

Pièces jointes

Solution
Bonjour Flo,
Il faut traiter les exceptions ( si vide alors ... ) pour les lignes qui utilisent CDate ou CDBl.
Un ex en PJ avec :
VB:
Private Sub Ajouter_Click()
Dim Ligne As Integer
With Sheets("Tableau")
Ligne = Sheets("Tableau").Range("A65536").End(xlUp).Row + 1
.Range(Cells(Ligne, 1), Cells(Ligne, 22)).ClearContents     ' Clear tableau Ligne, colonnes 2 à 22
.Cells(Ligne, 1) = PhaseProjet
.Cells(Ligne, 5) = Com
.Cells(Ligne, 6) = Dess
.Cells(Ligne, 7) = Met
.Cells(Ligne, 8) = Cond
.Cells(Ligne, 9) = Client
.Cells(Ligne, 10) = DossierComplet
.Cells(Ligne, 11) = ElementsManquant
.Cells(Ligne, 12) = Remarques
.Cells(Ligne, 16) = Chauffage
.Cells(Ligne, 17) = Style
.Cells(Ligne, 18) = Fondations
.Cells(Ligne, 19) = Forme
.Cells(Ligne...
Bonjour Flo,
Sans tout bien comprendre, un simple essai pose problème.
Lorsque je sélectionne un client dans une combotext , j'ai une erreur sur cette ligne ( voir ci dessous ).
Or Budget et SurfacePondéré sont des chaines de caractères, non des nombres, d'où l'erreur;
Par ex Budget.value=Budgetmaison.
1.jpg

Donc au pif j'ai supputé une erreur d'indice de ligne. J'ai remplacé Ligne = Cel.Row par Ligne = 1 + Cel.Row.
L'erreur disparait.
Reste à savoir si c'est pertinent !!! 😉
 
Bonjour et merci pour ta réactivité ! La communauté est très active et ça fait plaisir !

Oui j'avais remarqué un problème de variable. Je ne m'y connais pas bcp. J'ai pourtant essayé de mettre les champs en numérique avec CDbl()...
Et ça déverse un contenu numérique dans le tableau Excel.

J'ai par contre du mal avec la commande find pour trouve la ligne du champ client recherche. J'ai essayé pour simplifier
Ligne = Sheets("Tableau").Cells.Find(What:=RechercheClient, LookIn:=xlWhole, SearchOrder:=xlNext). Row + 1

Mais je n'ai que la première ligne qui s'affiche malgré les changements. Au moins y a plus d'erreurs lol

Un petit coup de main ? Merci d'avance !
 
Bonjour,
J'ai pourtant essayé de mettre les champs en numérique avec CDbl().
CDbl va transformer une chaine de caractères en nombre ... dès l'instant où c'est faisable.
Par ex, CDbl("1.23") donnera 1.23. Par contre CDbl( "Budgetmaison") donnera une erreur.

Quand à Ligne, on peut simplifier avec un Equiv, comme ci dessous :
VB:
Private Sub RechercheOk_Click()
Dim Ligne As Integer
With Sheets("Tableau")
    Ligne = Application.Match(UserForm1.RechercheClient, .Range("I:I"), 0)
    PhaseProjet = .Cells(Ligne, 1)
    DateDemande = .Cells(Ligne, 2)
    DateRdv = .Cells(Ligne, 3)
    Delais = .Cells(Ligne, 4)
    Com = .Cells(Ligne, 5)
    Dess = .Cells(Ligne, 6)
    Met = .Cells(Ligne, 7)
    Cond = .Cells(Ligne, 8)
    Client = .Cells(Ligne, 9)
    DossierComplet = .Cells(Ligne, 10)
    ElementsManquant = .Cells(Ligne, 11)
    Remarques = .Cells(Ligne, 12)
    Budget = .Cells(Ligne, 13)
    SurfacePonderee = .Cells(Ligne, 14)
    Chauffage = .Cells(Ligne, 16)
    Style = .Cells(Ligne, 17)
    Fondations = .Cells(Ligne, 18)
    Forme = .Cells(Ligne, 19)
    Vendu = .Cells(Ligne, 20)
    PrixVente = .Cells(Ligne, 21)
End With
End Sub
Cela semble marcher. A vérifier.
Simplifiez toujours l'écriture. Tous les Sheets("Tableau") sont inutiles, il suffit de tout mettre dans le With. Faites aussi de l'indentation, c'est plus lisible.
 
Bonjour et désolé pour ma réponse tardive. Beaucoup de travail m’empêche d'avancer comme je le veux sur ce projet.
Tout marche presque bien hormis une chose. Quand je ne rentre pas de valeur dans des textbox soumis a une conversion (CDate, DCbl) j'ai un message d'erreur. Y a t-il une solution ? Je souhaiterai conserver cette conversion.
Merci Sylvanu pour ton aide et pour m'avoir montrer le "With". C'est super simple en faite !
 

Pièces jointes

Bonjour Flo,
Il faut traiter les exceptions ( si vide alors ... ) pour les lignes qui utilisent CDate ou CDBl.
Un ex en PJ avec :
VB:
Private Sub Ajouter_Click()
Dim Ligne As Integer
With Sheets("Tableau")
Ligne = Sheets("Tableau").Range("A65536").End(xlUp).Row + 1
.Range(Cells(Ligne, 1), Cells(Ligne, 22)).ClearContents     ' Clear tableau Ligne, colonnes 2 à 22
.Cells(Ligne, 1) = PhaseProjet
.Cells(Ligne, 5) = Com
.Cells(Ligne, 6) = Dess
.Cells(Ligne, 7) = Met
.Cells(Ligne, 8) = Cond
.Cells(Ligne, 9) = Client
.Cells(Ligne, 10) = DossierComplet
.Cells(Ligne, 11) = ElementsManquant
.Cells(Ligne, 12) = Remarques
.Cells(Ligne, 16) = Chauffage
.Cells(Ligne, 17) = Style
.Cells(Ligne, 18) = Fondations
.Cells(Ligne, 19) = Forme
.Cells(Ligne, 20) = Vendu

' Traitement si vide qd CDate ou CDBl utilisés.
If DateDemande <> "" Then .Cells(Ligne, 2) = CDate(DateDemande)
If DateRdv <> "" Then .Cells(Ligne, 3) = CDate(DateRdv)
If Delais <> "" Then .Cells(Ligne, 4) = CDbl(Delais)
If Budget <> "" Then .Cells(Ligne, 13) = CDbl(Budget)
If SurfacePonderee <> "" Then .Cells(Ligne, 14) = CDbl(SurfacePonderee)
If Ratio <> "" Then .Cells(Ligne, 15) = CDbl(Ratio)
If PrixVente <> "" Then .Cells(Ligne, 21) = CDbl(PrixVente)
If RatioV <> "" Then .Cells(Ligne, 22) = CDbl(RatioV)

End With

If Delais <= 3 Then
Sheets("Tableau").Cells(Ligne_insertion, 4).Interior.ColorIndex = 3
Else
    If Delais <= 6 Then
    Sheets("Tableau").Cells(Ligne_insertion, 4).Interior.ColorIndex = 46
    Else
        If Delais <= 9 Then
        Sheets("Tableau").Cells(Ligne_insertion, 4).Interior.ColorIndex = 44
        Else
        Sheets("Tableau").Cells(Ligne_insertion, 4).Interior.ColorIndex = 43
        End If
    End If
End If


End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
336
Réponses
3
Affichages
518
Réponses
1
Affichages
346
Retour