Souci sous visual basic

Résolu
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007 - 15 mars 2007 à 11:48
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 23 mars 2007 à 22:10
Bonjour à tous!

Voila j'ai un souci en ce qui concerne mon programme!

J'ai créé un code qui me permet à partir d'un userform d'insérer une ligne (ligne 13) et qui renseigne les cellule A13 à L13 suivant la saisie du nouvel appareil et les paramètre que je rentre sont les suivant (n°fiche, nom, constructeur, n°série,etc...)Donc ceci fonctionne correctement.

Mais le souci c'est que dès l'arrivé de l'appareil de mesures il y a une fiche de vie qui le suit du début (son arrivé) jusqu'a réforme ou casse de l'appareil et moi je voudrais que en fonction du numéro de fiche les autres informations (nom, constructeur, n°série, etc... se copie dans ma ligne 13 mais aussi dans la fiche de vie correspondante.(exemple de nouvel appareil N°fiche : 545 donc écriture dans fiche 545)

Par exemple le contenu de "B13" de la feuille "suvi alim" du classeur "suivi msr steven" vers la cellule "E5" de la feuille "457" du classeur "fichesdevies" et que cela se fasse a chaque entrer de nouveau moyens de mesures et en fonction du n° de fiche.
Si fiche n°545 alors écriture dans fiche 545 des différentes variables.

A+

21 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
21 mars 2007 à 23:36
J'aime bien Firefox, mais là il vient de me faire un update sans m'avertir et a tout effacé ce que j'étais en train d'écrire...

Bon,
pour l'erreur, effectivement, Excel ne considère pas une cellule comme du texte ou plutôt comme du "texte"...
2 possibilités
1- Sheets("" & Range("A13" & "").Range("B5")) = Range("B13")
2- Dim Feuille as String
    Feuille = Range("A13")
    Sheets(Feuille).Range("B5")) = Range("B13")

Pour les menus contextuels, ça peut faire peur au début, mais ce n'est pas si compliqué que ça. Si c'est une option que tu envisages, on pourra débattre ça sur un autre message ou MP

Pour les feuilles (les 500)
Est-ce que toutes les données qui se retrouvent sur ces feuilles se retrouvent aussi sur tes 3 feuilles de base ? ou est-ce qu'elles contienent des données particulières à chacune et qui se retrouvent seulement sur cells-ci ?

En un mot, est-ce que c'est possible de générer ces feuilles dynamiquement en recherchant les données sur les 3 feuilles de base ("suivi alim", "suivi moyens mécaniques", "suivi moyens électriques") ?

MPi
3
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
22 mars 2007 à 09:05
Bonjour MPi.

Merci beaucoup pour le code pour la copie de cellules d'une feuille vers une autre cela fonctionne à merveille c'est vraiment géniale.Merci à toi!

C'est le code ci-dessous qui fonctionne car l'autre me générait une erreur 

    Dim Feuille as String
    Feuille = Range("A13")
    Sheets(Feuille).Range("B5") = Range("B13")

Pour les 500 feuilles :

Est-ce que toutes les données qui se retrouvent sur ces feuilles se retrouvent aussi sur tes 3 feuilles de base ? ou est-ce qu'elles contienent des données particulières à chacune et qui se retrouvent seulement sur cells-ci ?
Quand c'est un appareil électrique j'ai les infos qui se retrouve sur la fiche de vie mais aussi dans le tableau récapitulatif "appareil électriques" mais dans les fiches de vies il y a des infos supplémentaire (Prix, n° de devis, observations) qui ne figure que sur la fiche de vie de chaque appareil.
Donc elles contiennent des infos particulières pour chacun des appareils de mesures.
C'est d'ailleurs pour cela que je veux créer un lien hypertexte ou créer un menu contextuel afin d'aller directement sur la feuille de vie de l'appareil ajouté afin de renseigner les autres informations le concernant.

En un mot, est-ce que c'est possible de générer ces feuilles dynamiquement en recherchant les données sur les 3 feuilles de base ("suivi alim", "suivi moyens mécaniques", "suivi moyens électriques") ?
Je ne comprend pas très bien la question mais ce que tu veux dire c'est de rechercher les feuilles de vies à partir de toutes les données du tableau récapitulatif. Si c'est cela je ne préfère pas car le but de mon programme est justement de rechercher l'appareil par rapport au n° de fiche car chaque appareil à SA fiche et il n'en existe pas 2 identique.

A bientôt et encore merci.

Steven.

 
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 mars 2007 à 22:14
La partie la plus importante est le Worksheet_BeforeRightClick

