[VBA] Nommer une nouvelle feuille excel d'après InputBox et compteur

Nommer une nouvelle feuille excel d'après InputBox et compteur [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 23-02-2009 à 15:03:50    

Bonjour,
 
Je débute en vba et pour mon employeur j'essaye de créer un fichier de gestion de clients avec excel 2007
 
Ma première feuille me permet de visualiser tous les clients (un par ligne) mais aussi d'ajouter de nouveau client.
 
J'ai donc créer un bouton lançant une macro créant une nouvelle ligne client ainsi qu'une nouvelle feuille que j'aimerai mettre au nom du client et avec déjà des cellules préremplies. Des InputBox viennent demander les informations dont on a besoin.
 
Mes soucis :
 
1) Mauvais affichage quand je colle ma copie de feuille modèle, les cellules ne prennent pas la même mise en forme du modèle.
2) Je n'arrive pas à renommer ma feuille à l'aide de l'InputBox "nom du client ?".
 
Mon code bancale :
 

Citation :

Sub Nouvelle_fiche()
'
' Nouvelle_fiche Macro
'
 
'
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets("Modèle fiche Client" ).Select
    Cells.Select
    Selection.Copy
    Sheets(Sheets.Count).Select
    Cells.Select
    ActiveSheet.Buttons.Add(2.25, 26.25, 87, 12).Select
    ActiveSheet.Paste
    ActiveWindow.Zoom = 62
     
Dim d1, d2, d3, d4, d5, d6, d7, d8
 
d1 = InputBox("Nom du Client ?" )
d2 = InputBox("Code postale ?" )
d3 = InputBox("Ville ?" )
d4 = InputBox("N° et Rue du Client ?" )
d5 = InputBox("Nom du Contact ?" )
d6 = InputBox("N° de Tél ?" )
d7 = InputBox("N° de Fax ?" )
d8 = InputBox("adresse email ?" )
 
Range("A1" ) = d1
Range("C1" ) = d2
Range("D1" ) = d3
Range("B1" ) = d4
Range("E1" ) = d5
Range("F1" ) = d6
Range("G1" ) = d7
Range("H1" ) = d8
End Sub


 
Deuxième macro et encore des soucis... celle-ci se situe dans mes fiches clients, elle me permet de créer des n° d'affaire encore une fois à partir d'InputBox. Là ça marche, sauf :
 
1) comment indiquer de remplir la dernière ligne vide
2) J'aimerai intégrer un compteur dans mon numéro d'affaire automatique entre les initiales et la date de type 00, 01, 02,... au fur et à mesure qu'on ajoute des affaires. De plus dès que le mois est terminé, repartir à 0 sur ce compteur.
 
Mon code moins bancale mais incomplet :
 

Citation :

Sub Ajout_affaire()
Dim d1, d2, d3, d4
 
d1 = InputBox("Vos initiales ? (en majuscules)" )
d2 = InputBox("Section analytique ? (ex : 01, 06, 15)" )
d3 = InputBox("Objet du devis ou de la commande ?" )
d4 = InputBox("N° de commande Client ? (s'il y a)" )
 
Range("A6" ) = d1
Range("C6" ) = d2
Range("D6" ) = d3
Range("E6" ) = d4
Range("B6" ) = d2 + ("/" ) + d1 + ("/" ) + Format(Date, "mm/yy" )
 
    ActiveCell.Select
End Sub


Message édité par Cedric apf le 23-02-2009 à 15:08:16
Reply

Marsh Posté le 23-02-2009 à 15:03:50   

Reply

Marsh Posté le 23-02-2009 à 16:39:59    

Pour mon premier problème j'ai résolu le nom automatique de ma nouvelle feuille.
 
Reste le problème d'affichage. Par contre j'ai un peu changé ma méthode, je copie d'abord mes boites de dialogues dans ma feuille regroupant tous les clients puis après je les recopie dans ma nouvelle feuille. Mais maintenant il faut que je trouve comment insérer les informations à la première ligne vide.
 
