Que pensez vous de ca?? (Re : liens entre classeurs)

  • Initiateur de la discussion nicolas
  • Date de début
N

nicolas

Guest
Bonjour cher Forum,

J'aimerais savoir ce que vous pensez de ma macro (ce message fait suite à un autre posté hier avec un autre intitulé ("liens entre classeurs"))

Mon premier classeur = fiche technique à remplir (différents champs comme numéro de fiche, date, nom de l'émetteur etc => ce n'est pas un userform).

Chaque fiche doit etre sauvegardée sous son numéro.(donc accumulation de classeurs correspondant aux fiche remplies + le classeur avec la fiche vierge)

Mon deuxième classeur = récapitulatif de toutes les fiches techniques (on retrouve certains des champs du 1er classeur)

A chaque nouvelle fiche enregistrée (1er classeur), une nouvelle ligne est insérée dans le deuxième classeur avec la valeur des champs du premier classeur. Jusque la ok

Le truc c'est que les fiches techniques sont ressorties plus tard et mises à jour (on remplit les champs manquants). Donc dans mon deuxième classeur, c'est pas une nouvelle ligne qui est créée mais c'est la ligne correspondante au premier enregistrement qui est sélectionnée et les champs vides sont mis à jour.

Je me suis dis que la manip suivante pourrait marcher :

Chaque champ correspond à une zone de texte nommée sur la fiche vierge. On trouve sur cette fiche vierge un bouton "enregistrer" auquel est affecté une macro.
Cette macro fait la chose suivante si c'est une nouvelle fiche :
elle sauvegarde la fiche sous son numéro
elle ouvre le deuxième classeur
elle regarde si le numéro de la fiche correspond à un en-tête de ligne
elle insère une ligne vu que c'est le premier enregistrement et que le numéro est nouveau
elle fait un copier/coller des zones de texte nommées dans le 2ème classeur sur notre nouvelle ligne créée.
elle sauve le 2ème classeur et le ferme.

Dans le cas d'une mise à jour, l'utilisateur va ouvrir la fiche technique numérotée partiellement remplie et la compléter. On retrouve donc notre bouton "enregistrer" auquel est affectée la meme macro forcément:
la macro sauvegarde la fiche sous son numéro
elle ouvre le deuxième classeur
elle cherche si le numéro existe et le trouve=>donc pas d'insertion de ligne
elle fait un copier/coller des zones de texte nommées dans la ligne corespondant au numéro de fiche
elle sauve le 2ème classeur et le ferme.

Je pensais au départ que le copier/coller des champs ne marcherait pas vu qu'on a une fiche vierge et des fiches numérotées (donc les liaisons ne seraient plus valables) mais je me dis qu'avec des zones de texte nommées, y'a plus de pb.

Dites moi ce que vous en pensez si vous avez réussi à lire cet ENORME topic. Et je m'en excuse d'ailleurs
merci d'avance
a plus
koko
 
N

nicolas

Guest
J'envisage la chose ainsi (car je suis débutant en VBA et que je vais devoir faire mes macros par enregistrement)