C'est là que tu crées le menu. Les autres procédures, c'est pour détruire ce menu qui pourrait causer des erreurs si activé en dehors de la ou des feuilles où il doit être exécuter. Dans ton cas, tu n'auras pas besoin de sous-menus. Je vais donc simplifier le code un peu.

Donc, tu crées cette procédure dans la ou les feuilles où tu as besoin d'appeler la procédure d'activation de feuille avec un click droit.

'Création du menu
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim Menu
   
'Commencer par détruire le menu s'il existe déjà pour éviter les doublons de menus
    For Each Menu In Application.CommandBars("cell").Controls
        If Menu.Tag = "ActiverFeuille" Then Menu.Delete
    Next Menu
'création véritable du menu (before:=1 le place en début de liste)          
    With Application.CommandBars("cell").Controls.Add(Type:=msoControlButton,   _                              before:=1, temporary:=True)
       .Caption = "Activer la feuille " & Cells(Target.Row, 1)  ' affichage du menu
       .OnAction = "ActiverFeuille"                                         ' procédure appelée
       .Tag = "ActiverFeuille"  'valeur donnée à un objet pour pouvoir le différencier d'autres
    End With
   
End Sub

Puis, dans un module, tu crées la procédure ActiverFeuille
Public Sub ActiverFeuille()
    Dim Feuille As String
   
    Feuille = ActiveSheet.Cells(ActiveCell.Row, 1)
    Sheets(Feuille).Activate
End Sub

Il ne reste qu'à modifier la procédure pour effacer le menu

Public
Sub EffacerMenus()
    Dim Menu
   
    For Each Menu In Application.CommandBars("cell").Controls
        If Left(Menu.Tag, 18) = "
Activer la feuille
" Then Menu.Delete
    Next Menu
 
End Sub

Finalement, il reste à tester et comprendre...

MPi
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
15 mars 2007 à 12:03
Salut,

C'est très bien expliquer, mais c'est pas du VB6 mais plutôt du VBA ?

A+
Exploreur

 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
15 mars 2007 à 13:15
Oui c vrai c'est du VBA et pas du VB6.

Mais cela n'enlève pas mon souci.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
15 mars 2007 à 13:36
Lorsque tu parles de "fiche 545", est-ce le nom d'une feuille ?
Ou est-ce une ligne d'une feuille qui sert de base de données (où tous les appareils sont stockés) et qui contiendrait le numéro 545 dans une colonne particulière ?

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
15 mars 2007 à 14:28
Oui c le nom d'une feuille dans un classeur le nom c'est "545" par exemple mais sa peut ètre '446'!
cela va de la fiche '1' à '550'
A+
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
19 mars 2007 à 10:28
Est-il possible de créer 550 feuilles dans un classeur ?
Si oui, tu risques de te retrouver avec un fichier Excel très volumineux... et qui risque de se corrompre...

Tu dis que tu entres les données sur la ligne 13.
Est-ce que ces données s'accumulent au fil des jours ? Si oui, tu te retrouves donc avec un genre de base de données. Est-ce bien nécessaire de copier ces données dans un autre classeur ? Combien de lignes peut ou pourra contenir cette feuille ?

Le gros du problème réside dans le nombre de lignes que ton rapport génère.
Si tu te retrouves avec des dizaines de milliers lignes, voire plus, il serait peut-être préférable d'envisager de travailler sous Access ou autre base de données ou encore te servir de fichier texte (?)

Si tu pouvais donner un peu plus de détails, ce serait plus simple de te donner un avis pertinent.

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
19 mars 2007 à 10:48
Oui c'est possible et cela ne montera pas à plus de 550 feuilles.

Oui elle rentre bien sur la lignes 13 mais il n'y a pas de nouveaux moyens ajouté en permanence se sera un de temps en temps.
J'ai 3 feuille ;  une feuille "suivi des alimentations" (41 lignes), une autres "suivi des appareils électrique" (140 lignes) et une autre "suivi des appareils mécanique" (92 lignes).
Donc cela ne fait pas énormément de lignes.

Il n'y aura jamais des dizaines de milliers de lignes dans le tableau récapitulatif, au max peut-être 350 lignes en tout mais dans pas mal d'année.

Mais, moi ce que je recherche c'est un moyen pour que lorsque j'ajoute un moyen de mesure à l'aide de mon userform qu' il s'insère une ligne et que cela se remplisse de A13 à L13 dans mon tableau récapitulatif (ceci fonctionne) mais aussi dans une fiche de vie associé à ce nouvel appareil comme expliqué ci-dessus.
Afin de renseigner non seulement le tableau mais aussi la fiche de vie pour éviter de taper 2 fois la même chose.

