Macro vba plante quant fichier partagé

Résolu
eserpios Messages postés 22 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 19 avril 2012 - 18 avril 2012 à 10:35
eserpios Messages postés 22 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 19 avril 2012 - 19 avril 2012 à 13:06
Bonjour,

Pour mon taf, je dois réaliser un fichier partagé contenant une liste de contact téléphoniques classée par nom d'application, en mode non-partagé le fichier fonctionne très bien, cependant dès que je partage le fichier les macro de recherche incluse ne fonctionne plus, me retournant une erreur 1004 sans la possibilité d’accéder au debug:

Voiçi le fichier:mon fichier

Merci d'avance à tous ceux qui porteront attention a ma demande.

11 réponses

eserpios Messages postés 22 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 19 avril 2012
19 avril 2012 à 13:06
ok

je passe le sujet en résolu
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
18 avril 2012 à 11:06
Salut,

je prend les devants avant que ne te fasse incendier !

1)Tu n'est pas dans le bon thème ! pour le VBA il existe un thème spécifique.

2)un fichier joint est en générale mal vu d'autan que tu ne précise rien sur la version d'excel utilisé, du contenu etc.

3) manque de précision sur l'erreur !

As tu essayé de fair fonctionner ton code en mode pas à pas en mode partagé ?

A+
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
18 avril 2012 à 11:07
pardon tu es dans le bon theme !