Pour ma deuxième macro, je n'ai pas avancé depuis tout à l'heure...
 
Voici ma nouvelle 1ère macro avec problème d'affichage sur la feuille créée.
 

Citation :

Sub Nouvelle_fiche()
'
' Nouvelle_fiche Macro
'
Dim d1, d2, d3, d4, d5, d6, d7
 
d1 = InputBox("Nom du Client ?" )
d2 = InputBox("Code postale ?" )
d3 = InputBox("Ville ?" )
d4 = InputBox("N° et Rue du Client ?" )
d5 = InputBox("Nom du Contact ?" )
d6 = InputBox("N° de Tél ? (Sans espace ni tiret)" )
d7 = InputBox("N° de Fax ? (Sans espace ni tiret)" )
d8 = InputBox("adresse email ?" )
 
Range("A4" ) = d1
Range("C4" ) = d2
Range("D4" ) = d3
Range("B4" ) = d4
Range("E4" ) = d5
Range("F4" ) = d6
Range("G4" ) = d7
Range("H4" ) = d8
 
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = d1
    Sheets("Modèle fiche Client" ).Select
    Cells.Select
    Selection.Copy
    Sheets(d1).Select
    Cells.Select
    ActiveSheet.Buttons.Add(2.25, 26.25, 87, 12).Select
    ActiveSheet.Paste
    ActiveWindow.Zoom = 62    
 
End Sub


Reply

Marsh Posté le 23-02-2009 à 17:02:42    

Je viens de comprendre mon problème d'affichage. En fait ce que je colle est une image de ma feuille et non pas les cellule et leurs contenus... Mais je ne comprends pas pourquoi...


Message édité par Cedric apf le 23-02-2009 à 17:06:45

---------------
Dur dur les macros...
Reply

Marsh Posté le 23-02-2009 à 17:41:04    

Voici mon nouveau code. Mon vrai gros problème à présent c'est d'écrire à la ligne suivant la dernière remplie.
 

Citation :

Sub Nouvelle_fiche()
'
' Nouvelle_fiche Macro
'
Dim d1, d2, d3, d4, d5, d6, d7, d8
 
d1 = InputBox("Nom du Client ?" )
d2 = InputBox("Code postale ?" )
d3 = InputBox("Ville ?" )
d4 = InputBox("N° et Rue du Client ?" )
d5 = InputBox("Nom du Contact ?" )
d6 = InputBox("N° de Tél ? (Sans espace ni tiret)" )
d7 = InputBox("N° de Fax ? (Sans espace ni tiret)" )
d8 = InputBox("adresse email ?" )
 
Range("A4" ) = d1
Range("C4" ) = d2
Range("D4" ) = d3
Range("B4" ) = d4
Range("E4" ) = d5
Range("F4" ) = d6
Range("G4" ) = d7
Range("H4" ) = d8
 
 
     
    Sheets("Modèle fiche Client" ).Select
    Range("A1:H5" ).Select
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = d1
    ActiveSheet.Paste
    Columns("A:A" ).ColumnWidth = 36.43
    Columns("I:I" ).ColumnWidth = 24.57
    Columns("G:G" ).ColumnWidth = 30
    Columns("F:F" ).ColumnWidth = 34.14
    Columns("E:E" ).ColumnWidth = 32.86
    Columns("D:D" ).ColumnWidth = 44.71
    Columns("C:C" ).ColumnWidth = 19.86
    Columns("B:B" ).ColumnWidth = 30.57
    Rows("1:1" ).RowHeight = 31.5
    Rows("2:44750" ).Select
    Selection.RowHeight = 39.75
    ActiveWindow.Zoom = 62
    Columns("H:H" ).ColumnWidth = 24.57
    Range("A1" ).Select
     
