cs_nanie13
Messages postés25Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention26 décembre 2007
-
23 mars 2007 à 17:22
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 2007
-
25 mars 2007 à 12:42
Bonjour,
Quelqu'un pourrait t il m'aider à finaliser mon facturier ?
Tout ce passe normalement, lorsque j'insère un nouveau client, il s'insère dans la base de données et dans la facture.
Mais lorsque c'est un ancien client, la feuille clients se sélectionne, ainsi que la colonne du nom, mais rien ne s'inscrit.
N'ayant aucune formation, je me débrouille toute seule et ce n'est pas facile.
Merci pour votre aide.
Sub Macro_00_Modification_Clients()
' MODIFICATION CLIENT
Dim Nom As String
Dim Adresse1 As String
Dim Adresse2 As String
Dim CodePostal As String
Dim Ville As String
Dim Tel As String
Nom = InputBox("Saisir nom du client")
IMPORTANT = MsgBox("Est-ce un nouveau client ?", vbYesNo + vbQuestion, "question")
If IMPORTANT = vbYes Then
' Réponse oui : nouveau client
'Remplir le reste des données
Adresse1 = InputBox("saisir la 1ère ligne de l'adresse")
Adresse2 = InputBox("saisir la 2ème ligne de l'adresse")
CodePostal = InputBox("saisir code postal")
Ville = InputBox("saisir ville")
Tel = InputBox("saisir téléphone")
' Insere dans la feuille clients
Sheets("CLIENTS").Rows(3).Insert
Sheets("CLIENTS").Range("A3").Value = Nom
Sheets("CLIENTS").Range("B3").Value = Adresse1
Sheets("CLIENTS").Range("C3").Value = Adresse2
Sheets("CLIENTS").Range("D3").Value = CodePostal
Sheets("CLIENTS").Range("E3").Value = Ville
Sheets("CLIENTS").Range("F3").Value = Tel
Else
' Réponse non : client déjà enregistré => on appel la fonction de recherche
If Not GetDonneesClient(Nom, Adresse1, Adresse2, CodePostal, Ville, Tel) Then
Call MsgBox("Ce client n'a pas été trouve", vbCritical Or vbOKOnly, "Erreur")
'Le client n'a pas été trouve on sort de la routine
Exit Sub
End If
End If
' Insère dans la feuille facture
Range("D13").Value = Nom
Range("D14").Value = Adresse1
Range("D15").Value = Adresse2
Range("D16").Value = CodePostal
Range("F16").Value = Ville
Range("D18").Value = Tel
End Sub
Public Function GetDonneesClient(ByRef NomClient As String, ByRef Adresse1 As String, ByRef Adresse2 As String, _
ByRef CodePostal As String, ByRef Ville As String, ByRef Tel As String) As Boolean
Dim NumLigne As Long
Dim Wb As Worksheet
On Error GoTo HandleError
Set Wb = ActiveWorkbook.Worksheets("CLIENTS")
'Selectionne la feuille Clients
Wb.Select
'Sélectionne la colonne A
Wb.Columns("A:A").Select
'recherche SANS sensibilité a la casse, le nom du client
'Attention si plusieurs clients avec le meme nom ce sont les
'données du premier trouvé qui sont retournées
'Récupérration du nuléro de ligne
NumLigne = Selection.Find(NomClient, ActiveCell, xlFormulas, xlPart, xlByRows, xlNext, False).Row
'Flag pour retourner TRUE si le client est trouvé
GetDonneesClient = True
'Récupération de données client
NomClient = Wb.Range("A" & NumLigne).Value
Adresse1 = Wb.Range("B" & NumLigne).Value
Adresse2 = Wb.Range("C" & NumLigne).Value
CodePostal = Wb.Range("D" & NumLigne).Value
Ville = Wb.Range("E" & NumLigne).Value
Tel = Wb.Range("F" & NumLigne).Value
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 23 mars 2007 à 20:43
Bonsoir,
1°
Après
NumLigne = Selection.Find(NomClient, ActiveCell, xlFormulas, xlPart, xlByRows, xlNext, False).Row
'Flag pour retourner TRUE si le client est trouvé
je ne comprend pas cette ligne...
Tout juste après il y' a
GetDonneesClient = True
il n' y a pas de test sur le resultat, non ?
2°
Après avoir récupérer les infos ClientTrouvé
'reproduit :
' Insère dans la feuille facture
Range("D13").Value = Nom
Range("D14").Value = Adresse1
Range("D15").Value = Adresse2
Range("D16").Value = CodePostal
Range("F16").Value = Ville
Range("D18").Value = Tel
FaroukVazaha
Messages postés42Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention11 septembre 2010 23 mars 2007 à 21:20
Salut,
Je viens d'essayer ton pgm et : pas de problème cela fonctionne, que le client soit connu ou pas.
Si rien ne s'inscrit c'est parce que le client étant déjà marqué tu réécris par dessus et donc pas de différence entre avant et après.
Le pb que j'ai trouver concerne l'insertion de ligne pour ajouter un client. En effet ta réference de facture en D13 passe en D14 car l'insertion se passe en ligne 1 et tout se décale. Sauf que tu fais à nouveau référence à D13 (ancien D12) et donc bizarerie .
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 23 mars 2007 à 21:20
c' est encore moi,
Pardon mais je crois que je me suis trompé (un peu)
Essaies plutôt ça :
Sub Macro_00_Modification_Clients()
' MODIFICATION CLIENT
Dim Nom As String
Dim Adresse1 As String
Dim Adresse2 As String
Dim CodePostal As String
Dim Ville As String
Dim Tel As String
Nom = InputBox("Saisir nom du client")
IMPORTANT = MsgBox("Est-ce un nouveau client ?", vbYesNo + vbQuestion, "question")
If IMPORTANT = vbYes Then
' Réponse oui : nouveau client
'Remplir le reste des données
Adresse1 = InputBox("saisir la 1ère ligne de l'adresse")
Adresse2 = InputBox("saisir la 2ème ligne de l'adresse")
CodePostal = InputBox("saisir code postal")
Ville = InputBox("saisir ville")
Tel = InputBox("saisir téléphone")
' Insere dans la feuille clients
Sheets("CLIENTS").Rows(3).Insert
Sheets("CLIENTS").Range("A3").Value = Nom
Sheets("CLIENTS").Range("B3").Value = Adresse1
Sheets("CLIENTS").Range("C3").Value = Adresse2
Sheets("CLIENTS").Range("D3").Value = CodePostal
Sheets("CLIENTS").Range("E3").Value = Ville
Sheets("CLIENTS").Range("F3").Value = Tel
'Else pas util dans ce cas
End If
' tu continues
''tu cherches le client, nouveau ou pas
If Not GetDonneesClient(Nom, Adresse1, Adresse2, CodePostal, Ville, Tel) Then
Call MsgBox("Ce client n'a pas été trouve", vbCritical Or vbOKOnly, "Erreur")
'Le client n'a pas été trouve on sort de la routine
Exit Sub
End If
'si on poursuit c' est donc que Get est True
' Insère dans la feuille facture
Range("D13").Value = Nom
Range("D14").Value = Adresse1
Range("D15").Value = Adresse2
Range("D16").Value = CodePostal
Range("F16").Value = Ville
Range("D18").Value = Tel
End Sub
(la fonction Get reste telle quelle est)
Mais pour une plus grande lisibilité, je te suggère de fragumenter tout ça.
Par exemple
1° une Procédure EnregistrerNouveauClient déclencher si IMPORTANT=VbYes
2° Une Fonction RechercherClient
3° Une Procédure InsertionDansFacture si RechercherClient est True
Je sais que c' est ce que tu as fais mais tu l' as fais en bloc, mais c' est mieux
si c' est modulé.
Bonne fin de soirée
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 24 mars 2007 à 03:38
Quelqu' un m'a reveillé dans mon sommeil et m' as dit
que c' était juste une question de declaration des variables.
Il m' a expliqué que les variables :
Nom ,Adresse1, Adresse2 , etc...étant déclarées privées dans
la procedure ,elles ne sont pas accessibles dans GetDonnées et par conséquent
et restent vides même si le Client est trouvé.
Solution: les declarer en dehors de Sub Macro_00_Modification_Clients()
(dans le Module)
Gardes ton code comme il est et ne changes rien,..
cs_nanie13
Messages postés25Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention26 décembre 2007 24 mars 2007 à 06:45
Bonjour,
Excusez moi, mais je ne comprends pas la réponse.
Comment dois je les déclarer en dehors de sub (dans le module).
Par contre lorsque je rajoute dans ma macro :
' Insère dans la feuille facture
Sheets("Facture n° 5").Range("D13").Value = Nom
Sheets("Facture n° 5").Range("D14").Value = Adresse1
Sheets("Facture n° 5").Range("D15").Value = Adresse2
Sheets("Facture n° 5").Range("D16").Value = CodePostal
Sheets("Facture n° 5").Range("F16").Value = Ville
Sheets("Facture n° 5").Range("D18").Value = Tel
cela s'insère dans ma facture n° 5, mais je ne connais pas la formule pour sélectionner la dernière feuille et que mes données s'inscrivent bien dans la bonne facture
Merci pour votre aide
cs_nanie13
Messages postés25Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention26 décembre 2007 24 mars 2007 à 06:45
Bonjour,
Excusez moi, mais je ne comprends pas la réponse.
Comment dois je les déclarer en dehors de sub (dans le module).
Par contre lorsque je rajoute dans ma macro :
' Insère dans la feuille facture
Sheets("Facture n° 5").Range("D13").Value = Nom
Sheets("Facture n° 5").Range("D14").Value = Adresse1
Sheets("Facture n° 5").Range("D15").Value = Adresse2
Sheets("Facture n° 5").Range("D16").Value = CodePostal
Sheets("Facture n° 5").Range("F16").Value = Ville
Sheets("Facture n° 5").Range("D18").Value = Tel
cela s'insère dans ma facture n° 5, mais je ne connais pas la formule pour sélectionner la dernière feuille et que mes données s'inscrivent bien dans la bonne facture
Merci pour votre aide
cs_nanie13
Messages postés25Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention26 décembre 2007 24 mars 2007 à 06:47
Bonjour,
Excusez moi, mais je ne comprends pas la réponse.
Comment dois je les déclarer en dehors de sub (dans le module).
Par contre lorsque je rajoute dans ma macro :
' Insère dans la feuille facture
Sheets("Facture n° 5").Range("D13").Value = Nom
Sheets("Facture n° 5").Range("D14").Value = Adresse1
Sheets("Facture n° 5").Range("D15").Value = Adresse2
Sheets("Facture n° 5").Range("D16").Value = CodePostal
Sheets("Facture n° 5").Range("F16").Value = Ville
Sheets("Facture n° 5").Range("D18").Value = Tel
cela s'insère dans ma facture n° 5, mais je ne connais pas la formule pour sélectionner la dernière feuille et que mes données s'inscrivent bien dans la bonne facture
Merci pour votre aide
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 24 mars 2007 à 11:13
Bonjour,
voici une autre solution, sans passer par un module
Sub Macro_00_Modification_Clients()
' MODIFICATION CLIENT
Dim Nom As String
Dim Adresse1 As String
Dim Adresse2 As String
Dim CodePostal As String
Dim Ville As String
Dim Tel As String
Nom = InputBox("Saisir nom du client")
IMPORTANT = MsgBox("Est-ce un nouveau client ?", vbYesNo + vbQuestion, "question")
If IMPORTANT = vbYes Then
' Réponse oui : nouveau client
'Remplir le reste des données
Adresse1 = InputBox("saisir la 1ère ligne de l'adresse")
Adresse2 = InputBox("saisir la 2ème ligne de l'adresse")
CodePostal = InputBox("saisir code postal")
Ville = InputBox("saisir ville")
Tel = InputBox("saisir téléphone")
' Insere dans la feuille clients
Sheets("CLIENTS").Rows(3).Insert ' on fait je ne comprend pas pourquoi Rows(3)
Sheets("CLIENTS").Range("A3").Value = Nom
Sheets("CLIENTS").Range("B3").Value = Adresse1
Sheets("CLIENTS").Range("C3").Value = Adresse2
Sheets("CLIENTS").Range("D3").Value = CodePostal
Sheets("CLIENTS").Range("E3").Value = Ville
Sheets("CLIENTS").Range("F3").Value = Tel
'on appelle la procédure d' insertion
InsereDansFacture Nom, Adresse1, Adresse2, CodePostal, Ville, Tel
Else
If Not GetDonneesClient(Nom, Adresse1, Adresse2, CodePostal, Ville, Tel) Then
Call MsgBox("Ce client n'a pas été trouve", vbCritical Or vbOKOnly, "Erreur")
'Avertir que Le client n'a pas été trouvé et donc il n' y a pas eu d' insertion de facture
'dans le cas contraire l' insertion a été effectuée au sein de le fonction GetDonnées
End If
End If
End Sub
Public Function GetDonneesClient(ByRef Nom As String, ByRef Adresse1 As String, ByRef Adresse2 As String, _
ByRef CodePostal As String, ByRef Ville As String, ByRef Tel As String) As Boolean
Dim NumLigne As Long
Dim Wb As Worksheet
On Error GoTo HandleError
Set Wb = ActiveWorkbook.Worksheets("CLIENTS")
'Selectionne la feuille Clients
Wb.Select
'Sélectionne la colonne A
Wb.Columns("A:A").Select
'recherche SANS sensibilité a la casse, le nom du client
'Attention si plusieurs clients avec le meme nom ce sont les
'données du premier trouvé qui sont retournées
'Récupérration du nuléro de ligne
NumLigne = Selection.Find(NomClient, ActiveCell, xlFormulas, xlPart, xlByRows, xlNext, False).Row
'Flag pour retourner TRUE si le client est trouvé
GetDonneesClient = True
'Récupération de données client
Nom = Wb.Range("A" & NumLigne).Value
Adresse1 = Wb.Range("B" & NumLigne).Value
Adresse2 = Wb.Range("C" & NumLigne).Value
CodePostal = Wb.Range("D" & NumLigne).Value
Ville = Wb.Range("E" & NumLigne).Value
Tel = Wb.Range("F" & NumLigne).Value
'on appelle la procédure d' insertion
InsererDansFacture Nom, Adresse1, Adresse2, CodePostal, Ville, Tel
Exit Function
HandleError:
End Function
' à ajouter
Sub InsererDansFacture(ByRef Nom As String, ByRef Adresse1 As String, ByRef Adresse2 As String, _
ByRef CodePostal As String, ByRef Ville As String, ByRef Tel As String)
'pour résoudre le problème de la feuille facture
tu ajoutes une variable NomFeuille de type String et que tu définis comme ceci
Dim NumFeuille As String
NomFeuille="Facture n° " & LeNumeroCourant '( le 5 dans l' exemple)
'LeNumeroCourant peut être passé comme paramètre à la procédure
' Insère dans la feuille facture
Sheets(NomFeuille).Range("D13").Value = Nom
Sheets(NomFeuille).Range("D14").Value = Adresse1
Sheets(NomFeuille).Range("D15").Value = Adresse2
Sheets(NomFeuille).Range("D16").Value = CodePostal
Sheets(NomFeuille).Range("F16").Value = Ville
Sheets(NomFeuille).Range("D18").Value = Tel
EndSub
Voilà , j' espère que ça t' aidera, sinon n' hésites pas à
demander...
cs_nanie13
Messages postés25Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention26 décembre 2007 25 mars 2007 à 10:49
Bonjour,
Excusez moi, je suis débutante et je patauge dans la choucroute.....
J'ai donc ajouté cette macro, mais peut être pas au bon endroit.
Après plusieurs essais infructueux, j'en suis toujours au même point.
Je vous joins ma macro :
Sub Macro_02_Modification_Clients()
Dim Nom As String
Dim Adresse1 As String
Dim Adresse2 As String
Dim CodePostal As String
Dim Ville As String
Dim Tel As String
Dim Nom Feuille
Nom = InputBox("Saisir nom du client")
NomFeuille = "Facture n° " & LeNumeroCourant
IMPORTANT = MsgBox("Est-ce un nouveau client ?", vbYesNo + vbQuestion, "question")
If IMPORTANT = vbYes Then
' Réponse oui : nouveau client
'Remplir le reste des données
Adresse1 = InputBox("saisir la 1ère ligne de l'adresse")
Adresse2 = InputBox("saisir la 2ème ligne de l'adresse")
CodePostal = InputBox("saisir code postal")
Ville = InputBox("saisir ville")
Tel = InputBox("saisir téléphone")
' Insere dans la feuille clients
Sheets("CLIENTS").Rows(2).Insert
Sheets("CLIENTS").Range("A3").Value = Nom
Sheets("CLIENTS").Range("B3").Value = Adresse1
Sheets("CLIENTS").Range("C3").Value = Adresse2
Sheets("CLIENTS").Range("D3").Value = CodePostal
Sheets("CLIENTS").Range("E3").Value = Ville
Sheets("CLIENTS").Range("F3").Value = Tel
' Insère dans la feuille facture
Range("D13").Value = Nom
Range("D14").Value = Adresse1
Range("D15").Value = Adresse2
Range("D16").Value = CodePostal
Range("F16").Value = Ville
Range("D18").Value = Tel
' LA MACRO FONCTIONNE NORMALEMENT JUSQUE LA
' LE NOUVEAU CLIENT EST BIEN PRIS EN COMPTE
' TOUT S'INSCRIT DANS LA NOUVELLE FACTURE
Else
' Réponse non : client déjà enregistré => on appel la fonction de recherche
If Not GetDonneesClient(Nom, Adresse1, Adresse2, CodePostal, Ville, Tel) Then
Call MsgBox("Ce client n'a pas été trouve", vbCritical Or vbOKOnly, "Erreur")
'Le client n'a pas été trouve on sort de la routine
Exit Sub
End If
' Insère dans facture
' IL NE ME MANQUE QUE LE CODE POUR SELECTIONNER
' LA DERNIERE FEUILLE DE MON CLASSEUR
' POUR QUE LE CLIENT SOIT PRIS EN COMPTE
' ET QUE LE TOUT S'INSCRIVE DANS LA NOUVELLE FACTURE
Sheets(NomFeuille).Range("D13").Value = Nom
Sheets(NomFeuille).Range("D14").Value = Adresse1
Sheets(NomFeuille).Range("D15").Value = Adresse2
Sheets(NomFeuille).Range("D16").Value = CodePostal
Sheets(NomFeuille).Range("F16").Value = Ville
Sheets(NomFeuille).Range("D18").Value = Tel
End If
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 25 mars 2007 à 11:46
Bonjour,
le problème vient du fait que pour chercher un Client éxistant,
tu changes de feuille.Et donc tu n' est plus dans la feuille facture,
mais dans celle de Clients.
Ainsi dans GetDonnees....il y' a ceci
Dim Wb As Worksheet
On Error GoTo HandleError
Set Wb = ActiveWorkbook.Worksheets("CLIENTS")
'Selectionne la feuille Clients
Wb.Select
Ce qu' il faudrait donc c' est revenir à la feuille facture après avoir trouvé.
et donc ta Macro deviendrait:
Sub Macro_02_Modification_Clients()
Dim Nom As String
Dim Adresse1 As String
Dim Adresse2 As String
Dim CodePostal As String
Dim Ville As String
Dim Tel As String
Dim Nom Feuille
Nom = InputBox("Saisir nom du client")
NomFeuille = "Facture n° " & LeNumeroCourant
IMPORTANT = MsgBox("Est-ce un nouveau client ?", vbYesNo + vbQuestion, "question")
If IMPORTANT = vbYes Then
' Réponse oui : nouveau client
'Remplir le reste des données
Adresse1 = InputBox("saisir la 1ère ligne de l'adresse")
Adresse2 = InputBox("saisir la 2ème ligne de l'adresse")
CodePostal = InputBox("saisir code postal")
Ville = InputBox("saisir ville")
Tel = InputBox("saisir téléphone")
' Insere dans la feuille clients
Sheets("CLIENTS").Rows(2).Insert
Sheets("CLIENTS").Range("A3").Value = Nom
Sheets("CLIENTS").Range("B3").Value = Adresse1
Sheets("CLIENTS").Range("C3").Value = Adresse2
Sheets("CLIENTS").Range("D3").Value = CodePostal
Sheets("CLIENTS").Range("E3").Value = Ville
Sheets("CLIENTS").Range("F3").Value = Tel
' Insère dans la feuille facture
Range("D13").Value = Nom
Range("D14").Value = Adresse1
Range("D15").Value = Adresse2
Range("D16").Value = CodePostal
Range("F16").Value = Ville
Range("D18").Value = Tel
Else
' Réponse non : client déjà enregistré => on appel la fonction de recherche
If Not GetDonneesClient(Nom, Adresse1, Adresse2, CodePostal, Ville, Tel) Then
Call MsgBox("Ce client n'a pas été trouve", vbCritical Or vbOKOnly, "Erreur")
'Le client n'a pas été trouve on sort de la routine
Exit Sub
End If
' tu es encore sur la feuille clients
'>> 'revenir à la feuille facture
Dim Wb As Worksheet
Set Wb = ActiveWorkbook.Worksheets(NomFeuille)
'Selectionne la feuille facture
Wb.Select
'>>
Sheets(NomFeuille).Range("D13").Value = Nom
Sheets(NomFeuille).Range("D14").Value = Adresse1
Sheets(NomFeuille).Range("D15").Value = Adresse2
Sheets(NomFeuille).Range("D16").Value = CodePostal
Sheets(NomFeuille).Range("F16").Value = Ville
Sheets(NomFeuille).Range("D18").Value = Tel
End If
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 25 mars 2007 à 12:42
il faudrait aussi avoir le NomFeuille
Nom = InputBox("Saisir nom du client")
<strike>'NomFeuille = "Facture n° " & LeNumeroCourant</strike> 'asupprimer
et juste avant de selectionner cette feuille
' tu es encore sur la feuille clients
'ICI =<>
Dim NumFacture As String
Dim NomFeuille aS String
'Saisir le numero courant pour composer le NomFeuille
NumFacture = InputBox("Saisir le numéro courant")
NomFeuille="Facture n° :" & NumFacture
'Maintenant ta feuille est désignée
'>> 'revenir à la feuille facture
'copies ces lignes et insères les dans l' emplacement indiqué