Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/11/2011, 10h46   #1
Nouveau Membre du Club
 
Homme tof tim
Technicien maintenance
Inscription : septembre 2011
Messages : 101
Détails du profil
Informations personnelles :
Nom : Homme tof tim
Localisation : Belgique

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : septembre 2011
Messages : 101
Points : 39
Points : 39
bonjour à tout le monde...

je ne trouve pas... tout fonctionnait correctement et depuis que j'ai rajouté des macros sur mon deuxiéme fichier...ben ça va pu...

alors petite précision:

j'utilise deux fichiers : le premier que j'ai nommé MENU.xls dedans se trouve mes usf et modules le second BDC.xls juste des onglets FacTrans et Facture et un module avec mes nouvelles macros

lors du démarrage de mon fichier maitre MENU.xls il lance mon usf MENU_Principale un des commandbuttons lance un second usf MENU_CREA_1 qui me permet de créer une fiche client
Code :
1
2
3
Public Wbk As Workbook
Public Const Rep = "C:\test"
Public Const FichierBDC = "BDC.xls"
dans le ThisWorkbook
Code :
1
2
3
4
Private Sub Workbook_Open()
    Set Wbk = Workbooks.Open(Filename:=Rep & "\" & FichierBDC)
    MENU_Principale.Show 0
End Sub
dans ce usf j'encode toutes mes informations par des textbox une fois tout rentré je valide av un
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub valider_Click()
 
Dim iDer As Long
 
'--- Code permet d'ajouter +1 à chaque nouvel enregistrement par mercatog ExpertConfirmé www.developpez.net
With Wbk.Worksheets("BDC")
    iDer = .Cells(.Rows.Count, "A").End(xlUp).Row
    If .Range("B" & iDer) <> "" Then .Range("A" & iDer + 1) = Application.Max(.Range("A:A")) + 1
End With
    iDer = iDer - 1
    Wbk.Worksheets("FacTrans").Range("D4") = iDer
 
'--- Positionnement dans la base
   Ligne = Wbk.Worksheets("BDC").[B65000].End(xlUp).Row + 1
'--- Transfert Formulaire dans BDC.xls onglet BDC    
    Wbk.Worksheets("BDC").Cells(Ligne, 2) = Application.Proper(Me!Nom)
    Wbk.Worksheets("BDC").Cells(Ligne, 3) = Application.Proper(Me!Prenom)
    Wbk.Worksheets("BDC").Cells(Ligne, 4) = Application.Proper(Me!Adresse)
    Wbk.Worksheets("BDC").Cells(Ligne, 5) = CDbl(Me.Cp)
    Wbk.Worksheets("BDC").Cells(Ligne, 6) = Application.Proper(Me!Ville)
    Wbk.Worksheets("BDC").Cells(Ligne, 7) = Application.Proper(Me!Pays)
    Wbk.Worksheets("BDC").Cells(Ligne, 8) = Application.Proper(Me!TelFixe)
    Wbk.Worksheets("BDC").Cells(Ligne, 9) = Application.Proper(Me!TelGsm)
    Wbk.Worksheets("BDC").Cells(Ligne, 10) = Application.Proper(Me!TelFax)
    Wbk.Worksheets("BDC").Cells(Ligne, 11) = Application.Proper(Me!Email)
etc...
    MENU_CREA_1.Hide
    MENU_Principale.Show
End Sub
voir capture ci-joint "MENU_CREA_1"

J'ai comme retour l'erreur 91 Variable objet ou blocWith non défini la ligne suivante en rouge
Code :
1
2
3
4
5
6
7
8
9
10
Private Sub valider_Click()

Dim iDer As Long

'--- Code permet d'ajouter +1 à chaque nouvel enregistrement par mercatog ExpertConfirmé www.developpez.net
With Wbk.Worksheets("BDC")    iDer = .Cells(.Rows.Count, "A").End(xlUp).Row
    If .Range("B" & iDer) <> "" Then .Range("A" & iDer + 1) = Application.Max(.Range("A:A")) + 1
End With
    iDer = iDer - 1
    Wbk.Worksheets("FacTrans").Range("D4") = iDer
voilà j'ai essayé d'être clair pour tout le monde...
D'avance merci pour votre aide...

Tim

Bonsoir...personne pour m'aider ??? Peut être que vous êtes occupé pour le moment...bon je décroche...bien le bon soir à vous tous et bonne nuit toute douce.
Tim
Images attachées
Type de fichier : jpg MENU_CREA.jpg (120,1 Ko, 8 affichages)
timtof2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 23h18   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Bonsoir,

commence par rajouter ce qui devrait être obligatoire en première ligne de toutes tes pages de codes la ligne :

ceci pour révéler des éventuelles erreurs de déclaration de variables..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/11/2011, 10h47   #3
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Oui, car à mon avis, soit tu n'as pas déclaré Wbk au bon endroit, soit tu ne fais pas référence au bon Wbk quand tu l'initialises, ça devrait plutôt être :
Code :
Set MENU_CREA_1.Wbk = Workbooks.Open(Filename:=Rep & "\" & FichierBDC)
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/11/2011, 11h28   #4
Nouveau Membre du Club
 
Homme tof tim
Technicien maintenance
Inscription : septembre 2011
Messages : 101
Détails du profil
Informations personnelles :
Nom : Homme tof tim
Localisation : Belgique

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : septembre 2011
Messages : 101
Points : 39
Points : 39
Merci à toi bbil, mais j'ai toujours bien l'erreur 91...
Alors je suis revenu en arriere c'est à dire que j'ai cette erreur depuis que j'ai ajouté ces macros sur la feuil"FacTrans"
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
Option Explicit
Dim Wbk As Workbook

Private Sub Worksheet_Change(ByVal Target As Range)
'--- Affiche cadre acompte1 si valeur entrée
    Wbk.Worksheets("FacTrans").Select    If Not Intersect(Target, Range("D24")) Is Nothing Then
        If Range("D24").Value <> "" Then
            Wbk.Worksheets("Facture").Select
            AfficheCadresAcompte1
            
        End If

    
    End If
'--- Affiche cadre acompte2 si valeur entrée
    Wbk.Worksheets("FacTrans").Select
    If Not Intersect(Target, Range("D25")) Is Nothing Then
        If Range("D25").Value <> "" Then
            Wbk.Worksheets("Facture").Select
            AfficheCadresAcompte2
        End If
    End If
'--- Affiche cadre acompte3 si valeur entrée
    Wbk.Worksheets("FacTrans").Select
    If Not Intersect(Target, Range("D26")) Is Nothing Then
        If Range("D26").Value <> "" Then
            Wbk.Worksheets("Facture").Select
            AfficheCadresAcompte3
        End If
    End If
'--- Affiche cadre acompte4 si valeur entrée
    Wbk.Worksheets("FacTrans").Select
    If Not Intersect(Target, Range("D27")) Is Nothing Then
        If Range("D27").Value <> "" Then
            Wbk.Worksheets("Facture").Select
            AfficheCadresAcompte4
        End If
    End If
'--- Cache cadre acompte1,2,3 et4 si celluleD24 est vide
    Wbk.Worksheets("FacTrans").Select
    If Not Intersect(Target, Range("D24")) Is Nothing Then
        If Range("D24").Value = "" Then
            Wbk.Worksheets("Facture").Select
            CacheCadreAcomptes
        End If
    End If
'--- Affiche cadre AdresseChantier si valeur entrée
    Wbk.Worksheets("FacTrans").Select
    If Not Intersect(Target, Range("D15")) Is Nothing Then
        If Range("D15").Value <> "" Then
            Wbk.Worksheets("Facture").Select
            AfficherAdresseChantier
        End If
    End If
'--- Cache cadre AdresseChantier si valeur cellule est vide
    Wbk.Worksheets("FacTrans").Select
    If Not Intersect(Target, Range("D15")) Is Nothing Then
        If Range("D15").Value = "" Then
            Wbk.Worksheets("Facture").Select
            CacheAdresseChantier
        End If
    End If
End Sub
l'erreur 91 est sur la ligne en rouge...j'ai rajouté comme tu me le proposais "Option Explicit" là ou il en manquait...maintenant je suis conscient que j'ai du omettre qqchose sur une déclaration de variables.

J'ai cherché sur "La gestion des erreurs dans Excel" sur la page http://silkyroad.developpez.com/VBA/GestionErreurs/ mais trop complexe pour moi trouver...

Est ce que je ne dois pas placer ces macros ailleurs que sur ma feuil"FacTrans" ?

ça va je ne déprime pas encore..;je continu à chercher...

bien à toi.

tim
timtof2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h42   #5
Nouveau Membre du Club
 
Homme tof tim
Technicien maintenance
Inscription : septembre 2011
Messages : 101
Détails du profil
Informations personnelles :
Nom : Homme tof tim
Localisation : Belgique

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : septembre 2011
Messages : 101
Points : 39
Points : 39
bon voilà je pense que grace à ta remarque pertinente « des éventuelles erreurs de déclaration de variables.. « j’ai bien regardé dans mes macros puisque le problème venait de là.
Alors la j’ai remarqué qu’au moment de lancer mes macros je me trouvais sur mon fichier BDC.xls et sur mon onglet « FacTrans » alors je me suis dit mais pourquoi renseigner
Code :
1
2
3
4
5
6
Private Sub valider_Click()

Dim iDer As Long

'--- Code permet d'ajouter +1 à chaque nouvel enregistrement par mercatog ExpertConfirmé www.developpez.net
With Wbk.Worksheets("BDC")
et la lumière fut...étant sur la même feuil que mes macros j'ai retiré ce qui me donne
Code :
Sheets("FacTrans").Select
et devine quoi...ça marche !!!

Encore merci à toi bbil...je me remets en route.
bonne journée
timtof2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h46   #6
Nouveau Membre du Club
 
Homme tof tim
Technicien maintenance
Inscription : septembre 2011
Messages : 101
Détails du profil
Informations personnelles :
Nom : Homme tof tim
Localisation : Belgique

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : septembre 2011
Messages : 101
Points : 39
Points : 39
Merci ZebreLoup, mais maintenant je ne sais pas qu'elle est la bonne solution...si ce n'est que ça fonctionne en ayant retiré "wbk.work" de la ligne "Wbk.Worksheets("FacTrans").Select" .

Alors je vais essayer ce que tu me proposes mais j'aurai aimé comprendre...encore en relisant ta solution ça me semble évident...

aller je modifie et te tiens au courant.

tim
timtof2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 11h56   #7
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur Financier
Secteur : Finance

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Pour être franc, en général, je ne déclare pas des objets Worksheet en variables globales ou en paramètre de UserForm ou Classes, à moins d'en avoir vraiment l'utilité (Comme un userForm qui pourrait avoir exactement la même action, mais sur une feuille différente en fonction de l'endroit où on l'a lancé).

Par contre, j'aime bien voir dans mon code sur quel objet je travaille, car ça peut être source d'erreur d'utiliser directement des objets Range en espérant que ce soit la bonne feuille qui soit active.

Le plus propre est sans doute au début de chaque procédure de faire un
Code :
1
2
Dim ws As Worksheet
Set ws = Workbooks("Toto").Worksheets("Titi")
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/11/2011, 12h07   #8
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par timtof2011 Voir le message
...ce qui me donne
Code :
Sheets("FacTrans").Select
et devine quoi...ça marche !!!

...
c'est une mauvaise idée de travailler sur la feuille active, mieux vaut préciser explicitement la feuille sur laquelle l'on désire agir

je préfère mille fois :
Citation:
Envoyé par ZebreLoup Voir le message
P..

Le plus propre est sans doute au début de chaque procédure de faire un
Code :
1
2
Dim ws As Worksheet
Set ws = Workbooks("Toto").Worksheets("Titi")
(...)
Code :
 If ws.Range("D24").Value <> "" Then
bbil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/11/2011, 13h55   #9
Nouveau Membre du Club
 
Homme tof tim
Technicien maintenance
Inscription : septembre 2011
Messages : 101
Détails du profil
Informations personnelles :
Nom : Homme tof tim
Localisation : Belgique

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : septembre 2011
Messages : 101
Points : 39
Points : 39
il me semble aussi plus évident pour comprendre un long programme de préciser explicitement la feuille sur laquelle l'on veut agir...effectivement...je suis preneur pour ce bon conseil...je vais m'y atteler...de suite et recomposer ainsi...merci pour votre aide et bonne aprés midi...
tim je cloture
timtof2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 14h51   #10
Nouveau Membre du Club
 
Homme tof tim
Technicien maintenance
Inscription : septembre 2011
Messages : 101
Détails du profil
Informations personnelles :
Nom : Homme tof tim
Localisation : Belgique

Informations professionnelles :
Activité : Technicien maintenance
Secteur : Bâtiment Travaux Publics

Informations forums :
Inscription : septembre 2011
Messages : 101
Points : 39
Points : 39
j'ai une autre erreur 91 que je n'avais pas remarqué...

tout se passe bien lorsque je démarre de mon appli et ensuite je sors de celle-ci par
Code :
1
2
3
Private Sub Quitter_Click()
    End
End Sub
donc ok.

Mais si je redémarre mon appli par l'éditeur VisualBasic lorsque je re-valide un nouveau client par
Code :
1
2
3
4
5
6
7
8
9
10
Private Sub valider_Click()

Dim iDer As Long

'--- Code permet d'ajouter +1 à chaque nouvel enregistrement par mercatog ExpertConfirmé www.developpez.net
With Wbk.Worksheets("BDC")    iDer = .Cells(.Rows.Count, "A").End(xlUp).Row
    If .Range("B" & iDer) <> "" Then .Range("A" & iDer + 1) = Application.Max(.Range("A:A")) + 1
End With
    iDer = iDer - 1
    Wbk.Worksheets("FacTrans").Range("D4") = iDer
ça me retourne encore une erreur 91...sur la ligne en rouge et cette fois même sans mets macro ajouté...

par contre si je ferme mes fichiers et que je relance le tout..ben ça fonctionne...grrrr...
je suppose que je dois également adapter comme ci-dessus mais je suis pourtant toujours dans mon fichier MENU.xls...ou peut être pas finalement...!!!
timtof2011 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h54.


 
 
 
 
Partenaires

Hébergement Web