Création d’une nouvelle feuille via Userform

PAD

XLDnaute Occasionnel
Bonsoir à tous,

Voilà, j’ai un problème que je n’arrive pas à résoudre, je vous explique.

J’ai sur le fichier joint, une feuille nommée ‘‘ControleSaisie,’’ dessus via un Userform, j’entre toute mes données.
Ce que je cherche à faire, est de vérifier si le nom du fournisseur existe, situé en feuille nommée ‘‘Fournisseurs’’, si existe faire une saisie semi-automatique dans la listeboxe de lUserforme, si il n’existe pas, l’enregistrer dans la liste mais également créer une feuille de saisie à son nom.
Je ne sais pas comment m’y prendre et c’est pour ça que je vous demande votre aide.

Je tiens aussi vous signalé que le fichier joint est un modèle de Monsieur Boisgontier,
MERCI pour cette mine de savoir.

Vous remerciant d’avance de votre aide.

Amicalement Pad.
 

Pièces jointes

  • Fournisseur_controleSaisie.zip
    26.1 KB · Affichages: 80
  • Fournisseur_controleSaisie.zip
    26.1 KB · Affichages: 85
  • Fournisseur_controleSaisie.zip
    26.1 KB · Affichages: 79

jp14

XLDnaute Barbatruc
Re : Création d’une nouvelle feuille via Userform

Bonsoir

Ci dessous le fichier avec un autre approche.
J'ai remplacé le "Textbox" par un "combobox" qui en fait propose les noms au cours de la saisie.

A la sortie du "combobox" création d'une feuille.

A tester

JP
 

Pièces jointes

  • Fournisseur_controleSaisie.zip
    24 KB · Affichages: 126
  • Fournisseur_controleSaisie.zip
    24 KB · Affichages: 116
  • Fournisseur_controleSaisie.zip
    24 KB · Affichages: 123

Excel-lent

XLDnaute Barbatruc
Re : Création d’une nouvelle feuille via Userform

Bonsoir PAD,

PAD à dit:
si il n’existe pas (...) créer une feuille de saisie à son nom.

L'idéal serait d'avoir une feuille caché nommé par exemple "modèle". Ainsi à chaque fois que la macro ne trouve pas de feuille au nom du fournisseur, il duplique cette feuille (pour garder l'original) et l'appelle du nom du fournisseur.

Ce qui donnerait :
-> remplacer ta macro "private Sub B_ok_Click()" par la macro ci-dessous :
Code:
Private Sub B_ok_Click()
Call Forme
' Macro enregistré par Excel-lent

Dim Ws As Worksheet
Dim i As Integer

i = 0

For Each Ws In Worksheets

   If Ws.Name = TbxNom.Value Then
     i = i + 1
     Ws.Select
     CopierUserformIci
   End If
Next Ws

If i = 0 Then
    Sheets("[COLOR="Blue"][B]Modèle[/B][/COLOR]").Copy Before:=Sheets(1)
    ActiveSheet.Name = TbxNom.Value
    CopierUserformIci
End If

raz

End Sub

-> rajouter la macro suivante sur la même page, à la suite par exemple :
Code:
Sub CopierUserformIci()
  
  [B65000].End(xlUp).Offset(1, 0).Select
  ActiveCell = UCase(Me.TbxNom)
  ActiveCell.Offset(0, -1) = Format(Tbx_Date, "dd-mmm-yyyy")
  ActiveCell.Offset(0, 1) = Application.Proper(Me.Tbx_Desig)
  ActiveCell.Offset(0, 2) = Application.Proper(Me.Tbx_Cat)
  ActiveCell.Offset(0, 3) = Application.Proper(Me.Tbx_U)
  ActiveCell.Offset(0, 4) = Application.Proper(Me.Tbx_Q)
  ActiveCell.Offset(0, 5) = CDbl(Me.Tbx_PU)
  ActiveCell.Offset(0, 6) = Format(Me.Tbx_R, "0.00%")
  ActiveCell.Offset(0, 7) = CDbl(Me.Tbx_PN)
  ActiveCell.Offset(0, 8) = CDbl(Me.Tbx_Montant)

End Sub

Évidement, avant de lancer le code ci-dessus, bien penser à créer cette fameuse feuille "Modèle" ;)

Pour tester le code, j'ai dupliqué ta feuille ControleSaisie que j'ai appelé "Modèle", ça fonctionne.

