XL 2016 probleme incompatibilité de type

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

  • Gestion BE dev.xlsm
    29.1 KB · Affichages: 11
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...

sylvanu

XLDnaute Barbatruc
Supporter XLD
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 !!! ;)
 

Flo79

XLDnaute Nouveau
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 !
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

Flo79

XLDnaute Nouveau
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

  • Gestion BE.xlsm
    34.3 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Gestion BE.xlsm
    24.3 KB · Affichages: 3

Discussions similaires

Réponses
17
Affichages
1 K

Statistiques des forums

Discussions
311 720
Messages
2 081 923
Membres
101 840
dernier inscrit
SamynoT