Voila j'espère avoir été plus clair.
A bientôt.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
19 mars 2007 à 11:53
Si ta méthode d'insertion fonctionne pour ton classeur, ce ne sera pas plus difficile pour un autre classeur. Il suffit de l'ouvrir et d'utiliser son nom
WorkBooks("MonClasseur").Sheets("MaFeuille").Range("A13") ..............

Mais je pense encore que la meilleure méthode serait de tout conserver dans un seul classeur. C'est moins de manipulatons. Surtout si tu n'as pas beaucoup de lignes.

Tu pourrais ajouter une feuille pour afficher les détails d'un appareil. Cette feuille aurait déjà une mise en page uniforme pour tous les appareils. Si tu veux afficher un appareil, tu ouvres une boîte de dialogue qui demande le numéro ou quelque chose du genre, éventuellement avec une Combobox pour afficher chaque appareil.

Quand l'utilisateur choisit l'appareil qui l'intéresse, tu fais une recherche dans la feuille qui contient toutes les données, tu copies les données de la ligne (ou des lignes) où bon te semble dans la feuille d'affichage et c'est prêt pour l'impression, si nécessaire.

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
19 mars 2007 à 12:20
Mais ce code ne pourras fonctionner avec WorkBooks("MonClasseur").Sheets("MaFeuille").Range("A13") car ce que je veux c'est que cela s'écrive dans la feuille correspondante au numéro de fiche de la cellule A13.

Donc je ne peux pas faire comme tu me dit vu que je veux que cela s'écrive dans le classeur "suivi étalonnage msr steven" feuille "suivi alim" (cela fonctionne).

Mais aussi dans un autre classeur "fichesdevies" et feuille "1" à "550" suivant ce que j'aurais dans la cellule A13 du classeur "suivi étalonnage msr steven" feuille "suivi alim"

Si j'ai 458 dans la cellule A13 de la feuille "suivi alim" du classeur "suivi étalonnage msr steven" je veux que les variables s'inscrive dans la feuille "458" du classeur "fichesdevies".

Voila mais peut-être en effet que ta méthodes serait beaucoup plus simple.
En revanche vu que je débute en VBA il faudrais de l'aide pour cert1 code de ta méthode.
A+
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
19 mars 2007 à 13:13
Mon code de ma méthode est le suivant :


Private Sub CommandButton1_Click()


    'Activation de la feuille "suivi alim" :
       
        Sheets("suivi alim").Activate
           
        Dim Recherche As Range


        'vérifier si Textbox1 est vide
           
            If TextBox1 = "" Then Exit Sub  ' on sort si le textbox est vide


            'Recherche dans la première feuille "suivi alim" la valeur de textbox1
               
                Set Recherche = Sheets("suivi alim").Columns("A:A").Find(TextBox1.Text)
                   
                    If Not Recherche Is Nothing Then  ' trouvé
                       
                        MsgBox "La Fiche que vous voulez créer existe déja: " & Recherche.Address
                   
                    Else
               
                    'l'item n'a pas été trouvé et la recherche se fera sur la feuille suivante
               
                Set Recherche = Sheets("suivi moyens électriques").Columns("A:A").Find(TextBox1.Text)
               
                    If Not Recherche Is Nothing Then  ' trouvé
               
                        MsgBox "La Fiche que vous voulez créer existe déja: " & Recherche.Address
               
                    Else
               
                    'l'item n'a pas été trouvé et la recherche se fera sur la feuille suivante
               
                Set Recherche = Sheets("suivi moyens mécaniques").Columns("A:A").Find(TextBox1.Text)
                   
                    If Not Recherche Is Nothing Then  ' trouvé
                       
                        MsgBox "La Fiche que vous voulez créer existe déja: " & Recherche.Address
                   
                    Else
                   
                    'Le code n'existe pas
               
                    'Insertion d'une ligne :
                   
                        Rows("13:13").Select
                        Selection.Insert Shift:=xlDown
               
                    'Ecriture des variables de la fenêtre Alim dans les cellules A13,1 à A13,12 :
                   
                        Cells(13, 1).Value = TextBox1.Text
                        Cells(13, 2).Value = TextBox2.Text
                        Cells(13, 3).Value = TextBox3.Text
                        Cells(13, 4).Value = TextBox4.Text
                        Cells(13, 5).Value = TextBox5.Text
                        Cells(13, 6).Value = TextBox6.Text
                        Cells(13, 7).Value = TextBox7.Text
                        Cells(13, 8).Value = TextBox8.Text
                        Cells(13, 9).Value = TextBox9.Text
                        Cells(13, 10).Value = TextBox10.Text
                        Cells(13, 11).Value = TextBox11.Text
                        Cells(13, 12).Value = TextBox12.Text
               
                    'Création de lien hypertexte dans la cellule A13:
                        With worksheets("suivi alim")
                            .Hyperlinks.Add Range("A13"), "C:\Documents and Settings\Steven D\Bureau\Suivi Etalonnage by Steven\Fichesdevies.xls"
                        End With
                       
                    End If       ' Fin 3e IF
                End If           'Fin 2e IF
            End If                'Fin 1er IF


        Alim.Hide
                   
End Sub


Private Sub CommandButton2_Click()



'Si clique sur bouton "Annuler" la fenêtre disparait :


Alim.Hide


End Sub

Voila ça risque d'être utile je pense.
A+
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
19 mars 2007 à 15:25
Voila donc maintenant pense-tu qu'il serait possible de garder ma méthode mais de faire comme tu as dit c'est à dire de tout mettre dans la même feuille.


Et de rajouter une fonction qui permet de rechercher la bonne feuille suivant la valeur que l'on rentre en A13.

Et de copier les valeurs que contiennent les cellules B13 à L13 dans les cellules de la fiche correspondante à la valeur contenu dans la cellule A13.

Par Exemple : Si 458 dans cellule A13 recherche de feuille '458' et copie des cellules B13 à L13 dans cellules A8, B6, B7,etc... de la feuille '458'.

Mais est-ce qu' il existe une fonction VBA qui permet la copie automatique de plusieurs cellules d'une feuille vers d'autres cellules d'une autre feuille?En prenant compte que la feuille vers laquelle la copie se fait est le contenu de la cellule A13!!

Donc dit moi ce que tu pense de mes propositions et si tu as des codes ou des exemples ou n'importe quoi qui puisse m'aider pour ce souci sa me serait d'une grande utilité. Merci d'avance.

Et MPi, je tient a te remercier de ton aide et de tes conseils qui me sont d'un grand secours. A bientôt.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
20 mars 2007 à 01:39
Voici mes réponses aux questions que tu te poses







Voila donc maintenant pense-tu qu'il serait possible de garder ma
méthode mais de faire comme tu as dit c'est à dire de tout mettre dans
la même feuille.



Oui, mais est-ce la meilleure façon de procéder (?) Je ne connais pas ton programme, ni tout ce qu'il devra accomplir...



Et de rajouter une fonction qui permet de rechercher la bonne feuille suivant la valeur que l'on rentre en A13.
Oui, et c'est très simple
Workbooks("LeNom").Sheets(Range("A13")).Activate

Et
de copier les valeurs que contiennent les cellules B13 à L13 dans les
cellules de la fiche correspondante à la valeur contenu dans la cellule
A13.
Oui, idem
Workbooks("LeNom").Sheets(Range("A13")).Range("A13") = Range("A13")

Par Exemple : Si 458 dans cellule A13 recherche de feuille
'458' et copie des cellules B13 à L13 dans cellules A8, B6,
B7,etc... de la feuille '458'.
Tout à fait possible, voir ce qui précède

Mais est-ce qu' il existe une
fonction VBA qui permet la copie automatique de plusieurs cellules
d'une feuille vers d'autres cellules d'une autre feuille?En prenant
compte que la feuille vers laquelle la copie se fait est le contenu de
la cellule A13!!
Non, ça n'existe pas, mais ça se crée assez facilement.
Range("A13:L13").copy
on active l'autre classeur, on se positionne et on colle

Ceci dit, ...
Avant de te lancer dans la création d'un programme, pense à tout mettre sur papier. Crée-toi un genre de cahier des charges. "Le programme doit pouvoir faire ceci et cela..."
Pense à tous les détails que l'application doit effectuer... D'où proviennet les données ?, où les inscrire d'abord ?, où les copier ?... et pourquoi ? ... Comment gérer pour que ce soit le plus simple au niveau application, mais aussi au niveau utilisateur... ?

Quelles sont les limites ?
Sous Excel, 65536 lignes, 256 colonnes sont déjà des limites
Est-ce qu'on peut s'en sortir avec ça ?
à toi de voir

Cette partie, lorsque bien montée, rend le travail tellement plus facile...

Maintenant, si tu peux m'exposer l'idée que tu veux exploiter, je pourrai probablement t'aider, comme je l'ai fait pour d'autres personnes. Mais si tu m'arrives avec un problème que tu n'avais pas prévu et qu'il faut tout recommencer, là je te dis «bonne chance» parce que j'en ai déjà assez de mes propres problèmes ...

J'espère que tu ne prends pas mal ce que je dis.
J'aime bien aider les gens, mais je ne veux pas devenir le clown de service... J'ai assez donné ...

