Problème dans écriture de macro

mathieu.cxp

XLDnaute Nouveau
Bonjour à tous.

Je suis en train d'écrire une macro pour mon fichier de suivit d'offres, et je rencontre un soucis dans son écriture. J'ai fouiné sur le net, mais j'ai pas trouvé où se situe mon erreur. J'ai cherché sur le forum, idem :-/

Je pense qu'il s'agit d'une erreur d'inatention, ou de quelque chose de basic, mais je coince, et quand ça veut pas... ça veut pas.

Je vous explique, c'est somme toute assez simple :
J'ai des données enregistrée en ligne (et pas en colones...), qui comportent la date de l'offre, le pays, le client, l'application...etc.
J'ai donc fait un formulaire de saisie, avec des textbox, et des listes déroulantes.

Lorsque je clique sur le bouton valider, il bloque à la première ligne, et je vois vraiment pas pourquoi ???

Code:
Private Sub VALIDQUOTE_Click()
APPLICATION.ScreenUpdating = True

'on sélectionne la feuille de suivit des commandes
Sheets("OFFRES").Select
'on repère quelle est la dernière ligne vide, et on s'y place
derligne = Sheets("OFFRES").Range("A65000").End(xlUp).Row + 1

'on met les valeurs des textbox dans les cellules correspondantes
Range("A" & derligne).Value = QUOTE_NUMBER.Value
Range("c" & derligne).Value = DTPicker2.Value
Range("e" & derligne).Value = COUNTRY.Value
Range("g" & derligne).Value = CUSTOMER.Value
Range("h" & derligne).Value = APPLICATION.Value
Range("i" & derligne).Value = FAMILLE.Value
Range("j" & derligne).Value = P_TYPE.Value
Range("k" & derligne).Value = DESCRIPTION.Value
Range("l" & derligne).Value = CODE.Value
Range("m" & derligne).Value = QUANTITE.Value
Range("p" & derligne).Value = ICP_PRICE.Value
Range("q" & derligne).Value = CUSTOMER_PRICE.Value

QUOTE_NUMBER.Value = ""
COUNTRY.Value = ""
CUSTOMER.Value = ""
APPLICATION.Value = ""
FAMILLE.Value = ""
P_TYPE.Value = ""
DESCRIPTION.Value = ""
CODE.Value = ""
QUANTITE.Value = ""
ICP_PRICE.Value = ""
CUSTOMER_PRICE.Value = ""
        
APPLICATION.ScreenUpdating = True
Sheets("OFFRES").Select
VALID_QUOTE.Caption.Value = True
NEW_QUOTE.Hide
End Sub

Private Sub CANCELQUOTE_Click()
NEW_QUOTE.Hide
End Sub
Private Sub Userform_QueryClose(Cancel As Integer, CloseMode As Integer)
      If CloseMode = vbFormControlMenu Then Cancel = True
End Sub

Je vous joint le fichier excel, complètement épuré pour que vous soyez pas perturbés par des données à coté. Si je pige le principe, je pourrais me débrouiller pour faire la suite :yes:

Question complémentaire :
Dans la première colonne (ou une autre d'ailleurs, peut importe...), je voudrais mettre un numéro d'offre automatique :
Année / Abréviation Pays / abréviation Utilisateur / numéro incrémenté

Est-ce que vous pourriez m'expliquer comment faire celà ?

Pour lancer la macro : double clic dans une des case de la colonne A :)
 

Pièces jointes

  • exemple mathieu.zip
    24.2 KB · Affichages: 30
  • exemple mathieu.zip
    24.2 KB · Affichages: 31
  • exemple mathieu.zip
    24.2 KB · Affichages: 33
G

Guest

Guest
Re : Problème dans écriture de macro

Bonjour MAtthieu,

Pour la première question:

tu as un combobox qui s'appelle APPLICATION qui est un nom réservé par le VBA. Il ne faut donc pas l'utiliser comme nom d'objet.

Tu peux changer ton nom de combobox en "cbAPPLICATION" et cela passera si tu change également toute référence à ce nom (cbAPPLICATION)

De plus tu n'as peut-être pas besoin de mettre des Application.ScreenUdating=true un peu partout étant donné que c'est la valeur par défaut.

Pour la deuxième question, ça va venir
A bientôt
 
G

Guest

Guest
Re : Problème dans écriture de macro

Re bonjour Mathieu,

Pour la deuxième question:

Questions:

1 - où se trouvent les abréviation Pays
2 - où se trouvent les abréviation Utilisateur
2.1 - de quel utilisateur parles-tu (utilisateur système?)?

Pour l'utilsateur système tu as une variable d'environnement que tu peux extraire par la fonction 'Environ()'

Utilisateur=environ("USERNAME")

Mais cela donne le nom complet de l'utilisateur, pas une abréviation.

A bientôt
 

mathieu.cxp

XLDnaute Nouveau
Re : Problème dans écriture de macro

je me disait bien qu'il y avait un soucis avec ce nom application :jap:

Merci beaucoup.

Les abbréviation de pays : oups, oublié de les mettre. En général, c'est 2 lettre (FR, DE, SW, NO, UK, US, CA, IT, SP....) et le nom d'utilisateur : je pense pouvoir me débrouiller avec ce que tu m'a donné :)

Merci beaucoup pour ton aide :)

Question complémentaire (maintenant que ça fonctionne, je vais plus loin :) ) : Comment faire un formulaire de modification d'une offre ?
Faire un userform qui choope les données, les mette dans le userform_modif de façon automatique, oui... mais après ??? il suffit de modifier un des champs de ce formulaire de modif pour que la nouvelle valeur soit prise en compte ???
 
G

Guest

Guest
Re : Problème dans écriture de macro

Re Mathieu,

Oui bien-sûr il y a moyen de le faire (en utilisant les controlsource et autre RowSource) mais cela est souvent générateur de d'erreurs de programmation et de complication. Sans parler des erreurs dues aux saisie utilisateur.

Dans il fichier joint tu trouveras un exemple de ce qu'il est possible de faire pour que le userform affiche toujours l'offre sur laquelle l'utilisateur se positionne.

Ce qui a changé:

1 - Introduction d'une variable publique shSource dans le userform qui référence la feuille "OFFRES" et peut gérer les interventions de l'utilisateur.
Si l'utilisateur clique dans une ligne la fiche reflète la nouvelle offre si la colonne A contient un QUOTE_NUMBER.

2 - Une procédure privée 'ChargeOffre' dans le userform pour charger les information à partir de la feuille source.

3 - La propiété Modal du userForm est à False

4 - L'appel au userForm sur évènement DoubleClick de la feuille "OFFRES"

Bien-sûr tout ceci est un exemple, et n'est pas blindé pour une utilisation optimale(Restriction à la plage utiles de la feuille, contrôles des saisie, enregistrement des changements etc...)

A toi à partir de là d'imaginer la suite et de revenir sur le forum si tu as des problèmes particuliers.

A bientôt
 

mathieu.cxp

XLDnaute Nouveau
Re : Problème dans écriture de macro

Super, merci beaucoup :)

Pour l'enregistrement des données une fois les modifs faites, je suppose qu'il faut passer par le même principe que pour l'enregistrement "simple " :) (affectation de la valeur du textbox à la cellule correspondante )

Je reviendrait sur le forum si besoin est :yes:
 
G

Guest

Guest
Re : Problème dans écriture de macro

Bonjour mathieu, Le forum,

Oui t'as tout compris.

Par mesure de sureté, lors de l'enregistrement des modifications d'une offre, tu peux comparer le QUOTE_NUMBER affiché sur le userform et celui de la ligne active de la feuille.

A bientôt
 
G

Guest

Guest
Re : Problème dans écriture de macro

Mathieu,

Oui si les deux ne sont pas identiques, c'est qu'il c'est passé quelque chose en cours d'édition de la feuille.

C'est peut-être pas mathieu qui a foiré, c'est p'tet ben VBA:)

Normalement cela ne devrait pas se produire mais il vaut mieux se méfier quand la cohérence des données et très importante, au moins pendant la phase de test.

A bientôt
 

mathieu.cxp

XLDnaute Nouveau
Re : Problème dans écriture de macro

bon, j'en suis arrivé à peut près ou je voulais pour certaines choses, mais pour d'autre, je bloque complètement.

Exemple :
Toujours avec le même fichier de base :
Je voudrais créer un code à partir du pays. J'ai ma liste déroulante du pays, et je voudrais faire l'équivalent d'une rechercheV mais en macro, et là... je coince.

Pour l'instant, j'ai quelque chose du genre :
Code:
tbCOUNTRY.Value = "=VLOOKUP(COUNTRY.Value,TABLE_COUNTRY,2)"
Range("r" & derligne).Value = tbCOUNTRY.Value

Sachant que
COUNTRY est une des listes déroulante de mon userform.
TABLE_COUNTRY est ma table de recherche de PAYS
tbCOUNTRY est un TextBox de mon userform.

Mais quand je lance la macro, tout se passe bien, et le résultat est #NOM !
En fait, je pense qu'il ne fait pas la recherche correctement, mais je ne comprend pas pourquoi ???

Merci d'avance pour votre aide précieuse :)
 
G

Guest

Guest
Re : Problème dans écriture de macro

Bonjour Mathieu,

Pas besoin de vlookup, puisque ta combobox.RowSource est egale à TABLE_COUNTRY, tu peux retrouver facilement les données:

Private Sub COUNTRY_CLick() ' ou Change() au choix
'Si le choix est dans la liste
If COUNTRY.ListIndex > -1 Then

tbCOUNTRY= Range("TABLE_COUNTRY").Cells(COUNTRY.ListIndex + 1, 2)
End If
End Sub

Où 2 est le numéro de colonne de TABLE_COUNTRY où se trouve la donnée à retourner (le code je crois. Non?). C'est pas important que le nom TABLE_COUNTRY contienne la colonne en question ou non.

Si tu veux absolument un VLOOKUP, sache qu'il s'utilise ainsi dans VBA:
Dim Resultat as variant
Resultat=Application.WorksheetFunction.VLOOKUP(ValeurCherchée,Range("TABLE_COUNTRY"),2)
If not IsError(Resultat) then tbCountry=Resultat

Ce qui est plus compliqué et plus aléatoire.

A bientôt


A bientôt
 

mathieu.cxp

XLDnaute Nouveau
Re : Problème dans écriture de macro

:)

Rhooo...
Et en plus, ça marche ! ! !:D

Super, vraiment merci beaucoup...

DErnière question et je pense avoir fini ...

Comment concaténer des données pour les envoyer dans une cellule ? (pour faire un numéro d'offre en fonction des paramètres de liste :yes: )

Dim i as integer
'boucle de calcul du numéro de i
tbOFFRE = (Date(année) && "/" && tbCOUNTRY && "/" && tbUSER && i)
Range("a" & derligne).Value = tbOFFRE

ça parait pas mal ça ?
Je sais pas comment on déclare les ajouts dans VBA:(:confused:

Merci en tout cas pour ton aide super ultra précieuse ::):cool:
 

Statistiques des forums

Discussions
312 305
Messages
2 087 078
Membres
103 455
dernier inscrit
saramachado