Range("A1" ) = d1
Range("C1" ) = d2
Range("D1" ) = d3
Range("B1" ) = d4
Range("E2" ) = d5
Range("F2" ) = d6
Range("G2" ) = d7
Range("H1" ) = d8
 
End Sub


---------------
Dur dur les macros...
Reply

Marsh Posté le 24-02-2009 à 11:50:32    

Bon bah moi je continue mon petit bonhomme de chemin, je vous fais part de mes solutions si ça peut aider d'autres débutants comme moi.
 
Pour ma 1ère macro j'en ai presque fini. Ce qui me manque maintenant ce serait de créer au sein de la macro, un lien dans la feuille "Base Clients", depuis la cellule Nom du Client (le résultat de l'InputBox d1 dans ma colonne A) qui ouvrirait la feuille du client créée en automatique au sein de cette même macro.
 
Voici ma macro :
 

Citation :

Sub Nouvelle_fiche()
'
' Nouvelle_fiche Macro
'
Dim d1, d2, d3, d4, d5, d6, d7, d8
 
d1 = InputBox("Nom du Client ?" )
d2 = InputBox("Code postale ?" )
d3 = InputBox("Ville ?" )
d4 = InputBox("N° et Rue du Client ?" )
d5 = InputBox("Nom du Contact ?" )
d6 = InputBox("N° de Tél ? (Sans espace ni tiret)" )
d7 = InputBox("N° de Fax ? (Sans espace ni tiret)" )
d8 = InputBox("adresse email ? (nc si non-communiquée)" )
 
Range("A65536" ).End(xlUp).Offset(1, 0).Value = d1
Range("C65536" ).End(xlUp).Offset(1, 0).Value = d2
Range("D65536" ).End(xlUp).Offset(1, 0).Value = d3
Range("B65536" ).End(xlUp).Offset(1, 0).Value = d4
Range("E65536" ).End(xlUp).Offset(1, 0).Value = d5
Range("F65536" ).End(xlUp).Offset(1, 0).Value = d6
Range("G65536" ).End(xlUp).Offset(1, 0).Value = d7
Range("h65536" ).End(xlUp).Offset(1, 0).Value = d8
     
    Sheets("Modèle fiche Client" ).Select
    Range("A1:H5" ).Select
    Selection.Copy
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = d1
    ActiveSheet.Paste
    ActiveSheet.Move Before:=Sheets(3)
 
    Columns("A:A" ).ColumnWidth = 36.43
    Columns("I:I" ).ColumnWidth = 24.57
    Columns("G:G" ).ColumnWidth = 30.57
    Columns("F:F" ).ColumnWidth = 30.57
    Columns("E:E" ).ColumnWidth = 32.86
    Columns("D:D" ).ColumnWidth = 44.71
    Columns("C:C" ).ColumnWidth = 19.86
    Columns("B:B" ).ColumnWidth = 30.57
    Rows("1:1" ).RowHeight = 31.5
    Rows("2:44750" ).Select
    Selection.RowHeight = 39.75
    ActiveWindow.Zoom = 62
    Columns("H:H" ).ColumnWidth = 57.29
    Range("A1" ).Select
     
Range("A1" ) = d1
Range("C1" ) = d2
Range("D1" ) = d3
Range("B1" ) = d4
Range("E2" ) = d5
Range("F2" ) = d6
Range("G2" ) = d7
Range("H2" ) = d8
 
End Sub


 
 
Cependant pour ma deuxième macro ou je souhaite intégrer un compteur au sein d'autres éléments dans une cellule en gros avoir un résultat comme ci-dessous, je n'ai pas avancé :  
 

Citation :

Sub Ajout_affaire()
 
Dim d1, d2, d3, d4
 
d1 = InputBox("Vos initiales ? (en majuscules)" )
d2 = InputBox("Section analytique ? (ex : 01, 06, 15)" )
d3 = InputBox("Objet du devis ou de la commande ?" )
d4 = InputBox("N° de commande Client ? (Si pas encore de commande, inscrire NC)" )
 
Range("A65536" ).End(xlUp).Offset(1, 0).Value = d1
Range("C65536" ).End(xlUp).Offset(1, 0).Value = d2
Range("D65536" ).End(xlUp).Offset(1, 0).Value = d3
Range("E65536" ).End(xlUp).Offset(1, 0).Value = d4
Range("B65536" ).End(xlUp).Offset(1, 0).Value = d2 + ("/" ) + d1 + ("/" ) + ICI JE SOUHAITE UN COMPTEUR QUI S'INITIALISE AU DÉBUT DE CHAQUE MOIS + ("/" ) + Format(Date, "mm/yy" )
 
Rows("6:6" ).Select
    Selection.Copy
    Rows("65536:65536" ).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
 
End Sub


Message édité par Cedric apf le 26-02-2009 à 10:35:14
Reply

Marsh Posté le 26-02-2009 à 16:26:56    

J'ai finalement trouvé une solution à mon problème de compteur. J'ai rusé ;) En fait j'ai dédié une cellule masquée et je l'incrémente à +1 chaque fois que je clique sur mon bouton d'ajout d'affaire. Ensuite j'ai appelé le texte de cette cellule d5, ainsi j'ai replacé mon d5 dans mon numéro d'affaire voulu. Maintenant il faut que je fasse un raz de cette cellule masquée à chaque 1er jour de chaque mois.
 
Voici ma deuxième macro avec comptage :
 

Citation :

Sub Ajout_affaire_2()
 
Range("A4" ).Value = Range("A4" ).Value + 1
 
Dim d1, d2, d3, d4, d5
 
d1 = InputBox("Vos initiales ? (en majuscules)" )
d2 = InputBox("Section analytique ? (ex : 01, 06, 15)" )
d3 = InputBox("Objet du devis ou de la commande ?" )
d4 = InputBox("N° de commande Client ? (Si pas encore de commande, inscrire NC)" )
d5 = Range("A4" ).Text
 
 
Range("A65536" ).End(xlUp).Offset(1, 0).Value = d1
Range("C65536" ).End(xlUp).Offset(1, 0).Value = d2
Range("D65536" ).End(xlUp).Offset(1, 0).Value = d3
Range("E65536" ).End(xlUp).Offset(1, 0).Value = d4
Range("B65536" ).End(xlUp).Offset(1, 0).Value = d2 + ("/" ) + d1 + ("/" ) + d5 + ("/" ) + Format(Date, "mm/yy" )
 
Rows("6:6" ).Select
    Selection.Copy
    Rows("65536:65536" ).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
 
End Sub


Message édité par Cedric apf le 26-02-2009 à 16:41:49

---------------
Dur dur les macros...
Reply

Marsh Posté le 09-03-2009 à 16:11:22    

Je continue à filer mes trouvailles.
 
Pour la seconde macro, j'ai réussi à demander une remise à zéro de ma cellule de comptage à chaque changement de mois. Il suffit de placer la date dans une cellule et ensuite à chaque nouvelle affaire que je créé, cette cellule est comparée par rapport à la date du jour et ensuite il faut bien entendu réenregistrer la nouvelle date dans la cellule "date" => D1 dans mon cas ;)
 

Citation :

Sub Ajout_affaire_2()
 
Dim d0 As String
 
d0 = Range("A1" ).Text
Range("A1" ) = ActiveSheet.Name
 
Sheets("Base Clients" ).Select
 
   Dim zone As Range, r As Range
    Set zone = Worksheets("Base Clients" ).Range("D1" )
    If Month(Range("F1" ).Value) <> Month(Date) Then
        For Each r In zone
            r.Value = 0
        Next
    Range("F1" ).Value = Date
    End If
 
 
Range("D1" ).Value = Range("D1" ).Value + 1

 
Dim d5
d5 = Range("D1" ).Text
 
Sheets(d0).Select
 
Dim d1, d2, d3, d4
 
d1 = InputBox("Vos initiales ? (en majuscules)" )
d2 = InputBox("Section analytique ? (ex : 01, 06, 15)" )
d3 = InputBox("Objet du devis ou de la commande ?" )
d4 = InputBox("N° de commande Client ? (Si pas encore de commande, inscrire NC)" )
 
 
 
Range("A65536" ).End(xlUp).Offset(1, 0).Value = d1
Range("C65536" ).End(xlUp).Offset(1, 0).Value = d2
Range("D65536" ).End(xlUp).Offset(1, 0).Value = d3
Range("E65536" ).End(xlUp).Offset(1, 0).Value = d4
Range("B65536" ).End(xlUp).Offset(1, 0).Value = d2 + ("/" ) + d1 + ("/" ) + d5 + ("/" ) + Format(Date, "mm/yy" )
 
Rows("6:6" ).Select
    Selection.Copy
    Rows("65536:65536" ).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
 
End Sub


 
Maintenant je n'arrive toujours pas à faire des liens dans ma ma première macro  : elle créée une nouvelle feuille (une fiche client) avec toutes les infos que je veux (inputbox) et ces dernières sont reprises sur la feuille "Base Clients" sur la dernière ligne vide disponible. A partir du nom du client (colonne A) de la feuille "Base Clients", je veux que ma macro génère aussi un lien vers la fiche correspondante venant d'être créée dans cette même macro.


---------------
Dur dur les macros...
Reply

Marsh Posté le 10-03-2009 à 15:40:15    

..

Message cité 1 fois
Message édité par 86vomito33 le 10-03-2009 à 15:41:20
Reply

Marsh Posté le 10-03-2009 à 15:40:49    

86vomito33 a écrit :


   Dim zone As Range, r As Range
    Set zone = Worksheets("Base Clients" ).Range("D1" )
    If Month(Range("F1" ).Value) <> Month(Date) Then
        For Each r In zone
            r.Value = 0
        Next
    Range("F1" ).Value = Date
    End If


 
dans ton cas vu que ta zone correpond qu'a ue seule cellule tu peux mettre:
    If Month(Range("F1" ).Value) <> Month(Date) Then
    Worksheets("Base Clients" ).Range("D1" ) = 0
    Range("F1" ).Value = Date
    End If

Reply

Marsh Posté le 12-03-2009 à 11:40:55    

Ok, merci, je me doutais qu'il y avait un moyen de faire plus simple vu qu'effectivement je ne met à 0 q'une seule cellule. C'est un code que j'avais trouvé sur un forum pour remmettre à 0 plusieurs cellules que je m'étais réadapté. Merci pour cette simplification ;)
 
Néanmoins, mon problème reste de lier chaque nouvelle fiche client avec les cellules "nom du client" en colonne A) de la feuille "Base Clients". Au sein de la même macro, je créé la fiche client (la nouvelle feuille portant le nom du client => ma valeur d1 de l'InputBox) et je créé la ligne pour ce nouveau client sur la première ligne vide de ma feuille "Base Clients". Reste à lier les deux, sachant que je ne peux pas faire mon lien en indiquant le nom de la feuille dans la macro, genre "NOMDUCLIENT!A1", puisque le nom du client c'est ma valeur d1 de l'InpuBox... Je sais pas si je suis clair là....  :??:


---------------
Dur dur les macros...
Reply

Marsh Posté le 12-03-2009 à 11:40:55   

Reply

Marsh Posté le 21-04-2009 à 12:20:17    

J'essais de faire une gestion de stock de 2 magasins avec des produits qui peuvent venir s'ajouter ou etre supprimés. Sache que tout ce que t'a écris devrai me servir un peu :p  
Vraiment génial ce forum

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed