Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Probleme USERFORM

eric72

XLDnaute Accro
Bonjour a tous,
Dans le fichier ci-joint j'ai deux boutons "Ajouter un client" et "Ajouter une prestation", et lorsque je crée l'un ou l'autre il bug sur l'export de la 1ère ligne et je ne comprends pas du tout pourquoi.
Après quelques heures de recherche je m'en remet à votre savoir.
Merci beaucoup pour votre aide.
Eric
 

Pièces jointes

  • test.xlsm
    685 KB · Affichages: 31

Fred0o

XLDnaute Barbatruc
Bonjour Eric72

Il te faut declarer ta variable DerLigne en tant que Integer et pas en tant que Long

VB:
Private Sub BtnValider_Click()
        Dim derligne As Integer
        Dim question As Integer
 

eric72

XLDnaute Accro
Ah mais oui quel idiot, par contre quand je veux entrer une prestation et que je ne saisi pas le taux de marge il s'arrête dessus et bug, comment est il possible de passer par dessus cette étape si on ne saisit rien dedans?
Merci encore
Eric
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Pour les numéros de lignes par principe on met une variable Long pour être sûr de ne pas être bloqué par la limite d'un Integer (32767) bien inférieure au nombre de lignes possible en Excel.

Concernant ton problème, 2 choses me semblent à questionner.
1 - Worksheets("clients").Select
Je ne sais pas bien la différence mais il me semble que l'activation d'une feuille se fait par Worksheets("clients").Activate.

2 - Quoiqu'il en soit, il faut toujours qualifier complètement les objets qu'on utilise (par précaution et par principe) et ce même si la feuille activée est la bonne. Par exemple ça, ça me donne des palpitations:
VB:
Cells(no_ligne, 1) = TxtNom.Value
Cells(no_ligne, 2) = TxtPrenom.Value
Cells(no_ligne, 3) = TxtAdresse.Value
Cells(no_ligne, 4) = TxtCommune.Value
Cells(no_ligne, 6) = TxtCourriel.Value
Cells(no_ligne, 7) = TxtTelephone.Value
Mais avec ça mon rythme cardiaque revient à la normale:
Code:
With ThisWorkbook.Worksheets("clients")
    .Cells(no_ligne, 1) = TxtNom.Value
    .Cells(no_ligne, 2) = TxtPrenom.Value
    .Cells(no_ligne, 3) = TxtAdresse.Value
    .Cells(no_ligne, 4) = TxtCommune.Value
    .Cells(no_ligne, 6) = TxtCourriel.Value
    .Cells(no_ligne, 7) = TxtTelephone.Value
End With
D'ailleurs, avec cette qualification complète, même plus la peine d'activer la feuille cible.
 

Dudu2

XLDnaute Barbatruc
Avec ton fichier c'est simple à reproduire:
- Ouvrir le fichier
- Afficher la feuille Devis (par exemple) ou toute autre feuille que Clients
- Lancer le UserForm Clients
=> CRASH

- Afficher la feuille Clients
- Lancer le UserForm Clients
= OK

C'est bien cette histoire de Worksheets("Clients").Select qui pose un problème.
Si on remplace par Worksheets("Clients").Activate cela fonctionne

De toutes façons, ni Select, ni Activate. Qualifier complètement les objets qu'on utilise !
Après chacun fait comme il veut.
 

Dudu2

XLDnaute Barbatruc
Ok, j'ai pas vu qu'il y avait 1 UserForm pour la création et un autre pour la modification.
De plus le calcul de la dernière ligne n'est pas qualifié et la déprotection se fait sur l'ActiveSheet alros qu'il y a des .Select.
Je vérifie.
 

Dudu2

XLDnaute Barbatruc
Non plus. Je perds le tableau structuré au 2ème essai!! Jamais vu ça.
Y a un truc qui me surprend. L'appel de la macro associée est une fonction que je ne trouve nulle part !
Pareil pour les prestations.
 

Discussions similaires

Réponses
11
Affichages
440
Réponses
3
Affichages
755
Réponses
7
Affichages
594
Réponses
36
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…