confondu avec un autre poste
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 avril 2012 à 11:37
Bonjour,
Bien dit en ce qui concerne le fait de joindre un classeur (je n'ouvre personnellement pas ceux que je n'ai pas créé moi-même . Les raisons de sécurité sont évidentes).
Tu dois pouvoir isoler ton problème et exposer ici le seul bout de code qui pose difficulté.
L'erreur signalée peut avoir des causes multiples.
Difficile de tenter d'en dresser la liste exhaustive.
Mais tu parles d'un fichier partagé et il me vient à l'idée que, parmi les causes, il y aurait peut-être des bouts de code bâtis à coups de select, etc ... ===>> puis des ActiveSheet ou AcriveCell, etc ... ===>>> mauvaise habitude qui ferait en plus qu'un utilisateur se retrouve avec la sélection de l'autre.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 avril 2012 à 11:59
Ah oui ! Bien sûr !
Faudrait pas que ton appli fonctyionne à coups de protection et déprotection, car : là aussi : jolie possibilité de conflit (une macro déprotège et cherche à modifier pendant que l'autre (depuis un autre utilisateur) protège ...)
Etc ... etc ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
eserpios Messages postés 22 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 19 avril 2012
18 avril 2012 à 15:00
Merci pour vos réponses

Je n'ai pu isoler le bout de code qui pose problème vu que je ne peut accéder au mode debug quant le fichier est partager:

Voici le code qui pose problème:
Private Sub TextBox10_Change()

'*** declaration des variables***

Dim rngTrouve As Range
Dim strChaine As String
Dim sExtentionFiltre As String
Dim Colonne As Integer


'*** initialisation recherche***

    'valorisation de "strChaine" avec la valeur rentrée par l'utilisateur
sExtentionFiltre = "*"
strChaine = UCase(Trim(TextBox10.Text)) + sExtentionFiltre

    'désactivation du filtre
Worksheets("Feuil1").AutoFilterMode = False
    'inisialisation recherche
Set rngTrouve = Range("A4:A6000").Find(what:=strChaine, LookAt:=xlPart)

'*** retour de la recherche***

    'si recherche non trouvé, envoi d'un message
If rngTrouve Is Nothing Then
MsgBox "Pas trouvé"
    'sinon affiché le résultat et recuperer le n° de colonne du resultat
Else
Range("A4:A6000").Find(what:=strChaine, LookAt:=xlPart).Select
Colonne = ActiveCell.Column
End If

Set rngTrouve = Nothing
    'verouillage sur la Textbox
TextBox10.Activate
    'si "strChaine est vide ou si colonne = 0 alors desactiver filtre
If strChaine "" Or strChaine "*" Or Colonne = 0 Then
Worksheets("Feuil1").AutoFilterMode = False
Else
    'sinon trier les resultat suivant la colonne ou se trouve le resultat
ActiveSheet.Range("A4:A6000").AutoFilter Field:=Colonne, Criteria1:=strChaine
End If

End Sub


En ce qui concerne le mode pas a pas en non partagé, je ne connaissais pas, je vais regarder cela dès que je peux.

vous verrez effectivement qu'il ya du .select et du .activate de partout (je ne sais pas encore codé autrement, je débute)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 avril 2012 à 16:33
vous verrez effectivement qu'il ya du .select et du .activate de partout (je ne sais pas encore codé autrement, je débute)

On code en pointant vers les objets, non en les sélectionnant, en les activant, etc ...
Il va falloir que tu commences par cela, c'est sûr ! !
exemple (une petite partie du code montré) :
Range("A4:A6000").Find(what:=strChaine, LookAt:=xlPart).Select
Colonne = ActiveCell.Column

s'écrirait :
Colonne = Range("A4:A6000").Find(what:=strChaine, LookAt:=xlPart).Column

Mais cette même ligne est assez curieuse, car elle reprend dans un Else le cas d'une chaîne déjà cherchée et qui serait trouvée (dans le If) ... !!
Et ce devrait logiquement alors être tout bêtement et tout logiquement :
If rngTrouve Is Nothing Then
  MsgBox "Pas trouvé"
    'sinon affiché le résultat et recuperer le n° de colonne du resultat
Else
  Colonne = rngTrouve.Column
End If

Il est assez clair que si tout ton code est construit sur de telles bases, il ne faut pas t'étonner ensuite de més&aventures en tous genres, surtout si partagé !
J'observe au passage que le code montré est( lancé au Change d'une textbox !
C'est encore pire car :
- soit cette textbox est modifiée par code, d'un seul coup, et on se demande à quoi elle sert alors qu'une simple variable aurait fait l'affaire
- soit elle est modifiée par l'utilisateur et c'est encore pire car ton code se lancera à chaque geste fait dans la saisie !
- dans un cas comme dans l'autre de ces deux cas : conflit assuré entre deux utilisateurs qui provoqueraient, chacun de son côté, le déclenchement de cet évènement Change !
Voilà déjà (sur un seul petit bout de code) !
Je crois que tu devrais reprendre tout, ligne par ligne, en repensant aux conséquences possibles de chaque instruction exécutée...
Bonne reprise ...
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
eserpios Messages postés 22 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 19 avril 2012
18 avril 2012 à 17:28
ok, merci pour les infos, je vais voir ça.
0
eserpios Messages postés 22 Date d'inscription vendredi 6 juin 2008 Statut Membre Dernière intervention 19 avril 2012
19 avril 2012 à 10:57
Bonjour, je bloque sur cette partie du code que je voudrais modifié pour évité l'erreur 1004 en mode partagé:

'verouillage sur la Textbox
'verouillage sur la Textbox

TextBox11.Activate


D'avance merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 avril 2012 à 11:05
On inhibe ou on habilite une textbox en utilisant sa propriété enabled (true pour l'habiliter, false pour l'inhiber).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 avril 2012 à 11:12
Je n'ai toutefois ainsi répondu qu'à ta dernière question.
Et cette réponse n'est selon moi pas en conformité avec ta "démarche".
Si inhibée : inhibée pour tous (et alors ? )
Va falloir que tu te trouves un autre mécanisme, avec expressions conditionnelles !
Des idées en vrac, mais je vais te laisser trouver et mettre en place TON stratagème :
- utilisation d'une variable booléenne à mettre à true lorsque la textbox a le focus (donc lorsque un utilisateur s'y est mis). La mettre à False lorsqu'il en sort
- empêcher tous les autres utilisateurs de travailler tant que cette booléenne est à true.
Allez ! à toi ===>> cela relève plus de l'organisation de la pensée que de la connaissance de VBA.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous