> Tous les forums > Forum Bureautique
 besoin d'aide, sous Excel, boîte de dialogue +++
Ajouter un message à la discussion
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]
n2c_coxiste
  Posté le 26/04/2007 @ 18:29 
Aller en bas de la page 
Petit astucien
bonjour à toutes et à tous,
je voudrais avoir l'avis de spécialistes (que vous êtes) sur la
faisabilité d'une idée que j'ai en tête...
le contexte est le suivant:
- gestion des sytèmes incendie dans une industrie, ou sur un
navire...
- possession d'une 'algoliste' (BdD) sous excel, avec l'ensemble des
détecteurs incendie (les champ sont les suivants; Automat VFS ZONE LOC
Folio FAI ZC - ZNC Voie Désignation du Local Coffret JDT Niveau Local
Détecteur Type Capteur Ligne Collective Asservi 01 Asservi 02 Asservi
03 Asservi 04 Asservi 05 Asservi 06 Asservi 07 Asservi 08 Asservi 09
Asservi 10 Asservi 11 Asservi 12 Asservi 13 Asservi 14 Asservi 15
Asservi 16 Asservi 17 Asservi 18 Asservi 19 Asservi 20

- possession des schémas des bâtiments, locaux, avec les étages, les
matériels contenus, les détecteurs, les téléphones, les moyens de
lutte, les repérage des locaux... bref, des plans complets sous
VISIO2003.

Le but de la manip est le suivant:
- créer une boîte de dialogue sous excel, qui s'ouvre automatiquement
au lancement du XLS
- masquage des menus d'excel, et mise en plein écran de cette boîte
de commande.
- proposer à l'utilisateur diverses fonctions (boutons radio, listes,
zone de saisie...
- la saisie ou la sélection de données (n° de local, n° de détecteur
incendie...) doit ouvrir un fichier contenant ou montrant le local
désiré. Pour un soucis de praticité, le fichier contenant le plan sera
sous pdf (acrobat reader étant installé sur les postes).
- il faut passer des paramètres à ACROBAT en même temps, recherche de
la chaîne, zoom à xxx% sur le NOM ou la chaîne de caratère saisie dans
la boîte excel...

Voilà ce que souhaiterai réaliser.
L'entreprise dispose de EXCEL 2000, visio2000, acrobat reader, et un
poste technique avec ACCESS2003, la pack office 2003 en fait, acrobat
pro.

Pensez-vous celà réalisable? ---> la démo pour bonzaï est presque adaptée, mais je préfererai une boîte de dialogue sous excel...

j'ai placé des fichiers exemples ici: http://kreg.free.fr/EXCEL/
Merci par avance.



Modifié par n2c_coxiste le 26/04/2007 18:30
Publicité
SdQY
 Posté le 26/04/2007 à 18:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Message original par n2c_coxiste

...

Le but de la manip est le suivant:
- créer une boîte de dialogue sous excel, qui s'ouvre automatiquement
au lancement du XLS
- masquage des menus d'excel, et mise en plein écran de cette boîte
de commande.
- proposer à l'utilisateur diverses fonctions (boutons radio, listes,
zone de saisie...
- la saisie ou la sélection de données (n° de local, n° de détecteur
incendie...) doit ouvrir un fichier contenant ou montrant le local
désiré. Pour un soucis de praticité, le fichier contenant le plan sera
sous pdf (acrobat reader étant installé sur les postes).
- il faut passer des paramètres à ACROBAT en même temps, recherche de
la chaîne, zoom à xxx% sur le NOM ou la chaîne de caratère saisie dans
la boîte excel...

Bonjour,
C'est tout à fait possible avec une macro.
Pour qu'elle s'active à l'ouverture il faut qu'elle porte un nom particulier "auto_open" je crois.

galopin01
 Posté le 26/04/2007 à 19:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

C'est certainement très faisable... par une entreprise de développement appropriée. Ou par un allumé en mal de programmation VBA. mais le monde des forums étant ce qu'il est et celui des programmeurs au chomage à peu près aussi vaste, je doute fort que tu trouves ici ou ailleurs une solution clef en main.

Dans le monde d'Excel les boites de dialogue +++ s'appellent des Userform (en abrégé USF) et leur maitrise à un tel niveau nécessite quelques années de persévérance. Quoi que... s'il s'agit de faire un "bonzaï like" ça peut se révéler relativement simple. A toi de proposer une ébauche : sinon il est clair que bmp ou pdf le problème est le même. La seule difficulté réside dans l'ampleur de ce que tu mets dans tes USF en matière de bouton radio, boite à cocher, etc...

Bien que facilement réalisable le masquage des menus Excel rencontre une vive opposition sur la plupart des forums Excel sur internet et il est fort improbable que tu y trouves quelqu'un pour t'accompagner sur cette voie.

Pour la connexion avec Visio je ne sais pas, Access no problème mais y faut fatiguer grave, je ne vois pas forcément l'intérêt.

C'est juste pour amorcer le débat...

Bon appétit !

A+

n2c_coxiste
 Posté le 26/04/2007 à 19:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut à toutes et à tous,

quelle rapidité!

j'ai déjà trouvé des bribes de fonctions ou de macro pour les *.pdf mais je n'ai pas lancé l'affaire. (shell.execute et sendkeys sont les deux fonctions référencées qui fonctionnent)

J'ai déjà fait une ébauche de la USF ou dialoguebox... elle doit pouvoir sélectioner 1 parmis plisieurs onglets en fonction du radiobouton coché, et ceci fait pointer vers des listes différentes (plages identiques sur des onglets ou feuilles différentes sus-sélectionnées).

Je voudrais pouvoir choisir mon critère de recherche, par local, niveau, bâtiment, détecteur...

Puis afficher dans cette même boîte les infos que je juge utile... (contenu du local par exemple, liste des détecteurs incendie...)

Puis pouvoir lancer le pdf 'kivabien' en plein écran, zoomé, centré sur l'appareil précédemment recherché (pdf vectoriel)

il existe une liste de SENKEYS, et sur le forum google.excel le sujet a été développé par plusieurs voies différentes.

http://groups.google.fr/group/microsoft.public.fr.excel/search?group=microsoft.public.fr.excel&q=appli+pdf&qt_g=Rechercher+dans+ce+groupe

Je fais ça pour démontrer à mes chefs qu'on peut faire mieux que le filtre automatique, que nous sommes quelques dizaines de personnes à utiliser en permanence.

Si je fais ma démo, on prends un stagiaire qui fera qque chose de carré, suivant un cahier des charges que nous aurons préalablement rédigé. ça entre dans un projet détude par exemple... Mais je dois convaincre de la faisabilité de la chose (et je suis convaincu, ayant programmé moi-même il y a quelques lustres, que c'est bien réalisable...

Merci par avance.

Greg.

galopin01
 Posté le 27/04/2007 à 03:14 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,
développer une usine à gaz sur un USF c'est pas un problème, quoique je ne suis même pas certain qu'un USF soit nécessaire. Une simple feuille développée en Formulaire devrait être toute aussi efficace et bien moins complexe à programmer.

Ce qui me parait le plus nébuleux, c'est la possibilité de passer tes paramètres à Acrobat en VBA pour le reste on trouvera toujours une solution. Il faut donc bien tester les limites de faisabilité de ce point précis avant de te lancer sur le système de sélection, sinon tu auras travaillé pour rien.

Les stagiaires capables de développer à ce niveau sur VBA ne me semblent pas très nombreux... De plus à première vue le sujet me semblant assez impressionnant, il me semble assez probable qu'on débouche rapidement sur des problèmes d'Array, Collection, Modules de classe... et là on rentre carrément dans un no man's land !

Bien poser le problème avant de te lancer car à ce niveau, tu ne trouveras que des aides très ponctuelles sur des points très précis avec exemples et fichiers joints à l'appui.

[Edit] Il ne serait peut-être pas inutile de faire un petit tour également sur d'autres forums moins généralistes MPFE - XLD

A+



Modifié par galopin01 le 27/04/2007 03:24
n2c_coxiste
 Posté le 28/04/2007 à 13:59 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

développer une usine à gaz sur un USF c'est pas un problème, quoique je ne suis même pas certain qu'un USF soit nécessaire. Une simple feuille développée en Formulaire devrait être toute aussi efficace et bien moins complexe à programmer.

je n'avais pas pensé au formulaire, mais c'est une piste à creuser, si c'est plus simple et aussi efficace, pourquoi pas.

Ce qui me parait le plus nébuleux, c'est la possibilité de passer tes paramètres à Acrobat en VBA pour le reste on trouvera toujours une solution. Il faut donc bien tester les limites de faisabilité de ce point précis avant de te lancer sur le système de sélection, sinon tu auras travaillé pour rien.

j'ai zieuté des extraits de prog, ça à l'air possible... La majorité des programmeur est quand même nettement contre l'utilisation des SENDKEYS...

Les stagiaires capables de développer à ce niveau sur VBA ne me semblent pas très nombreux... De plus à première vue le sujet me semblant assez impressionnant, il me semble assez probable qu'on débouche rapidement sur des problèmes d'Array, Collection, Modules de classe... et là on rentre carrément dans un no man's land !

Bah, on a déjà eu des stagiaires qui ont fait de belle choses... mais il faut tomber sur le bon candidat, c'est vrai.

Bien poser le problème avant de te lancer car à ce niveau, tu ne trouveras que des aides très ponctuelles sur des points très précis avec exemples et fichiers joints à l'appui.

Je fais ça le soir, à la place de la TV... mais mon but n'est pas de développer entièrement l'appli, juste démontrer à mes chefs que des pistes sont à approfondir pour trouver de la souplesse et de l'ergonomie au quotidien.

[Edit] Il ne serait peut-être pas inutile de faire un petit tour également sur d'autres forums moins généralistes MPFE - XLD

A+

je traine aussi là bas... et sur le group EXCEL de Google; qui est pas mal aussi.

n2c_coxiste
 Posté le 22/05/2007 à 19:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut à tous,

c'est encore moi......... j'ai réussi certaines choses... mais je bloque sur des bugg de débutant, j'en suis désolé, et vous sollicite à nouveau.

Erreur "1004", UserForm ou UserForm1, déclaré dans "Feuilles", lancé par un bouton DEMO sur une page du classeur.

je place le fichier ici: http://kreg.free.fr/EXCEL/DETECTEURS%20INCENDIE%20TR0%20%e0%209%20(indice%203%20).XLS

les commandes SENDKEYS pour faire faire de manips à AcroRead fonctionnent bien, le seul pb est que je ne sais pas passer une variable dans la ligne de commande... (les SENDKEYS ne sont pas dans ce fichier joint)


Sub Bouton18_QuandClic()

RetVal = Shell("H:\Program Files\Adobe\Acrobat 5.0\Reader\AcroRd32.exe Afficher_", vbNormalNoFocus)
While Not EstActive(RetVal)
Wend

SendKeys "^l", True
'le ^m c'est pour zoom sur mesure, passage de 200 en paramètre, % c'est une TAB, ~ c'est ENTER
SendKeys "^m 200 % ~", True 'OK, fonction correcte, zoom à 200% avec validation par TAB et ENTER
SendKeys "^f NC 234 % ~ {ESC}", True 'recherche (NC 234) et quitte la boîte de recherche, (NC 234) est au centre de la page
Application.Wait Now + TimeValue("00:00:01")
'SendKeys "{ESC}", True
'SendKeys "^a^c", True
'SendKeys "%{F4}", True
'ActiveSheet.Paste

End Sub

Voilà, je voudrais remplacer NC 234 par une variable qui se nomme Local_ dans ma macro, et je ne perviens pas à trouver la synthaxe adéquate... vous auriez une idée?

Pour ce qui concerne l'erreur "1004", je ne l'ai pas en permanence, et si je parviens à afficher le UserForm1, celui-ci ne s'initialise pas... les listes restent vides... WhY?!?

Merci pour votre aide précieuse.

Greg.


galopin01
 Posté le 22/05/2007 à 19:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonsoir,

pas eu le temps de creuser mais pour le sendkey (tout à fait au hasard) tu peux essayer quelques concaténations du genre :

"^f " & Local_ & " % ~ {ESC}"

"^f {" & Local_ & "} % ~ {ESC}"

Pour le reste il faudra attendre un peu.

A+

n2c_coxiste
 Posté le 22/05/2007 à 20:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Sub cherche_local()
'
' cherche_local Macro
' Macro enregistrée le 20/05/2007 par Greg.
'

Local_ = "L106"
Sheets("Feuille_temporaire").Select
Cells.Select
Selection.Clear
Sheets(Sous_U).Select
Selection.AutoFilter Field:=11, Criteria1:=Local_, Operator:=xlAnd
Cells.Select
Selection.Copy
Sheets("Feuille_temporaire").Select
ActiveWindow.SmallScroll Down:=-12
Range("A1").Select
ActiveSheet.Paste
NB_lignes = [l256].End(xlUp)(2).Row - 2 '= Numéro de la ligne
MsgBox "Vous avez sélectionné " & Sous_U & " " & "le " & Local_ & " contient " & NB_lignes & " Détecteurs Incendie"
File_ = ([l256].End(xlUp)(0, 29)) & ([l256].End(xlUp)(0, 30)) & ([l256].End(xlUp)(0, 31)) & ".pdf"
Rep_ = "K:\SHQ\"
Afficher_ = Rep_ & File_

Afficher_ = "K:\SHQ\" & "Visio-BL_Ttes_Tranche_LOCAL_ELEC_-03,00m.pdf"
MsgBox "le fichier " & Afficher_ & " va être pointé "

'RetVal = Shell("H:\Program Files\Adobe\Acrobat 5.0\Reader\AcroRd32.exe Afficher_", vbNormalNoFocus)
RetVal = Shell("H:\Program Files\Adobe\Acrobat 5.0\Reader\AcroRd32.exe K:\SHQ\Visio-BL_Ttes_Tranche_LOCAL_ELEC_-03,00m.pdf", vbNormalNoFocus)
While Not EstActive(RetVal)
Wend
Application.Wait Now + TimeValue("00:00:01")
SendKeys "^l", True

'le ^m c'est pour zoom sur mesure, passage de 200 en paramètre, % c'est une TAB, ~ c'est ENTER
SendKeys "^m 200 % ~", True 'OK, fonction correcte, zoom à 200% avec validation par TAB et ENTER
'SendKeys "^f L110 % ~ {ESC}", True 'recherche (L110) et quitte la boîte de recherche, (NC 234) est au centre de la page
SendKeys "^f " & Local_ & " % ~ {ESC}"
'SendKeys "^f {" & Local_ & "} % ~ {ESC}"
Application.Wait Now + TimeValue("00:00:01")
End Sub
SendKeys "^f " & Local_ & " % ~ {ESC}"

Merci, celle_ci fonctionne à merveille!

Si ça peut intéresser les programmeurs qui passent par ici, il y a cette page belge sur ce sujet: http://users.skynet.be/micdub/vba6.htm

Merci encore. (ça prends forme peu à peu)

galopin01
 Posté le 22/05/2007 à 21:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

tu pourrais remplacer les

Application.Wait Now + TimeValue("00:00:01")

par :

DoEvents

ça devrait permettre de supprimer le :

While Not EstActive(RetVal)
Wend

A+



Modifié par galopin01 le 22/05/2007 21:49
galopin01
 Posté le 22/05/2007 à 21:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Ton lien de 22/05/2007 : 19:39 ne fonctionne pas.

n2c_coxiste
 Posté le 22/05/2007 à 22:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut,

merci, je prends note, surtout que le EstActive me donne des erreurs...

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Sub Findwin()
Dim WinWnd As Long
'Name of window opened
Ret = "Rapport de Stage"
10 WinWnd = FindWindow(vbNullString, Ret)
While WinWnd <> 0
Delay (0.1)
GoTo 10
Wend

End Sub

Sub Delay(rTime As Integer)
Dim OldTime
OldTime = Timer
Do
DoEvents
Loop Until Timer - OldTime > 0.1
End Sub

le lien suivant? http://users.skynet.be/micdub/vba6.htm

chez moi ça tourne. Sinon si c'est le REP EXCEL sur mon site, tenter de piocher manuellement dans http://kreg.free.fr/EXCEL/

prendre le 2e fichier excel, celui qui pèse 1,8Mo.

Greg.



Modifié par n2c_coxiste le 22/05/2007 22:28
n2c_coxiste
 Posté le 27/05/2007 à 17:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour à tous,

je bloque sur une morceau de code...

situation: je recherche dans une colonne donnée un STRING issu d'une InputBox. (typiquement L2:L1249 ou dans la plage nommée LOCAL)

je voudrais copier les 'x' lignes qui contiennent cette chaîne recherchée, et coller ces lignes à partir de "B1321"

De ses données extraites, je fais quelques bricoles.... extraction, misen en forme, concaténation conditionelles... puis je veux effacer cette sélection.

Vous avez une idée??? merci, car ça fait quelques heures que je sombre peu à peu!

galopin01
 Posté le 27/05/2007 à 19:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Euh... Si ton code est aussi clair que tes questions, pas étonnant que tu bloques !

Quand une question est bien posée, le problème est pas loin d'être résolu.

A+

n2c_coxiste
 Posté le 29/05/2007 à 17:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Galopin,

ça peut venir de là, mais même si ma question était claire (ne fusse que dans mon esprit), je ne pense pas que ça aie pu résoudre l'énigme qui se pose à moi.

Je reprends:

je stocke une chaîne de caractère (Une lettre suivie d'un nombre à 3 chiffres; ex: G103 stocké dans Local_)

Je désire rechercher dans une colonne définie (nommée LOCAL) les occurences de cette chaîne

Puis, copier les lignes concernées dans une feuille temporaire, ou en fin de tableau (ligne 1321).

Lorsque j'ai extrait ce petit monde (ce que je ne parviens pas à faire pour l'instant), j'affiche les différentes données dans mon USF (liste des détecteurs incendie du local, type de détecteur, adressable individuellement ou disposé sur une boucle, dans ce cas le n° de la boucle, référence de la FicheActionIncendie (FAI) correspondant à ce local... et bouton pour pouvoir afficher le plan du local (PFD avec SENKEYS)

C'est l'étape de création du filtre auto qui me bloque... je vais placer le fichier dans me rep qui va bien: lien = http://kreg.free.fr/EXCEL/gliste%20ind1.xls

Je me suis basé sur une fichier tutorielèsque belge pour avoir une base... j'aurais aimé dédié le code un peu mieux pour moi,mais la génération des listes rest un peu obscure à mes yeux)

http://users.skynet.be/micdub/tele1.htm

D'avance merci,

Greg.



Modifié par n2c_coxiste le 29/05/2007 17:45
galopin01
 Posté le 29/05/2007 à 19:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Ben voilà...

Je vois pas l'intéret du filtre dans cette situation.

Une petite macro qui cherche toutes les occurences de "G103" ans la colonne L et copie la ligne concernée dans une feuille "cible"

Sub Test()
Dim i As Integer, o As Range
i = 1
'On initialise une feuille cible
Sheets.Add
ActiveSheet.Name = "cible"
'On se positionne sur la feuille source
Sheets("Tr 1-2-9-0").Activate
'Pour chaque cellule dans la colonne L
For Each o In Range("lelocal")
'Si la cellule contient "G103"
If o.Value = "G103" Then
'On copie toute la ligne dans la feuille cible
o.EntireRow.Copy Sheets("Cible").Range("A" & i)
'Et on incrémente le compteur de ligne...
i = i + 1
End If
Next
End Sub

Bien sur on peut "variabiliser" le string recherché...

A+

Soutenez PC Astuces

PC Astuces a besoin de vous pour survivre. Nos conseils et astuces vous ont aidé ? Vous avez résolu un problème sur votre ordinateur ? Vous avez profité de nos bons plans ? Aidez-nous en retour avec un abonnement de soutien mensuel.


5 € par mois 10 € par mois 20 € par mois


Gérer son abonnement

n2c_coxiste
 Posté le 29/05/2007 à 20:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Galop d'Ain

bien vu, je n'ai pas pensé à ça, mais c'est parfait!

il y a sans doute bien des façons de parvenir à ce saint graal... mais là c'est limpide!

Merci à toi, je continue mon exploration (suis débutant en fait, même si je sui curieux et ai déjà pondu quelques lignes dans le passé!)

Greg, from N2C.

n2c_coxiste
 Posté le 29/05/2007 à 22:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Sub vasy()
Dim z As Integer, o As Range
z = 1
'On initialise une feuille cible
Sheets.Add
ActiveSheet.Name = "temp"
'On se positionne sur la feuille source
Sheets(Sous_U).Activate
MsgBox "on recherche " & Local_
Rows("1:1").Select
Selection.Copy
Sheets("temp").Select
Range("A1").Select
ActiveSheet.Paste

'Pour chaque cellule dans la colonne L
For Each o In Range("lelocal")
'Si la cellule est égale à la chaîne Local_

If o.Value = Local_ Then
'On copie toute la ligne dans la feuille cible
o.EntireRow.Copy Sheets("temp").Range("A" & 2 + z)
'Et on incrémente le compteur de ligne...
z = z + 1
End If
Next
End Sub

Ha ben ZUT alors,

ça copie bien les lignes, sauf la colonne L (lelocal)

gloups!

Correctif, la chaîne saisie dans une autre partie de code ne garde pas sa valaur... donc ça me cherche la chaîne ""

Arf, trop drôle!!! (J'aurais du déclarer ça en Public???)

ça c'est corrigé en replaçant une ligne Local_ = InputBox("local recherché: ")

Donc tout est bon............. méa coulpa.



Modifié par n2c_coxiste le 29/05/2007 22:19
minimiss
 Posté le 08/06/2007 à 10:40 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne

salut a tous!

je rencontre un petit probleme avec mon pc perso actuellement j'aurais besoin de petit conseils ou mieux de solutions.

je viens d'acheter un pc portable il y a 1 mois, dc qui utilise windows vista (patience!!) hier j'ai travaillé sur des dossiers word et exel (2007) ms en voulant les retoucher un petit peu hier soir je me suis apercu que je ne peux plus travailler dessus!!!

lorsque je veux taper un texte lordi me donne un message du genre " aucune modification possible car la selection est verouillée" c'est surement une erreur de ma part ms je ne vois pas ce ke j'ai pu faire...

merci de me repondre rapidement.

n2c_coxiste
 Posté le 08/06/2007 à 16:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut à toi,

je pense que tu as mal posté ta requête... mais bon.

je ne connais pas Vista, et la suite office 2007... tu n'as pas ouvert les doc 2x, sous deux sessions différentes?

Relance la machine... CTRL + ALT + SUPP pour voir si office est encore ouvert....

Après il y a des moulinettes pour débugger les fichiers OFFICES corrompus...

A tester. (rechercher sur Google document ou fichier + office ou word ou excel + corrompus ou verrouillé)

Voilà, tiens nous au jus.

Greg.

n2c_coxiste
 Posté le 19/11/2007 à 17:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour à tous,

je reviens à la charge, avec les lignes de code... j'ai une recopie qui se passe mal, il me manque des cellules à la recopie.

dans une feuille "temp" je recopie la ligne 1 d'une autre feuille de l'onglet. Jusque là, c'est ok.

puis, à l'aide la la petite macro 'kivabien' de Mister Galopin, je recopie les lignes entières qui m'intéressent, à la suite de la première ligne dans la feuille "temp"

Et là, toutes les cellules n'y sont pas, j'ai un décalage entre la ligne 1 et les suivantes (les titres ou noms de colonnes ne correspondent plus)

l'outil de recherche
  1. Sub vasy()
  2. Dim z As Integer, o As Range, Local_ As String
  3. Local_ = InputBox("saisir le local recherché ")
  4. z = 1
  5. 'On initialise une feuille cible
  6. Sheets.Add
  7. ActiveSheet.Name = "temp"
  8. 'On se positionne sur la feuille source
  9. Sheets(Sous_U).Activate
  10. MsgBox "on recherche " & Local_
  11. Rows("1:1").Select
  12. Selection.Copy
  13. Sheets("temp").Select
  14. Range("A1").Select
  15. ActiveSheet.Paste
  16. For Each o In Range(LeLocal_)
  17. If o.Value = Local_ Then
  18. o.EntireRow.Copy Sheets("temp").Range("A" & 2 + z)
  19. z = z + 1
  20. End If
  21. Next
  22. MsgBox "il y a " & z - 1 & " " & "détecteurs trouvés dans le local " & Local_
  23. Call afficher_data
  24. End Sub

vous avez une pitite idée de ce qui peut bugger?

Merci par avance,

Greg.

galopin01
 Posté le 19/11/2007 à 17:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonsoir,

(non testé...)

remplacer les lignes 11 à 17

MsgBox "on recherche " & Local_
'On n'active surtout pas "temp"
Sheets("temp").Rows("1:1").Copy Sheets("temp").Range("A1")

'Pour chaque cellule dans la colonne L
...

Le reste devrait suivre.

A+

n2c_coxiste
 Posté le 19/11/2007 à 18:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Galopin,

donc cette ligne permet en un seul coup de recopier la ligne contenant les noms de colonne dans la feuille temporaire. 'sans aller-retour de 'sheets'.

j'ai remplacé le petit morceau par cette ligne.

Par contre, je pense que c'est la partie suivante qui pose problème, quand on sélectionne les lignes contenant une certaine données (Local) et qu'on les récopie une à une dans la feuille 'temp'

N'y a t-t-il pas de soucis, quand les cellules sont vides (mais j'ai remplacé "" par des données), ou si il y a des plages nommées?

peut-on remplacer cette ligne:

o.EntireRow.Copy Sheets("temp").Range("A" & 2 + z)

par une ligne un chouïlla différente

o.Rows("1:1").Copy Sheets("temp").Range("A" & 2 + z)

en l'écrivant je me remds compte du non sens... j'ai l'impression que "EntireRow" est en cause. C'est une piste possible, ou il y a un truc énorme à côté?!?

Arf, la route est encore longue... Merci pour ta patience.

j'ai placé une copie au cas ou (http://clopig.free.fr/ExcelGreg/gliste%20ind3.xls)



Modifié par n2c_coxiste le 19/11/2007 18:06
galopin01
 Posté le 19/11/2007 à 18:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Ben...

j'ai pense pas tel quel ça me parait très bien d'ailleurs c'est "in extenso" le code de ma macro test.

Je vais refaire quelques essais à partir de ton fichier !

Waiting...

galopin01
 Posté le 19/11/2007 à 18:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien
... si tu me donnes le mot de passe !

Modifié par galopin01 le 19/11/2007 18:22
n2c_coxiste
 Posté le 19/11/2007 à 18:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Les feuilles sont protégées par "OK" au cas ou je ferai n'importe koi!!! (par le biais de la macro)

je fais un essai de téléchargement depuis le site pour vérifier, mais normallement, pas de passe. Désolé pour ce hic

Greg.

galopin01
 Posté le 19/11/2007 à 18:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Pas besoin de mot de passe...

J'ai pas eu le temps de vraiment fouiller mais à mon avis le seul problème pourrait-être que tes feuilles ont pas la même structure ?

C'est quoi la feuille "Sous_U" ?

A+

n2c_coxiste
 Posté le 19/11/2007 à 18:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

dans l'USF, je choisi la SousUnité Technique, qui pointe vers une des 4 feuiles.

je ne fais les essais que sur l'onglet Tr 1-2-9-0 qui est le plus à jour pour le moment. Les autres SousU (feuilles) seront remplacées et auront la même structure que la première. A moins que la recherche de pointe pas vers la bon onglet!!!

Vais voir ça, c'est possible!!!!

Merci, je vais creuser!

Greg.

galopin01
 Posté le 19/11/2007 à 18:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

le problème c'est :

For Each o In Range("lelocal") qui pointe sur la feuille old Tr 1-2-9-0 old

alors évidement si tu travailles sur la feuille Tr 1-2-9-0 y a un blème !

A+

n2c_coxiste
 Posté le 19/11/2007 à 18:59 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Comment as-tu vu celà?

j'en reste pantoit!!!

galopin01
 Posté le 19/11/2007 à 19:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Si je peux me permettre une suggestion, tu travailles sur beaucoup de Range au nom pas forcément évocateur.

Essai de travailler un peu plus sur des instances de feuilles et de préférence avec les noms de feuilles VBA :

Pour le débogage, c'est plus cool ! Ensuite tu pourras variabiliser. Enfin ce que j'en dis... Moi c'est la première chose que j'ai fait :

[Feuil1].Activate
...
For Each o In Range("lelocal") ' Voyons voir... y pointe ou celui-là

Et Bingo !

n2c_coxiste
 Posté le 19/11/2007 à 19:09 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Oui, c'est vrai, j'ai essayé de travailler avec des plages nommées, sur le conseil des forumeurs, mais j'ai un peu négligé leur devenir au fil du temps, et surtout quand j'ai remplacé Tr1-2-9-0 par le nouvelle feuille à jour, qui contient plus de données... l'autre a gardé mes plages nommées.

Bon, je reprends tout au début, c'est trop flou. Merci pour ta précieuse aide, j'aurais pu tourner en rond longtemps. (vu que je ne cherchais pas du bon côté)

Greg.

n2c_coxiste
 Posté le 19/11/2007 à 19:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

en fait c'est encore pire que ça... en fonction de la Sous_U sélectionnée, je stocke dans la variable Tr1-1-9-0 ou les autres Tr3-4-8-0 ou Tr5-6-7-0 dans Sous_U puis dans lelocal je stocke lelocal1290 ou lelocal3480 ou lelocal5670

je dois donc bien définir ses trois dernières plages... allez, v essayer ça de suite!

Sous_U
  1. Private Sub OptionButton2_Click()
  2. Sous_U = "Tr 1-2-9-0"
  3. Sheets(Sous_U).Activate
  4. 'Range("B1, AE1300").Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
  5. Range("C2").Select
  6. ActiveSheet.Protect "OK"
  7. LeLocal_ = "lelocal1290"
  8. DT_ = "DT_1290"
  9. 'Sheets("temp").Select
  10. 'ActiveWindow.SelectedSheets.Delete
  11. 'Call MiseàJour
  12. End Sub



Modifié par n2c_coxiste le 19/11/2007 19:36
n2c_coxiste
 Posté le 19/11/2007 à 21:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Ben voilà,

merci, merci et encore merci.

Grâce à ton aide j'ai pu démêler tout ce petit monde... et hop, ça tourne bien (rechercher sur Tr1-2-9-0 les données d'un local comme le L604 par exemple)

Par contre, j'ai vu un autre piège; dans les feuilles, certains locaux ont 1, ou 2, ou 3 espaces avant le nom!!! Par exemple, le W701 est écrit " W701" donc en faisant des tests, ça ne me donnait rien... halalala...

Donc je dois travailler deux choses, la boîte de saisie (pour obliger à respecter majuscules et interdire les espaces) et dans la fonction de recherche, rechercher la chaîne et pas l'expression exacte.

j'ai placé la fichier mis à jour, c'est plus complet...

Encore un grand merci, sans vos excel-ant forums, je n'en serai pas là!

Greg.



Modifié par n2c_coxiste le 19/11/2007 21:28
n2c_coxiste
 Posté le 17/12/2007 à 17:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour,

je reviens à la charge avec une nouvelle petite question....

Je voudrais extraire des données par rapport à un critère sur une colonne; recopier les lignes entières quand la donnée d'une plage ne commence pas par un chiffre suivi d'un espace...

extraire si pas chiffre en premier...
  1. Sub SelAUTRE()
  2. Call Deltemp
  3. Sous_U = "Tr 1-2-9-0"
  4. '========================================================================================
  5. ' le but ici est d'extraire des 3 SousU les zones (Zone_) dont le nom ne commence pas par
  6. ' un chiffre puis un espace.
  7. '========================================================================================
  8. Dim z As Integer, o As Range, Zone_ As String
  9. 'Zone_ = InputBox("saisir la Zone recherché ")
  10. z = 1
  11. 'On initialise une feuille cible
  12. Sheets.Add
  13. ActiveSheet.Name = "temp"
  14. 'On se positionne sur la feuille source
  15. Sheets(Sous_U).Activate
  16. MsgBox "on recherche " & Zone_
  17. Sheets(Sous_U).Rows("1:1").Copy Sheets("temp").Range("A1")
  18. For Each o In Range(LeLocal_)
  19. ' Quels sont les jocker dans une recherche comme celle-ci???
  20. ' Left$(Range("A1").Value, 2)
  21. 'If o.Value <> ("1*" Or "2*" Or "9*" Or "0*") Then
  22. If Left$(o.Value, 1) = "1" Then
  23. o.EntireRow.Copy Sheets("temp").Range("A" & 2 + z)
  24. z = z + 1
  25. End If
  26. Next
  27. MsgBox "il y a " & z - 1 & " Zones trouvées sans Chiffre 1, 2, 9 ou 0 "
  28. 'Call afficher_dataDT
  29. End Sub

Donc, j'ai recherché ce qui était dispo dans ma collection de routines, et j'ai fait une tentative, vaine...

If Left$(o.Value, 1) = "1" Then
pour tenter de comparer le premier caractère de gauche par rapport à "1" pour commencer... mais ça ne fonctionne pas...
Quelque chose existe?
Quel est le jocker officiel dans les macro? (j'ai essayé "1 ?" mais nada...) ou alors "1 " & ?
Merci par avance.
Greg.

galopin01
 Posté le 17/12/2007 à 18:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonsoir,

joker ? j'ai pas ça en magasin.

Une routine comme ça peut faire l'affaire :

  1. Sub test()
  2. For Each o In Selection
  3. Y = Asc(Left(o.Value, 1)) > 47 And _
  4. Asc(Left(o.Value, 1)) < 58 And _
  5. Mid(o.Value, 2, 1) = " "
  6. If Not Y Then MsgBox "Ligne " & o.Row
  7. Next
  8. End Sub

Sub test()
For Each o In Selection
Y = Asc(Left(o.Value, 1)) > 47 And _
Asc(Left(o.Value, 1)) < 58 And _
Mid(o.Value, 2, 1) = " "
If Not Y Then MsgBox "Ligne " & o.Row
Next
End Sub

...à condition de ne pas avoir d'espace parasite à gauche de la chaine(sinon rajouter un Trim)

A+



Modifié par galopin01 le 17/12/2007 18:45
n2c_coxiste
 Posté le 17/12/2007 à 18:44 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Salut Galopin,

oui, j'ai déjà trimé la feuille, ca c'était un "carnaval" la dedans...

je vais vite essayer ça, car je bloque (et pas internet au boulot, donc ça n'aide pas beaucoup!!!!)

merci encore.

Greg.

<> =========================================================================

petit bug, l'instruction mid(o.value, 2, 1) n'est pas acceptée, "erreur de compilation; nombre d'argument incorrect ou affectation de propriété incorrecte"

Pourtant, en lisant le F2 de Mid ou mid$ je ne vois pas ce qui défaille.

Si je raccourci le test Y = ... pour juste tester que la valeur commence bien par un chiffre, celà fonctionne, mais ne copie pas dans ma feuille temporaire...

Ceci dit, je n'y ai pas encore passé des heures, gestion des enfants oblige... donc je m'y remet.

Greg.



Modifié par n2c_coxiste le 17/12/2007 20:43
n2c_coxiste
 Posté le 17/12/2007 à 20:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
zecod'
  1. Sub SelAUTRE()
  2. Call Deltemp
  3. Sous_U = "Tr 1-2-9-0"
  4. LeVFS_ = "LeVFS1290"
  5. '========================================================================================
  6. ' le but ici est d'extraire des 3 SousU les zones (Zone_) dont le nom ne commence pas par
  7. ' un chiffre puis un espace.
  8. '========================================================================================
  9. Dim z As Integer, o As Range
  10. z = 1
  11. 'On initialise une feuille cible
  12. Sheets.Add
  13. ActiveSheet.Name = "temp"
  14. 'On se positionne sur la feuille source
  15. Sheets(Sous_U).Activate
  16. Sheets(Sous_U).Rows("1:1").Copy Sheets("temp").Range("A1")
  17. For Each o In Range(LeVFS_)
  18. Y = Asc(Left(o.Value, 1)) > 47 And Asc(Left(o.Value, 1)) < 58 And o.Value <> ""
  19. ' And mid(o.Value, 2, 1) = " "
  20. If Not Y Then o.EntireRow.Copy Sheets("temp").Range("A" & 2 + z)
  21. z = z + 1
  22. Next
  23. MsgBox "il y a " & z - 1 & " Zones trouvées sans Chiffre 1, 2, 9 ou 0 "
  24. 'Call afficher_dataDT
  25. End Sub

pour y voir + clair..........

Y est à VRAI, mais

o.EntireRow.Copy Sheets("temp").Range("A" & 2 + z) ne s'execute pas....
n2c_coxiste
 Posté le 17/12/2007 à 21:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bon, je ne comprends pas pourquoi la ligne de recopie ne passe pas... (à cause de sa syntaxe, avec un espace?!?)

pour contourner ce problème, je remplace par cette ligne par Call cocopie() et dans Sub cocopie() je place mon mini code (recopie des lignes concernées et comptage de celle-ci)

ça fonctionne bien, mais j'ai du redéfinir la plage, si cette plage contient des lignes vides, plantage...... donc je dois encore creuser, à moins de définir de manière dynamique cette plage, par XlUp...

Vais voir, mais déjà là je suis bien content...

Encore merci Galopin, je progresse, peu à peu... la route est longue

galopin01
 Posté le 18/12/2007 à 00:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

pour moi ça passe. Si tu ne définis pas mieux ta plage il faut tester o <> "" en premier pour éviter de poser un Left sur un o.value vide :

  1. Sheets(Sous_U).Rows("1:1").Copy Sheets("temp").Range("A1")
  2. For Each o In Range(LeVFS_)
  3. If o <> "" Then
  4. Y = Asc(Left(o.Value, 1)) > 47 And Asc(Left(o.Value, 1)) < 58
  5. If Not Y Then
  6. o.EntireRow.Copy Sheets("temp").Range("A" & 2 + z)
  7. z = z + 1
  8. End If
  9. End If
  10. Next
  11. End Sub

'...
Sheets(Sous_U).Rows("1:1").Copy Sheets("temp").Range("A1")
For Each o In Range(LeVFS_)
If o <> "" Then
Y = Asc(Left(o.Value, 1)) > 47 And Asc(Left(o.Value, 1)) < 58
If Not Y Then
o.EntireRow.Copy Sheets("temp").Range("A" & 2 + z)
z = z + 1
End If
End If
Next
End Sub

La démo

Evite de poser des balises code seules, c'est un peu (très) c...

A+



Modifié par galopin01 le 18/12/2007 00:12
n2c_coxiste
 Posté le 18/12/2007 à 08:44 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Ooops, copier/coller....

j'ai placé une version plus récente: IcI

Et pour le mid(o.value, 2, 1) qui ne passe pas, Excel ne digère pas les conditions multiples du genre?

bon, enfant malade... donc garderie = refoulement, donc je suis à la maison... = Excel! (et enfant)

A tout'

merci, Greg.

Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
Mini PC NiPoGi H1 (Ryzen 7 6800HU, 16 Go RAM, SSD 512 Go, Radeon 680M, Windows 11 Pro)
333,48 € 429 € -22%
@Amazon
Grosses promotions pour le Super Sale chez Geekbuying
-70% -1 -22%
@Geekbuying
Smartphone Poco M6 (6,79'', Full HD+ , 8 coeurs, 6 Go Ram, 128 Go)
104,11 € 159,99 € -35%
@AliExpress
PC portable 16 pouces Lenovo Ideapad Slim 3 (WUXGA, AMD Ryzen 5 7430U, 16 Go RAM, SSD 512 Go, sans OS)
449,99 € 549 € -18%
@Cdiscount
Apple MacBook Air 13.6 pouces M2 (16 Go, 256 Go)
899,00 € 1199 € -25%
@Amazon
Mini PC Firebat AK2 Plus (Intel N100, 16 Go RAM, SSD 512 Go, Windows 11 Pro)
107,18 € 160 € -33%
@AliExpress

Sujets relatifs
Créer une boîte de dialogue sous Excel
Besoin d'aide pour commencer avec Excel 2010
Besoin d'aide élaboration formule Excel
Besoin d'aide : composant d'excel introuvable
aide pour planning sous excel
Aide SVP pour mettre un gif animé sous Excel 2007
besoin d'aide sur Excel
besoin d'aide pour un graphe sur excel 2000
enregistrer sous grandeur boîte dialogue
lien EXCEL / WORD boite de dialogue
Plus de sujets relatifs à besoin d''aide, sous Excel, boîte de dialogue +++
 > Tous les forums > Forum Bureautique