Report infos USF dans un fichier, choix dernière ligne

CATA56

XLDnaute Nouveau
Bonjour le Forum,

Je suis sous EXCEL 2010 et windows7.
Grace au forum, j'ai réussi à avancer dans un projet perso mais je reste tout de même débutant.
J'ai maintenant 3 problèmes qui surviennent alors qu'ils fonctionnaient auparavant.
Je ne sais pas si j'ai le droit de poser plusieurs questions à la fois.
Si ce n'est pas acceptable merci de répondre à la première question, je verrai les 2 et 3 plus tard.

Le premier est :
A l'aide du USF lié au bouton "COMMANDE", je sélectionne un code et qui je rentre la quantité et la date.
Je dois ensuite cliquer sur le bouton en dessous "AJOUTER" pour qu'il vienne recopier les informations dans l'onglet "cf" du fichier.
Auparavant cette fonction marchait parfaitement et maintenant elle bloque sur (numLigneVide = ActiveSheet.Columns(1).Find("").Row) du code ci-dessous.
Code:
Private Sub cmdajouterligne_Click()

    Dim numLigneVide As Integer
    'on active la feuille bd contact
    worksheets("cf").Activate
    'on trouve la dernière ligne vide de la feuille pour insertion des nouvelles données et on enregsitre le numéro de la variable
    numLigneVide = ActiveSheet.Columns(1).Find("").Row ''' LE CODE SE BLOQUE ICI""" 
    'on verifie les champs obligatoires
    If ComboBox1.Text = "" Then
    MsgBox " Veuillez faire le choix d'un code article, SVP", vbCritical, "Champ manquant"
    ComboBox1.SetFocus
    ElseIf TextBox13.Text = "" Then
    MsgBox " Veuillez indiquer un PU brut, SVP", vbCritical, "Champ manquant"
    TextBox13.SetFocus
    ElseIf TextBox15.Text = "" Then
    MsgBox " Veuillez indiquer une quantité, SVP", vbCritical, "Champ manquant"
    TextBox15.SetFocus
    ElseIf TextBox22.Text = "" Then
    MsgBox " Veuillez indiquer une date de livraison au format 01/01/01, SVP", vbCritical, "Champ manquant"
    TextBox22.SetFocus

Auriez vous une solution, SVP?

Mon deuxième problème qui doit être plus simple est au niveau de la date qui est rentrée la TEXTBOX22,

Code:
Private Sub TextBox22_Change()

'aide à la saisie de la date

Dim Texte As String
Texte = TextBox22.Text
Select Case Len(Texte)
Case 2, 5
Texte = Texte & "/"
End Select
TextBox22.Text = Texte

End Sub

L'ordre qui apparaît dans la cellule copiée est non pas Jour/Moi/Année mais Moi/Jour/Année et en format texte alors que je le voudrait en format Date.
Merci la aussi, malgré la lecture de nombreuses infos sur les forums j'ai besoin d'une aide, si possible.


Mon 3° problème est issu d'un code que Robert m'a fournit (merci à nouveau en passant).
Cependant il fonctionne très bien pour les sélections "expéditeur" et "fournisseur" mais ne fonctionne pas pour le "projet".

Code:
Private Sub UserForm_initialize() 'à l'initialisation de l'UserForm 'dico pour la partie choix de projet
Set dico = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico
With Sheets("bdprojet") 'prend en compte l'onglet "bdprojet"
    Set pl = .Range("b4:b" & .Cells(Application.Rows.Count, 2).End(xlUp).Row) 'définit la plage pl
    For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
        dico(cel.Value) = "" 'alimente le dictionnaire dico
    Next cel 'prochaine cellule cel de la boucle
End With 'fin de la prise en compte de l'onglet "bdcontact"
temp = dico.keys 'récupère les éléments du dictionnaire sans doublon
    'Call tri(temp, LBound(temp, 1), UBound(temp, 1)) 'classement par ordre croissant
mdrprojet.List = temp 'alimente la combobox "Type de projet" par la liste sans doublon
Private Sub mdrprojet_Change() 'au changement dans la combobox "Type de projet"
Me.mdrphase.Clear 'vide la combobox "Phase"
Me.Listactivite.Clear 'vide la listbox "Activité"
Set dico = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico
For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
    'si la valeur de la cellule cel est égale à la valeur de la combobox "Nº de projet", alimente le dictionnaire dico
    If CStr(cel.Value) = Me.mdrprojet.Value Then dico(cel.Offset(0, 1).Value) = ""
Next cel 'prochaine cellule cel de la boucle
temp = dico.keys 'récupère les éléments du dictionnaire sans doublon
   'Call tri(temp, LBound(temp, 1), UBound(temp, 1)) 'classement par ordre croissant
mdrphase.List = temp 'alimente la combobox "Projet" par la liste sans doublon
End Sub

Private Sub mdrphase_Change() 'au changement dans la combobox "Phase"
Me.Listactivite.Clear 'vide la listbox "Activite"
If Me.mdrprojet.Value <> "" Then 'condition 1 : si la combobox "Nº de projet" n'est pas vide
    For Each cel In pl 'boucle sur toutes les cellule éditées cel de la plage pl
        'condition 2 : si le Nº de projet et la phase coïncident avec les comboboxes mdrprojet et mdrphase
        If CStr(cel.Value) = Me.mdrprojet.Value And cel.Offset(0, 1).Value = Me.mdrphase Then
            li = cel.Row 'définit la ligne li
            With Me.Listactivite 'prend en compte la listbox "Activite"
                .AddItem (cel.Offset(0, 3).Value) 'ajoute le nom à la listbox
                .Column(1, .ListCount - 1) = li 'récupère le numéro de ligne
            End With 'fin dela prise en compte le la listbox "Nom"
        End If 'fin de la condition 2
    Next cel 'prochaine cellule cel de la boucle
End If 'fin de la condition 1
End Sub

Private Sub Listactivite_Click() 'au clic dans la listbox "Activite"
With Me.Listactivite 'prend en compte la listbox "activite"
    If .Value = "" Then Exit Sub 'si le clic est fait sur une valeur vide'sort de la procédure
    li = Me.Listactivite.Column(1, .ListIndex) 'récupère le numéro de ligne li
End With 'fin de la prise en compte de la listbox "Nom"


End Sub

Je ne vois pas ou j'ai une erreur et je vous demande également un support.

Le reste de mon développement n'est pas fini et demande encore des mises aux points mais chaque chose en son temps.

Merci pour votre aide ou conseil.
A bientôt

CATA56
 

Pièces jointes

  • test8.xlsm
    247.2 KB · Affichages: 85

Robert

XLDnaute Barbatruc
Repose en paix
Re : Report infos USF dans un fichier, choix dernière ligne

Bonjour Cata, bonjour le forum,

Pour la question 1 utilise plutôt ce code :
Code:
 numLigneVide = ActiveSheet.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1
• dans sl'onglet actif, on part de la dernière ligne de la colonne 1 : ActiveSheet.Cells(Application.Rows.Count, 1)
• on remonte jusqu'à la dernière cellule éditée de la colonne : .End(xlUp)
• on récupère le numéro de ligne : .Row
• on rajoute 1 pour avoir la première ligne vide...
 

CATA56

XLDnaute Nouveau
Re : Report infos USF dans un fichier, choix dernière ligne

Bonjour Robert, Re le forum,

Ok super, c'était effectivement le problème.
Merci pour l'explication de texte.

Mon premier problème est donc résolu, merci Robert.

A bientôt

CATA56
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Report infos USF dans un fichier, choix dernière ligne

Bonsoir le fil, bonsoir le forum,

La question 2 est plus pénible et là je vais pas avoir le temps...

Pour la question 3 : tu as redéfini la plage pl entre temps et elle fait référence à l'onglet bdcontatc !...
Il te faut utiliser plusieurs variables. Non pas définies au niveau Private en haut de module mais au niveau procédure. Dans l'initialisation de l'UserForm tu auras :
Dim Pl1 As Range
dim pl2 As Range

Set pl1 = Sheets("bdcontact").Range... Etc.
Set pl2 = Sheets("bdprojet").Range... Etc.
 

CATA56

XLDnaute Nouveau
Re : Report infos USF dans un fichier, choix dernière ligne

Bonjour le fil, bonjour le Forum,

Un petit retour sur mes questions 2 et 3 infos testées depuis.

Pour la question 3 : Un grand merci à Robert pour son conseil au niveau de la modification à apporter sur pl1 et pl2.
Pour info, je l'ai fait au niveau Private et ca fonctionne également en changeant bien évidement les pl par pl1 et pl2 dans les codes suivants.

Pour la question 2 : j'ai finalement trouvé une solution intermédiaire.
J'indique dans le Controltiptext du textbox le mode d'écriture conseillé "Merci d'écrire au format (jj/mm/aa), SVP"
Et j'ajoute dans le code de rapatriement de l'info dans ma cellule le format souhaité.
ActiveSheet.Cells(numLigneVide, 27) = CDate(TextBox22.Text)

Merci au fil pour le temps consacré.

A bientôt

CATA56
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Report infos USF dans un fichier, choix dernière ligne

Bonjour Cata, bonjour le forum,

Une variable déclarée Private est utilisable pour tout le module. L'intérêt de ce genre de variable, est de ne la définir qu'une seule fois, à l'initialisation par exemple, et de pouvoir l'utiliser dans toutes les procédures du module (penser toutefois à éventuellement la réinitialiser pour éviter les surprises).
Déclarer au niveau module pour n'utiliser qu'une seule fois n'a pas vraiment d'intérêt. Je préfère dans ce cas la déclarer Dim au niveau procédure. Au moins je suis sûr qu'à la fin de la procédure ma variable cesse d'exister. Je te recommande la lecture de l'excellent travail de MDF sur les variables
ici.
 

Discussions similaires

Statistiques des forums

Discussions
311 735
Messages
2 082 024
Membres
101 873
dernier inscrit
excellllll