PAD à dit:
Ce que je cherche à faire, est de vérifier si le nom du fournisseur existe, situé en feuille nommée ‘‘Fournisseurs’’ (...) si il n’existe pas, l’enregistrer dans la liste

Le code ci-dessous n'est pas très jolie mais devrait faire ton affaire.

Code:
Sub MiseAjoursListeFrs()

Dim Nbligne As Long
Dim Compteur As inte

Sheets("Fournisseurs").Select

Nbligne = Range("65536").End(xlUp).Row
Compteur = 0

For i = 2 To Nbligne
  If Cells(i, 1) = TbxNom.Value Then Compteur = Compteur + 1
Next i

If Compteur = 0 Then Cells(Range("65536").End(xlUp).Row + 1, 1) = TbxNom.Value
End If

End Sub

PS. : tu es au courant que sur ta feuille "controlesaisie" tu as deux boutons superposé? C'est dangereux, car je ne sais pas comment cela se passe lorsque chaque bouton est affecté à une macro!

Suis à la bourre, faut que je te laisse.

Edition : Bonsoir JP14

A+ et bonne soirée
 
Dernière édition:

PAD

XLDnaute Occasionnel
Re : Création d’une nouvelle feuille via Userform

Re tous,
Bonsoir JP, Excel-lent,

Milles mercis encore un fois pour votre soutien,
je vais tester vos solutions, et je teindrai au courant,
pour les boutons enfin c'est plus des images affectées d'une macro, un essai parce que,
je suis tombé sur un calendrier pas commun du tous, j'ai recherché sur le net espérant
retrouvé son auteur sans succès.
Je le joindrai à mon prochain message, vous serez je pense surpris par le travail réalisé.

Sur ce je vous souhaite une très bonne soirée à tous,

Merci encore,

Amicalement Pad
 

PAD

XLDnaute Occasionnel
Re : Création d’une nouvelle feuille via Userform

Bonjour le forum,
Bonjour JP, Excel-lent,

Je reviens sur mon fil parce que je ne comprends pas pourquoi, j’ai une erreur 1004.
Pour vous dire j’ai mixé vos deux solutions en prenant le combobox de JP et la partie du programme de Excel-lent.
Donc sans combo tout marche bien mais avec j’ai :
Erreur d’exécution ‘1004’ :
La méthode Copy de la classe Worksheet a échoué.

Pouvez vous s’il vous plait m’éclairer sur ce type de message et comment réparer ce qui ne va pas. J’ai cherché un peu de partout sans réel succès, pour temps le même programme avec un textbox tourne bien sans problème. Je ne comprends pas.

Merci de votre aide, et désolé de vous déranger pour une bricole.

Amicalement Pad
 

Pièces jointes

  • ControleSaisieAvecCombo5.zip
    38.4 KB · Affichages: 123

jp14

XLDnaute Barbatruc
Re : Création d’une nouvelle feuille via Userform

Bonjour

A priori l'erreur porte sur cette macro
Sub Forme()
Range("A1:J1").Select
Selection.Copy
[A65000].End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub

Il faut éviter le couple Select, selection qui marche quand on reproduit la macro dans les mêmes conditions lors de l'enregistrement.

Il est nécessaire d'identifier les feuilles, et de supprimer "select selection"

Sheets("toto").Range("A1:J1").Copy


A tester

JP
 

PAD

XLDnaute Occasionnel
Re : Création d’une nouvelle feuille via Userform

Re le forum,

Bon our JP,

Heureux de te lire de nouveau,

J'ai modifié lA macro comme tu me le conseil,
Mais rien à faire toujours le même problème, je me demande, faudrait-il déclarer le combo qui coince? Parce que le programme s'arrête içi :

CODE :

Dim Ws As Worksheet
Dim i As Integer
i = 0
For Each Ws In Worksheets
If Ws.Name = CBxNom.Value Then
i = i + 1
Ws.Select
CopierUserformIci
End If
Next Ws
If i = 0 Then
Sheets("Modèle").Copy Before:="Sheets(1)" '<<< Surligné en jaune
ActiveSheet.Name = CBxNom.Value ' <<< Donc ici je dois avoir le problème
CopierUserformIci
End If
With Sheets("ControlSaisie") ' Lecture d'ensemble et comparaison des prix
Derlign = .Range("b65000").End(xlUp).Row + 1
.Range("a" & Derlign) = Format(Tbx_Date, "dd-mmm-yyyy")
.Range("b" & Derlign) = UCase(Me.CBxNom)
.Range("c" & Derlign) = Application.Proper(Me.Tbx_Desig)
.Range("d" & Derlign) = Application.Proper(Me.Tbx_Cat)
.Range("e" & Derlign) = Application.Proper(Me.Tbx_U)
.Range("f" & Derlign) = Application.Proper(Me.Tbx_Q)
.Range("g" & Derlign) = CDbl(Me.Tbx_PU)
.Range("h" & Derlign) = Format(Me.Tbx_R, "0.00%")
.Range("i" & Derlign) = CDbl(Me.Tbx_PN)
.Range("j" & Derlign) = CDbl(Me.Tbx_Montant)
End With
raz
Me.CBxNom.Value = ActiveSheet.Name

End Sub

FIN CODE

Je ne comprends pas, dommage le combo comme tu me l'a indiqué plus haut, est très bien pour ce que je voudrai faire.

bon je vais allé manger,

Bonne appétit à tous,


Amicalement Pad
 

jp14

XLDnaute Barbatruc
Re : Création d’une nouvelle feuille via Userform

Bonjour

Dans un premier temps
Utiliser l'option "Compiler vba project" du menu débogage pour corriger les erreurs.


Modifier
Before:="Sheets(1)", "Sheets(1)" n'est pas un nom mais la première feuille du classeur
Before:=Sheets(1)
JP

IL faut se méfier des majuscules
L'opérateur "=" tient compte des majuscules
ActiveSheet.Name = CBxNom.Value n'en tient pas compte d'où l'erreur

If UCase(Ws.Name) = UCase(CBxNom.Value) Then
 
Dernière édition:

PAD

XLDnaute Occasionnel
Re : Création d’une nouvelle feuille via Userform

Le Forum,
re JP,

Je dois avouer que je suis pas loin de faire une ptite crise...

Bon j'ai corrigé les erreurs =( et il en avait merci pour l'info de "Compiler vba project" =)

Ensuite je me suis attaqué au combo, alors là le délire,

j'ai rajouté

If CBxNom.Value = ActiveSheet.Name Then


sur le bloc :

If i = 0 Then
Sheets("Modèle").Copy Before:=Sheets(1)
If CBxNom.Value = ActiveSheet.Name Then
ActiveSheet.Name = CBxNom.Value
CopierUserformIci
End If
End If

Et le problème est que la feuille ne se renomme plus.
J'ai loupé quelque chose je ne sais pas quoi.



Amicalement Pad
 

jp14

XLDnaute Barbatruc
Re : Création d’une nouvelle feuille via Userform

Bonjour (re)

Il faut juste modifier
If Ws.Name = CBxNom.Value Then
en rajoutant Ucase.
If UCase(Ws.Name) = UCase(CBxNom.Value) Then

La première lettre du nom des feuilles est une minuscule et dans le combobox on a une majuscule, la boucle ne trouvait pas d'égalité d'ou i = 0, mais la création ne pouvait se faire car le système ne tient pas compte de la casse des caractères au niveau du nom des onglets.

JP
 
Dernière édition:

PAD

XLDnaute Occasionnel
Re : Création d’une nouvelle feuille via Userform

Bonjour le forum,
Bonjour JP,

C’est nickel, tout fonctionne bien comme il faut.
Merci JP et Excel-lent de votre aide et soutient,
Merci encore à toi JP pour tes explications simples et claires.

Bonne journée à tous,

Amicalement Pad

(Le fichier, c'est mieux!)
 
Dernière édition:

cimbra55

XLDnaute Nouveau
Re : Création d’une nouvelle feuille via Userform

Bonjour PAD
Bonjour jp
Bonjour excel-lent

depuis quelquejour (et je suis tres tres novice dans le vba)
je reflechis a faire un classeur
dont mon probleme ressembles au tien au depart , c'est a dire
creation d'une nouvelle feuille a partir d'un combobox ou listbox
je suis un peu perdu dans la lecture des codes de jp et excel-lent
mais pourrais-tu si tu le veux bien mettre dans le suivi de conversation le
fichier attachés finalisé en date de conversation du 12 fevrier 2009
Ça me serais d'une grande aide dans ma recherche de comprehension
avec le code finalisé ( je m'y perds dans les corrections d'erreurs )et dont je pourrais etudier pour adapter a la creation de mon classeur
Merci beaucoup
cimbra
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 099
Membres
103 116
dernier inscrit
kutobi87