J'attends donc des détails précis sur ce que doit effectuer ton programme. Combien de lignes pour chaque appareil doit être généré. Peut-on penser faire ça sur une seule feuille.

À moins d'une application particulièrement chargée de données, je ne pense pas que ce soit nécessaire d'utiliser 550 feuilles, mais c'est toi qui doit me dire si je me trompe ou pas.

@+

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
20 mars 2007 à 12:05
Bonjour.

Euh non excuse moi je voulais dire garder ma méthode mais tout mettre dans le même classeur car dans la même feuille se ne sera pas du tout ordonnée et très compliqué pour l'utilisateur.

Cahier des charges :

Déja se que j'ai au niveau de mon classeur, il contient 3 feuilles avec un tableau récapitulatif dans chacune des feuilles

-"suivi alim"
-"suivi moyens mécaniques"
-"suivi moyens électriques"

et environt 500 feuilles de fiches de vies d'appareil

-De "1" à "500" et donc j'ai choisi une feuille par appareil car cela simplifi énormément la tâche à l'utilisateur car dès qu'il veut une fiche il clique sur le lien en A13 et il tombe direct sur la fiche du bon appareil.

Ensuite suivant le type d'appareil que je veux ajouter il me faut aller sur la feuille correspondante.Par exemple si je veux ajouter une alimentation je vais dans la feuille "suivi alim"

Lors d'un appui sur le bouton de commande "Ajout Alimentations" il y a la fenêtre correspondante qui s'ouvre créé au préalable sous visual basic avec un userform.
Une fois que l'utilisateur à rempli tout les champs et qu'il valide sa saisie (fiche n°, nom, type, n°de série, constructeur, etc...), le programme doit se lancer et scruter toutes les lignes de la colonne A des 3 feuilles de suivi ("suivi alim, suivi moyens électriques, suivi moyens mécaniques")afin de voir si la fiche de vie n'existe pas déja.

Si elle existe il y a un message box qui s'affiche à l'écran afin de prévenir l'utilisateur et cela interrond l'execution  programme.

Programme :

            If TextBox1 = "" Then Exit Sub  ' on sort si le textbox est vide



            'Recherche dans la première feuille "suivi alim" la valeur de textbox1
               
                Set Recherche = Sheets("suivi alim").Columns("A:A").Find(TextBox1.Text)
                   
                    If Not Recherche Is Nothing Then  ' trouvé
                       
                        MsgBox "La Fiche que vous voulez créer existe déja: " & Recherche.Address
                   
                    Else
               
                    'l'item n'a pas été trouvé et la recherche se fera sur la feuille suivante
               
                Set Recherche = Sheets("suivi moyens électriques").Columns("A:A").Find(TextBox1.Text)
               
                    If Not Recherche Is Nothing Then  ' trouvé
               
                        MsgBox "La Fiche que vous voulez créer existe déja: " & Recherche.Address
               
                    Else
               
                    'l'item n'a pas été trouvé et la recherche se fera sur la feuille suivante
               
                Set Recherche = Sheets("suivi moyens mécaniques").Columns("A:A").Find(TextBox1.Text)
                   
                    If Not Recherche Is Nothing Then  ' trouvé
                       
                        MsgBox "La Fiche que vous voulez créer existe déja: " & Recherche.Address





Si en revanche elle n'est pas éxistante alors le programme doit :

-Insérer une ligne  (ligne 13 afin de décaler toutes les autres lignes vers le bas)

Programme :

                    'Insertion d'une ligne :
                   
                        Rows("13:13").Select
                        Selection.Insert Shift:=xlDown

-Ecrire les variables contenues dans les différents de mon userform dans la ligne 13 (A13 à L13)

Programme :

                    'Ecriture des variables de la fenêtre Alim dans les cellules A13,1 à A13,12 :
                   
                        Cells(13, 1).Value = TextBox1.Text
                        Cells(13, 2).Value = TextBox2.Text
                        Cells(13, 3).Value = TextBox3.Text
                        Cells(13, 4).Value = TextBox4.Text
                        Cells(13, 5).Value = TextBox5.Text
                        Cells(13, 6).Value = TextBox6.Text
                        Cells(13, 7).Value = TextBox7.Text
                        Cells(13, 8).Value = TextBox8.Text
                        Cells(13, 9).Value = TextBox9.Text
                        Cells(13, 10).Value = TextBox10.Text
                        Cells(13, 11).Value = TextBox11.Text
                        Cells(13, 12).Value = TextBox12.Text

- Copie du contenue des cellules B13 à L13 vers la fiche de vie qui correspond à ce que contient la cellule A13 (si 458 dans la cellule A13 alors copie du contenue des autres cellule(B13 àL13) dans des cellules de la feuille "458".

Si je prend l'exemple de la feuille 458 avec ce que contient les cellules B13 à L13 de la feuille "suivi alim" :

B13 de la feuille "suivi alim" copiée dans B5 de la feuille "458"
C13 de la feuille "suivi alim" copiée dans E5 de la feuille "458"
D13 de la feuille "suivi alim" copiée dans E6 de la feuille "458"
E13 de la feuille "suivi alim" copiée dans B6 de la feuille "458"
F13 de la feuille "suivi alim" copiée dans B12 de la feuille "458"
G13 de la feuille "suivi alim" copiée dans B10 de la feuille "458"
H13 de la feuille "suivi alim" copiée dans B16 de la feuille "458"
I13 de la feuille "suivi alim" copiée dans C16 de la feuille "458"
J13 de la feuille "suivi alim" copiée dans A16 de la feuille "458"
K13 de la feuille "suivi alim" copiée dans E7 de la feuille "458"
L13 de la feuille "suivi alim" copiée dans B7 de la feuille "458"

Pas encore de programme de créé sur l' application ci-dessus

Création d'un lien hypertexte dans la cellule A13 afin que lorsque l'on appui sur le numéro de fiche cela ouvre la fiche de vie correspondante (ex si appui sur 126 alors feuille 126 s'ouvre directement)
Mais pour le moment je n'ai pas réussi car ça n'ouvre pas le classeur à la bonne feuille mais vu que maintenant tout est dans le même classeur mon code n'est surement plus valable.

Programme :
               'Création de lien hypertexte dans la cellule A13:
                        With worksheets("suivi alim")
                            .Hyperlinks.Add Range("A13"), "C:\Documents and Settings\Steven D\Bureau\Suivi Etalonnage by Steven\SUIVI ETALONNAGE MSR STEVEN.xls"
                        End With
 
Et enfin si c'est possible que si l'on change le texte par exemple dans la cellule B5 de la feuille "458" qu'il change aussi dans la cellule B13 de la feuille "suivi alim"

Pas de programme non plus pour cette application.

Au niveau des feuilles je ne peut pas les mettres dans une seule feuille car cela ne sera absolument pas pratique pour l'utilisateur de plus une fiche fait 5 colonne assez large sur 60 lignes donc cela serait le véritable basard pour se retrouvé dans une seule feuille.
Je préfère donc garder le système que j'ai (un classeur avec toutes les feuilles dedans) qui est vraiment très simple d'utilisation.

Je ne l'ai pas mal pris et je comprendrais totalement si tu préfèrais ne plus m'aider car je sais que je te demande beaucoup et que tu as t'ai propre ennui.

Voila j'espère que mes explications sur le cahier des charges et sur se que j'attend sont clair et concise.

A bientôt et MERCI MPi.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
20 mars 2007 à 22:25
Ça s'éclaircit un peu, mais il reste des zones sombres dans ma tête... j'y reviendrai à la fin...

Pour un départ, tu dis ceci:
B13 de la feuille "suivi alim" copiée dans B5 de la feuille "458"
C13 de la feuille "suivi alim" copiée dans E5 de la feuille "458"
D13 de la feuille "suivi alim" copiée dans E6 de la feuille "458"
E13 de la feuille "suivi alim" copiée dans B6 de la feuille "458"
F13 de la feuille "suivi alim" copiée dans B12 de la feuille "458"
G13 de la feuille "suivi alim" copiée dans B10 de la feuille "458"
H13 de la feuille "suivi alim" copiée dans B16 de la feuille "458"
I13 de la feuille "suivi alim" copiée dans C16 de la feuille "458"
J13 de la feuille "suivi alim" copiée dans A16 de la feuille "458"
K13 de la feuille "suivi alim" copiée dans E7 de la feuille "458"
L13 de la feuille "suivi alim" copiée dans B7 de la feuille "458"

Je peux donc voir qu'il n'y a pas de "logique" entre une et l'autre des 2 feuilles.
Il faudra donc y aller "manuellement", c'est-à-dire copier chaque cellule là où il faut
Donc, pour l'instant, je ferai comme si tu avais 500 feuilles

Sheets(Range("A13").Range("B5") = Range("B13")
Sheets(Range("A13").Range("E5") = Range("C13")
.... et les autres, sachant qu'en A13, il y a le numéro de la feuille cible
Si ça ne fonctionne pas, il faudrait ajouter CStr() pour forcer le numéro A13 en chaîne
Sheets(CStr(Range("A13")).Range("B5") = Range("B13")

----------------------------------------------------------------------------------------
Ton idée d'hyperlien est bien, mais je préfère un menu contextuel, que je trouve plus simple à mettre en oeuvre.
En utilisant le code que j'ai mis ici
http://www.codyx.org/snippet_ajout-menu-sous-menus-menu-contextuel-excel_288.aspx
l'utilisateur n'aurait qu'à cliquer avec le bouton droit sur une cellule et choisir le menu que tu aurais inscrit pour se retrouver sur la bonne feuille. La bonne feuille étant la valeur en A sur ActiveCell.Row

----------------------------------------------------------------------------------------

J'en arrive à mon interrogation sur le besoin de 500 feuilles  ...

Est-ce que chacune des 500 feuilles a la même structure ? est-ce qu'elles ont toutes le même format ?
Si oui, qu'est-ce qui t'empêche de seulement ajouter le numéro de l'item sur une seule et même feuille et d'afficher les détails de cet item dans les cases déjà prédéfinies ?
C'est-à-dire, si tu chosis l'item 200 ou l'item 400, la feuille qui s'affichera sera identique si ce n'est le numéro de cette feuille, non ?

Autre question existentielle ... ¦¬)
Quand tu entres de nouvelles données, tu insères une ligne vide à la ligne 13. Jusque là, ça me va...
Est-ce qu'un même numéro d'appareil peut se répéter plusieurs fois dans chacune de tes feuilles de base ("suivi alim", "suivi moyens mécaniques", "suivi moyens électriques") ?
Si oui, lorsque l'utilisateur va cliquer le "supposé" hyperlien, est-ce qu'il doit se retouver dans la feuille de ce numéro et y voir afficher seulement les données de cette ligne ? Est-ce qu'il doit voir tout l'historique complet de ce même numéro ?

Désolé de toutes ces questions, mais comme je ne connais pas le fichier, c'est assez complexe à démêler tout ça ...

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
21 mars 2007 à 12:11
Pour le problème suivant :

B13 de la feuille "suivi alim" copiée dans B5 de la feuille "458"
C13 de la feuille "suivi alim" copiée dans E5 de la feuille "458"
D13 de la feuille "suivi alim" copiée dans E6 de la feuille "458"
E13 de la feuille "suivi alim" copiée dans B6 de la feuille "458"
F13 de la feuille "suivi alim" copiée dans B12 de la feuille "458"
G13 de la feuille "suivi alim" copiée dans B10 de la feuille "458"
H13 de la feuille "suivi alim" copiée dans B16 de la feuille "458"
I13 de la feuille "suivi alim" copiée dans C16 de la feuille "458"
J13 de la feuille "suivi alim" copiée dans A16 de la feuille "458"
K13 de la feuille "suivi alim" copiée dans E7 de la feuille "458"
L13 de la feuille "suivi alim" copiée dans B7 de la feuille "458"

Oui tu as raison il n'y a pas de logique car les valeurs des différentes cellules ne vont pas au même endroit d'une autre feuille.

Pour les codes suivant :

1) Sheets(Range("A13").Range("B5")) = Range("B13")
Sheets(Range("A13").Range("E5")) = Range("C13")

2) Sheets(CStr(Range("A13")).Range("B5")) = Range("B13")

J'ai essayé les deux solutions que tu ma proposé et cela ne fonctionne pas car cela me créé une erreur :

1) Sa ne fonctionne pas et sa me génère l'erreur suivante : Erreur d'exécution 13 : Incompatibilité de type.

2) Erreur de compilation : utilisation incorrect de la propriété et cela me surligne en bleu le RANGE de B13 et en jaune Private Sub CommandButton1_Click() dans les deux cas donc je ne place peut-être pas le code au bon endroit.
Je l'ai placé dans le code interne à mon userform avec le reste du code et juste en dessous du code qui permet la copie des variables dans la ligne 13 qui me semble bon pourtant.
Ou alors l'utilisation de range n'est pas approprié m'enfin je ne sais pas trop ce qui se passe.

---------------------------------------------------------------------------------------------------------

Pour l' idée de menu contextuel je n'ai pas très bien compris le but mais cela fonctionne suivant le code à l'adresse suivante : http://www.codyx.org/snippet_ajout-menu-sous-menus-menu-contextuel-excel_288.aspx
J'ai suivi les instructions et lorsque je fais un clique droit j'ai bien un menu "test" puis un sous menu "sous menu 1 et 2".
Mais je ne vois pas comment faire pour aller à la feuille correspondant à la valeur de la colonne A car je crois que je m'embarque dans une chose qui me dépace ; car en temps que débutant je ne comprend pas tout. Mais l'idée me semble très interressante.

----------------------------------------------------------------------------------------------------------

Sur tes interrogations sur les 500 feuilles :

Est-ce que chacune des 500 feuilles a la même structure ? est-ce qu'elles ont toutes le même format ?
Oui elle ont toutes le même format et la même structure mais je ne pense pas que tout mettre dans la même feuille serait judicieux car cela serait trop complexe pour l'utilisateur.

Est-ce qu'un même numéro d'appareil peut se répéter plusieurs fois dans chacune de tes feuilles de base ("suivi alim", "suivi moyens mécaniques", "suivi moyens électriques") ?
Nan il ne peut pas y avoir deux fois la même fiche de vie car tout les appareil sont différents.Un appareil = une feuille (fiche de vie).

Si oui, lorsque l'utilisateur va cliquer le "supposé" hyperlien, est-ce qu'il doit se retouver dans la feuille de ce numéro et y voir afficher seulement les données de cette ligne ? Est-ce qu'il doit voir tout l'historique complet de ce même numéro ?
Losque l'utilisateur clique sur le lien hypertexte je veux que cela aille sur la fiche de vie correspondante au numéro directement et sur cette fiche de vie il y a des informations (type, nom, constructeur,etc...) mais également des infos concernant sont étalonnage qui varient d'un appareil à un autre suivant sont cycle d'étalonnage (qui varient de 1AN à 3ANS)

Ne t'excuse pas tu as raison de me poser des questions c'est plutôt moi qui devrait m'excuser de ne pas être assez clair dans mes explications.

Merci et A bientôt.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
22 mars 2007 à 10:42
Bon, après le petit problème de Firefox d'hier, j'ai réécrit le code de mémoire plutôt qu'un copier/coller d'Excel comme je l'avais fait précédemment et oui, j'ai encore fait une erreur ...
Une parenthèse n'était à sa place ... Ceci devrait mieux fonctionner
Sheets("" & Range("A13") & "").Range("B5") = Range("B13")

En lisant tes explications sur ces 500 feuilles, je peux voir qu'effectuer la tâche en utilisant une seule feuille comme je le préconisais serait assez complexe, étant donnée qu'elles contiennent des données uniques à celles-ci et qu'on ne retrouve pas ces données ailleurs dans le programme...

J'opterais pour le menu contextuel plutôt que les hyperliens que je trouve un peu complexes et pas vraiment "conviviaux" pour le programmeur... mais ça reste une question de choix et les 2 méthodes pourraient tout de même cohabiter. Il serait peut-être intéressant de copier un hyperlien sur chacune des 500 feuilles qui ramèneraient l'utilisateur vers la page principale et utiliser des menus pour se déplacer sur la fiche de vie nécessaire selon la ligne choisie dans une des pages principales...

MPi
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
22 mars 2007 à 11:44
D'accord mais ne t' inquiete pas pour l' erreur puisque l'autre solution fonctionne très bien.

Oui effectivement cela serait très très complexe d'avoir tout dans une seule feuille et donc je préfère garder les 500 feuilles.

Pour le menu contextuel je voudrais que l'on approfondisse le sujet car cela me semble complexe et j'aimerais comprendre comment je pourrais faire pour lors d'un appui sur n'importe laquelle des cellules de la colonne A sur mes trois tableaux allez directement sur la fiche de vie correspondante.

Tu m'as dit que l'utilisateur n'aurait qu'à cliquer avec le bouton droit sur une cellule et choisir le menu que j'aurais inscrit pour se retrouver sur la bonne feuille. La bonne feuille étant la valeur en A sur ActiveCell.Row.

Mais je n'arrive pas à bien cerner se problème-ci.

http://www.codyx.org/snippet_ajout-menu-sous-menus-menu-contextuel-excel_288.aspx
J'ai suivi les instructions de l'adresse ci-dessus et lorsque je fais un clique droit j'ai bien un menu "test" puis un sous menu "sous menu 1 et 2".
Mais je ne vois pas comment faire pour aller à la feuille correspondant à la valeur de la colonne A car en temps que débutant je ne comprend pas tout. Mais l'idée me semble très interressante.

Donc quel serait le code et ou devrais-je le mettre pour réussir à aller directement sur la fiche de vie (il ne faut pas 500 sous menu, 1 pour chaque fiche?)?

A bientôt.

Steven.
0
steven_tpnd Messages postés 34 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 23 mars 2007
23 mars 2007 à 10:33
Merci beaucoup MPi pour ce code pour le menu contextuel car cela marche super bien!!

C'est vraiment gentil à toi de m'avoir aider, je te remercie infiniment!

A bientôt et encore merci!
0
Rejoignez-nous