VBA excel prblème!
Résolu/Fermé
turkiarra
Messages postés
7
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
9 février 2009
-
19 janv. 2009 à 15:50
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 - 20 janv. 2009 à 16:18
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 - 20 janv. 2009 à 16:18
A voir également:
- VBA excel prblème!
- Liste déroulante excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Mise en forme conditionnelle excel - Guide
8 réponses
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
20 janv. 2009 à 14:36
20 janv. 2009 à 14:36
Je pense que le problème viens de ta boucle for, je m'explique:
En gros si la premiere case que tu test ne contient pas "reponse" tu passe dans le else, affiche le message d'erreur et sors de la boucle for, donc tu ne test que la premiere case!
Donc j'aurai mis un exit for a la fin de ton if.
et tu peux ajouter une variable bool pour voir si il a ete trouve ou pas, ca donnerai ca:
exist = false
For i = 7 To 1000
If Cells(i, 2) = réponse Then
Cells(i, 2).Select
nombre = ActiveCell.Row
Chargé_affaire1 = Cells(nombre, 1)
N°1 = Cells(nombre, 2)
MO1 = Cells(nombre, 3)
Moe1 = Cells(nombre, 4)
Travaux1 = Cells(nombre, 5)
Lieu1 = Cells(nombre, 6)
Modifieraffaire.Chargé_affaire = Chargé_affaire1
Modifieraffaire.AncienN° = N°1
Modifieraffaire.N° = N°1
Modifieraffaire.MO = MO1
Modifieraffaire.Moe = Moe1
Modifieraffaire.Travaux = Travaux1
Modifieraffaire.Lieu = Lieu1
Modifieraffaire.Show
exist = true
exit for
End If
Next i
if exist = false then
msgbox("affaire inexistante")
Voila, sinon eventuellement il faudrait peut etre utiliser la syntaxe suivante pr recuperer le contenue d'une case:
cells(nombre,5).value
mais je n'en suis pas sur.
voila j'espere t'avoir aider :-)
En gros si la premiere case que tu test ne contient pas "reponse" tu passe dans le else, affiche le message d'erreur et sors de la boucle for, donc tu ne test que la premiere case!
Donc j'aurai mis un exit for a la fin de ton if.
et tu peux ajouter une variable bool pour voir si il a ete trouve ou pas, ca donnerai ca:
exist = false
For i = 7 To 1000
If Cells(i, 2) = réponse Then
Cells(i, 2).Select
nombre = ActiveCell.Row
Chargé_affaire1 = Cells(nombre, 1)
N°1 = Cells(nombre, 2)
MO1 = Cells(nombre, 3)
Moe1 = Cells(nombre, 4)
Travaux1 = Cells(nombre, 5)
Lieu1 = Cells(nombre, 6)
Modifieraffaire.Chargé_affaire = Chargé_affaire1
Modifieraffaire.AncienN° = N°1
Modifieraffaire.N° = N°1
Modifieraffaire.MO = MO1
Modifieraffaire.Moe = Moe1
Modifieraffaire.Travaux = Travaux1
Modifieraffaire.Lieu = Lieu1
Modifieraffaire.Show
exist = true
exit for
End If
Next i
if exist = false then
msgbox("affaire inexistante")
Voila, sinon eventuellement il faudrait peut etre utiliser la syntaxe suivante pr recuperer le contenue d'une case:
cells(nombre,5).value
mais je n'en suis pas sur.
voila j'espere t'avoir aider :-)
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
19 janv. 2009 à 17:47
19 janv. 2009 à 17:47
Bonjour à tous,
Il me semble que dans ton code, il manque la référence à l'Userform.
Si comme je le comprends, Chargé_affaire, N°, MO, Travaux et Lieu sont des textbox de L'userform qui s'appelle Ajoutaffaire alors pour affecter ces variables avant d'afficher l'Userform il faut écrire :
Ajoutaffaire.N° = N°1
Ajoutaffaire.MO = MO1
Ajoutaffaire.Travaux = Travaux1
Ajoutaffaire.Lieu = Lieu1
et ensuite seulement
Ajoutaffaire.Show
Dis moi si j'ai bien compris.
A+
Il me semble que dans ton code, il manque la référence à l'Userform.
Si comme je le comprends, Chargé_affaire, N°, MO, Travaux et Lieu sont des textbox de L'userform qui s'appelle Ajoutaffaire alors pour affecter ces variables avant d'afficher l'Userform il faut écrire :
Ajoutaffaire.N° = N°1
Ajoutaffaire.MO = MO1
Ajoutaffaire.Travaux = Travaux1
Ajoutaffaire.Lieu = Lieu1
et ensuite seulement
Ajoutaffaire.Show
Dis moi si j'ai bien compris.
A+
turkiarra
Messages postés
7
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
9 février 2009
20 janv. 2009 à 10:51
20 janv. 2009 à 10:51
Merci beaucoup pilas31!! En effet tu as bien compris ce que je voulais faire. Il me manquait bien la référence à l'userform et Ajoutaffaire.Show était placé trop tôt! Ce problème est donc résolu maintenant.
En ce qui concerne les 2 autres problèmes que tu a remarqués j'ai résulu le 2ème. En effet j'ai construit un 2ème userform qui ressemble au premier mais dans son programme je n'utilise plus la fonction "End(xlDown).Row+1)" amis une fonction qui permet de corriger la ligne a modifier.
Par contre j'ai toujours une mauvaise gestion d'erreur peut etre du aux mauvaises boucles que j'ai programmées.
De nouveau un grand merci pilas31 parce que tu ma bien débloqué!!!!
En ce qui concerne les 2 autres problèmes que tu a remarqués j'ai résulu le 2ème. En effet j'ai construit un 2ème userform qui ressemble au premier mais dans son programme je n'utilise plus la fonction "End(xlDown).Row+1)" amis une fonction qui permet de corriger la ligne a modifier.
Par contre j'ai toujours une mauvaise gestion d'erreur peut etre du aux mauvaises boucles que j'ai programmées.
De nouveau un grand merci pilas31 parce que tu ma bien débloqué!!!!
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
19 janv. 2009 à 16:02
19 janv. 2009 à 16:02
alors moi ce que je ferais c'est que dans la partie initialisation de ton formulaire je mettrais une condition avec une variable, si l'ouverture correspond a une affaire existante il va chercher les donnees dans le tableau, sinon il s'initialise avec les champs vide!
apres pour la maniere de faire ca deviens plus complexe, donc si tu vois pas faudar que j'explique plus en detail :S
apres pour la maniere de faire ca deviens plus complexe, donc si tu vois pas faudar que j'explique plus en detail :S
turkiarra
Messages postés
7
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
9 février 2009
19 janv. 2009 à 16:17
19 janv. 2009 à 16:17
Je comprends ce que tu veux dire xav3601, mais je ne vois pas du tout comment il faudrait s'y prendre! Donc si tu peux m'expliquer d'avantage s'il te plait!
Merci beaucoup
Merci beaucoup
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
643
19 janv. 2009 à 18:06
19 janv. 2009 à 18:06
Re Bonjour,
A la réflexion il y a d'autres problèmes :
1/ La boucle n'est pas correcte car elle sort intempestivement à cause du dernier else.
2/ Si l'userform reprends la main en modification, il ajoute la ligne modifiée à la fin au lieu de la corriger.
Je vais laisser xav3601 t'aider d'avantage comme il l'a proposé, je reviendrai dans la discussion si il n'a pas le temps de t'aider.
Bonne continuation
A+
A la réflexion il y a d'autres problèmes :
1/ La boucle n'est pas correcte car elle sort intempestivement à cause du dernier else.
2/ Si l'userform reprends la main en modification, il ajoute la ligne modifiée à la fin au lieu de la corriger.
Je vais laisser xav3601 t'aider d'avantage comme il l'a proposé, je reviendrai dans la discussion si il n'a pas le temps de t'aider.
Bonne continuation
A+
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
19 janv. 2009 à 18:46
19 janv. 2009 à 18:46
Bonjour,
Pour lire et écrire dans une série de textBox, cette solution pourra peut-être t'aider, je l'emploi pour les saises client entre autre.
A+
Pour lire et écrire dans une série de textBox, cette solution pourra peut-être t'aider, je l'emploi pour les saises client entre autre.
A+
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
20 janv. 2009 à 11:08
20 janv. 2009 à 11:08
Bonjour,
je viens juste de relire tout ce qui a été dis, pourrais tu faire un point sur ce qu'il te manque a présent?
je viens juste de relire tout ce qui a été dis, pourrais tu faire un point sur ce qu'il te manque a présent?
turkiarra
Messages postés
7
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
9 février 2009
20 janv. 2009 à 11:40
20 janv. 2009 à 11:40
Bonjour xav3601,
En faite mon problème est essentiellement résolue, c'est juste ma gestion d'erreur qui ne fonctionne pas correctement (les msgbox). Ils sont soit mal placés, soit incomplètes. Je sais pas je n'arrive pas à trouver pourquoi et ou sa cloche!
Je te montre comment sont a présent mes codes:
- Code de l'inputbox:
Sub entrerNumero()
réponse = InputBox(" Donnez le numero de l'affaire à modifier ", "Saisie du numero de l'affaire")
If réponse = "" Then
MsgBox ("Vous devez entrer un numero")
End If
Sheets("tableau affaire").Select
For i = 7 To 1000
If Cells(i, 2) = réponse Then
Cells(i, 2).Select
nombre = ActiveCell.Row
Chargé_affaire1 = Cells(nombre, 1)
N°1 = Cells(nombre, 2)
MO1 = Cells(nombre, 3)
Moe1 = Cells(nombre, 4)
Travaux1 = Cells(nombre, 5)
Lieu1 = Cells(nombre, 6)
Modifieraffaire.Chargé_affaire = Chargé_affaire1
Modifieraffaire.AncienN° = N°1
Modifieraffaire.N° = N°1
Modifieraffaire.MO = MO1
Modifieraffaire.Moe = Moe1
Modifieraffaire.Travaux = Travaux1
Modifieraffaire.Lieu = Lieu1
Modifieraffaire.Show
Else
MsgBox ("Le code que vous avez saisie n'existe pas. Veuillez saisir un code affaire existant.")
Exit For
End If
Next i
End Sub
- code de l'userform:
Private Sub OK_Click()
Sheets("tableau affaire").Select
For i = 7 To 1000
If Cells(i, 2) = AncienN° Then
Cells(i, 2).Select
Range("A" & i) = Chargé_affaire
Range("B" & i) = N°
Range("C" & i) = MO
Range("D" & i) = Moe
Range("E" & i) = Travaux
Range("F" & i) = Lieu
Exit For
End If
Next i
'trie les données du tableau
Range("B7:B1000").Select
Selection.Sort Key1:=Range("B7"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Modifieraffaire.Hide
Unload Ajoutaffaire
End Sub
En faite mon problème est essentiellement résolue, c'est juste ma gestion d'erreur qui ne fonctionne pas correctement (les msgbox). Ils sont soit mal placés, soit incomplètes. Je sais pas je n'arrive pas à trouver pourquoi et ou sa cloche!
Je te montre comment sont a présent mes codes:
- Code de l'inputbox:
Sub entrerNumero()
réponse = InputBox(" Donnez le numero de l'affaire à modifier ", "Saisie du numero de l'affaire")
If réponse = "" Then
MsgBox ("Vous devez entrer un numero")
End If
Sheets("tableau affaire").Select
For i = 7 To 1000
If Cells(i, 2) = réponse Then
Cells(i, 2).Select
nombre = ActiveCell.Row
Chargé_affaire1 = Cells(nombre, 1)
N°1 = Cells(nombre, 2)
MO1 = Cells(nombre, 3)
Moe1 = Cells(nombre, 4)
Travaux1 = Cells(nombre, 5)
Lieu1 = Cells(nombre, 6)
Modifieraffaire.Chargé_affaire = Chargé_affaire1
Modifieraffaire.AncienN° = N°1
Modifieraffaire.N° = N°1
Modifieraffaire.MO = MO1
Modifieraffaire.Moe = Moe1
Modifieraffaire.Travaux = Travaux1
Modifieraffaire.Lieu = Lieu1
Modifieraffaire.Show
Else
MsgBox ("Le code que vous avez saisie n'existe pas. Veuillez saisir un code affaire existant.")
Exit For
End If
Next i
End Sub
- code de l'userform:
Private Sub OK_Click()
Sheets("tableau affaire").Select
For i = 7 To 1000
If Cells(i, 2) = AncienN° Then
Cells(i, 2).Select
Range("A" & i) = Chargé_affaire
Range("B" & i) = N°
Range("C" & i) = MO
Range("D" & i) = Moe
Range("E" & i) = Travaux
Range("F" & i) = Lieu
Exit For
End If
Next i
'trie les données du tableau
Range("B7:B1000").Select
Selection.Sort Key1:=Range("B7"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
Modifieraffaire.Hide
Unload Ajoutaffaire
End Sub
xav3601
Messages postés
3288
Date d'inscription
lundi 10 novembre 2008
Statut
Membre
Dernière intervention
2 mars 2016
311
20 janv. 2009 à 16:18
20 janv. 2009 à 16:18
Mais de rien content d'avoir pu etre utile :-)
20 janv. 2009 à 15:02
La solution que tu me donne est en effet très logique et marche correctement.
Merci de nouveau de m'avoir aider ;)