je fais des procédures différentes pour chaque manip (d'après a+Thierry):
-enregistrer la fiche en cours
-ouvrir classeur 2
-test de présence du numéro ou pas et mise en place des données
-sauvegarde classeur 2
-fermeture classeur 2

ensuite je fais une procédure qui appelle chacune des procédures ci-dessus et qui est affectée à mon bouton.
Cela convient-il??
 
B

benoit

Guest
Cher Nicolas,

Tu as lu dans mes pensées, c'est chiadé et avec mon niveau infaisable pour le moment. J'aurais même rajouté (l'ai-je lu) une ligne pour imprimer directement à la validation.

Si tu aboutis, je veux bien que tu m'envoies le fichier sauf si tu penses avoir des droits d'auteur auquel cas je comprendrais...
 
N

nicolas

Guest
Cher Benoit,
Crois moi je vais me galérer pour faire ce ke je veux faire car je débute en prog.
Je vais m'atteler à la tache demain en créant une fiche imaginaire et un tableau imaginaire (je ne peux pas divulguer les fichiers sur lesquels je travaille)
Quand j'ai réussi je mets tout ca en pièce jointe, no pb
Mais sois patients car ca risque d'etre long.
Et pour ce ki est de l'impression, ca c'est déjà implémanté sur un bouton , ainsi que l'ouverture d'outlook par un autre bouton.
Voila a plus
reste en contact
koko
 
N

nicolas

Guest
Bonjour le forum, je suis en train d'implémenter une macro qui sert à enregistrer le fichier en cours sous un numéro :

Sub Enregistrement()

nomFichier = Sheets("Feuil1").Range("D4").Value & "-" & Sheets("Feuil1").Range("E4").Value & "-" & Sheets("Feuil1").Range("F4").Value

ActiveWorkbook.SaveAs Filename:="H:\Nicolas\mon_anomalie\" & nomFichier

End Sub

Cette macro marche mais ne fait pas tout à fait ce que je désire car le fichier en cours voit son nom se modifier. Je désire en fait que le fichier ouvert ne soit pas sauvegardé en tant que tel(qu'il garde son nom) mais qu'une sauvegarde (ou copie) soit faite sous le numéro tel que le permet la ligne de code ci-dessus.
Suis-je clair???
Si vous pouviez compléter mon code afin que cela soit possible, je vous en serait reconnaissant.
Merci d'avance
koko
 
N

nicolas

Guest
Ben en fait c'est bon, la macro d'enregistrement du fichier en cours me semble à priori efficace quand même.
J'en arrive donc au problème essentiel, à savoir la macro qui sert à transposer les données du classeur 1 vers le classeur 2 en faisant le test de présence du numéro (cf premier message) et d'ajout de ligne ou non.
Pour l'instant, je pense me baser sur le code ci-dessous écrit par a+Thierry (récupérer dans un autre fil):

Sub Reporting()
Dim WSSource As Worksheet, WSCible As Worksheet, WSForm As Worksheet
Dim L As Long
Dim Numero_d_Offre As String
Dim Plage As Range, Cell As Range

Set WSForm = Sheets("Formulaire de remplissage")
Set WSSource = Sheets("Cellules Temporaires")
Set WSCible = Sheets("GLOBAL")

Numero_d_Offre = WSForm.Range("D8")

L = WSCible.Range("B65536").End(xlUp).Row + 1

Set Plage = WSCible.Range("B8:B" & WSCible.Range("B65536").End(xlUp).Row)

For Each Cell In Plage
If Cell = Numero_d_Offre Then
L = Cell.Row
End If
Next

'(PETITE ASTUCE ENTRE AMIS !! lol)
'Maintenant on reporte les données dans la feuille "Global".
'La tendance serait de faire :
'With WSCible
'.Range("B" & L) = WSSource.Range("B8")
'.Range("C" & L) = WSSource.Range("C8")
'.Range("D" & L) = WSSource.Range("D8")
'.Range("E" & L) = WSSource.Range("E8")
'.Range("F" & L) = WSSource.Range("F8")
'.Range("G" & L) = WSSource.Range("H8")
'.Range("H" & L) = WSSource.Range("H8")
''etc etc etc
'MAIS NON !! vous n'avez pas lu, on reprend une base linéaire de 35 cellules alors ...
'ceci est bien plus simple et fait la même chose !! :

With WSCible
For C = 2 To 36 'Soit de la colonne "B" à la Colonne "AJ"
.Cells(L, C) = WSSource.Cells(8, C)
Next
'En plus Cédric gère un Hyper lien aussi, donc je l'inclu dans cette boucle :
.Hyperlinks.Add Anchor:=.Range("B" & L), Address:="http://99.999.99.99/SocieteX/Cedric/Offres_de_prix/2004/" & .Range("B" & L).Text & ".doc"
End With
End Sub

Le problème c'est que ce code, je le pige pas très bien donc si quelqu'un pouvait m'aider à adapter ce code à mon besoin , ca m'aiderait bien (en tout cas ce serait un sacré gain de temps!!)
J'envoie en fichier joint ma fiche technique (imaginaire) et mon tableau récapitulatif aisni que les macros déjà en place.
Voila
merci d'avance
a plus
koko
ps : je suis vraiment en train de faire ce fil tout seul...
 

Pièces jointes

  • anomalie.zip
    14.2 KB · Affichages: 29
  • anomalie.zip
    14.2 KB · Affichages: 25
  • anomalie.zip
    14.2 KB · Affichages: 24
N

nicolas

Guest
Ben dis donc, je dois vraiment sentir de sous les bras...
-Dis moi nicolas, as tu une réponse à ma question?
-oh ben je sais pas trop je me galère quand meme là.
-C'est vrai??
-ouaip!mais bon c kan même pas mal je suis fier de moi, y'a juste une macro que j'arrive pas à sortir et je crois que je vé devoir me débrouiller tout seul!!
-bonne chance..
-y'en aura besoin
-et tu sais pkoi personne te réponds??
-ben je me dis que ca va peut être venir mais bon j'ai plusiurs hypothèses à savoir
1)je sens des bras
2) j'ai fais un sujet pourri que personne veut lire (ca me semble le plus probable) et je continue à la pourrir avec ce genre de remarques (mais bon en même temps c'est mon fil à moi tout seul donc je suis un peu libre)
3) personne ne m'aime mais ca je le savais déjà
4) obiwan kenobi

-bon allez zou je file travailler!
je me réponds tout à l'heure ok?
-ok! aplus
- a plus!
 
N

nicolas

Guest
Bon je suppose que le début est de la sorte :

Sub Reporting()

Dim WBsource As Workbook, WBcible As Workbook
Dim L As long (je comprends pas a koi ca sert!)
Dim Numero_fiche As String
Dim PLage As Range, Cell As Range (comprends pas trop comment ca marche)

Set WBsource=Workbooks("fiche_de_mon_anomalie.xls" <= chemin complet ou pas besoin????)).sheets("Fiche")
Set WBcible=Workbooks("tableau_mon_anomalie.xls).sheets("tableau")

Numero_fiche=nomFichier (nomFichier est déclaré comme String en "Déclarations")

A partir de là ca se gate
En fichier joint, la nouvelle version de ma fiche imaginaire et du tableau qui va avec
 

Pièces jointes

  • essaireporting.zip
    15.6 KB · Affichages: 20
  • essaireporting.zip
    15.6 KB · Affichages: 18
  • essaireporting.zip
    15.6 KB · Affichages: 17
N

nicolas

Guest
Bon allez zou je rentre chez moi
je reprends le code demain
si d'aventure kk1 s'attarde sur mon problème qu'il m'aide ou se taise à jamais
que cela soit écrit et accompli!!
Mais de toute facon je sens que je vé y arriver tout seul comme un grand!!
D'ailleurs champagne pour tout le monde si c'est le cas
-a plus koko
-merci koko
-ciao
-ciao à demain
 
N

nicolas

Guest
-Salut Nicolas
-Salut!
-alors ca avance??
-ben un peu regarde ce qu'il ya de codé dans le fichier joint.
Je crois que je suis proche de la vérité mais ca plante toujours au niveau du report des données et je me galère un peu là.
J'enrage car je dois vraient pas être loin!!!!
-courage gamin
-ouaip
bon j'y retourne
a plus
-a plus
 

Pièces jointes

  • essaireporting.ZIP
    16.6 KB · Affichages: 24
  • essaireporting.ZIP
    16.6 KB · Affichages: 24
  • essaireporting.ZIP
    16.6 KB · Affichages: 25
N

Nicolas

Guest
-Salut Nicolas
-Salut
-Alors j'croi avoir vu un truc

en changeant
- .Range("A:A" & L) = WSsource.Range("Numero_fiche")
par
- .Range("A" & L) = WSsource.Range("Numero_fiche")

et ainsi de suite ca devré avancer un peu je pense

-Merci v essayer
-de rien

@+
Minick

ooops

koko
 

Discussions similaires

Réponses
8
Affichages
440

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote