Microsoft 365 32 ou 64 bits

eric72

XLDnaute Accro
Bonjour à tous,
J'ai un fichier avec des userform et du code vba, mon PC et ma version Excel sont en 64 bits, est-il possible que sur un PC avec une version Excel 32 bits, et ce malgré ce code:
VB:
#If VBA7 Then
Private Declare PtrSafe Function DavGetUNCFromHTTPPath Lib "Netapi32.dll" (ByVal Url As LongPtr, ByVal UncPath As LongPtr, lpSize As Long) As Long
#Else
Private Declare Function DavGetUNCFromHTTPPath Lib "Netapi32.dll" (ByVal Url As Long, ByVal UncPath As Long, lpSize As Long) As Long
#End If
il y ait des bugs aléatoires sur le 32 bits et pas sur le 64 bits? Cela a-t-il un rapport ou pas du tout.
J'essaie d'explorer toutes les pistes pour éliminer les éventuelles raisons.
Ce code règle-t-il le problème de version entièrement?
Merci beaucoup pour votre retour
Eric
 
Solution
Pas d'autre remarques sur le code?
Merci beaucoup pour le coup de main
oh si.. il y a à dire.. :-D
macro Actu: tu calcules une zone dans la feuille1...(=feuille Menu).. ne serait ce pas plutot la feuille "Données"??
et pourquoi forcer le calcul?? ton mode de calcul du classeur n'est pas en automatique?

coté purement esthétique.. l'indentation n'est pas très "rigoureuse", ce qui bien souvent permet de détecter des erreurs de syntaxe (le fameux guilemet pas à sa place par exemple)

macro "vidernavette":
plutot que vider les cellules une par une, tu peux utiliser une range.clearcontents

eric72

XLDnaute Accro
puisque le bug ne se produit pas chez toi, uniquement chez tes collègues, il faut leur demander un impression d'écran quand ils ont le bug (après avoir cliqué sur "Debuggage" lorsqu'ils ont le message d'erreur)
C'est exactement ce que je fais quand je suis en Teamviewer, je mets un arrêt sur le code en espérant que cela bug pour voir quelle ligne pose problème!!! mais cela ne plante pas.
 

eric72

XLDnaute Accro
Ben oui
c'était une fausse piste, il faut savoir sur quelle ligne code il y a l'incompatibilité de type
je pense que ça bug à l'ajout d'une commande , dans ce code
VB:
Private Sub BtAjoutComm_Click()
'**********************************************
'event bouton Ajouter COMMANDE
'**********************************************
Application.ScreenUpdating = False

Txt1erAcompte = Format(TxtPrixTTC * 40 / 100, "0.00 €")
Txt2emeAcompte = Format(TxtPrixTTC * 40 / 100, "0.00 €")
TxtSolde = Format(TxtPrixTTC * 20 / 100, "0.00 €")

'ALERTE CHAMPS OBLIGATOIRE NON REMPLI
If TxtDateConfClient = "" Then MsgBox "Il manque la date de la Commande": Exit Sub
If TxtCommercial = "" Then MsgBox "Vous devez Sélectionner le COMMERCIAL": Exit Sub
If TxtNomClient = "" Then MsgBox "Vous devez Saisir le NOM du CLIENT": Exit Sub
If TxtPrenomCl = "" Then MsgBox "Vous devez Saisir le Prénom du CLIENT, si c'est une Société, mettre un point": Exit Sub
If TxtPrixAchatComm = "" Then MsgBox "Vous devez Saisir le PRIX D'ACHAT de la Commande": Exit Sub
If TxtTelClient = "" Then MsgBox "Vous devez Saisir le TELEPHONE du Client": Exit Sub
If TxtVille2 = "" Then MsgBox "Vous devez Saisir la VILLE du Client ": Exit Sub
If TxtPrixHT = "" Then MsgBox "Vous devez Saisir le PRIX DU DEVIS H.T ": Exit Sub
If TxtPrixTTC = "" Then MsgBox "Vous devez Saisir le PRIX DU DEVIS T.T.C ": Exit Sub
If TxtTempsPose = "" Then MsgBox "Vous devez Saisir le TEMPS DE POSE ": Exit Sub
If TxtNbPers = "" Then MsgBox "Vous devez Saisir le NOMBRE DE POSEUR(S) ": Exit Sub
If ObFermeture = False And ObVeranda = "" Then MsgBox "Vous devez Sélectionner une SOCIETE ": Exit Sub
If CbProd1 <> "" And (CbQte1 = "" Or TxtPrix1 = "") Then MsgBox "Il manque un Prix ou une Quantité du 1er Produit": Exit Sub
If CbProd2 <> "" And (CbQte2 = "" Or TxtPrix2 = "") Then MsgBox "Il manque un Prix ou une Quantité du 2ème Produit": Exit Sub
If CbProd3 <> "" And (CbQte3 = "" Or TxtPrix3 = "") Then MsgBox "Il manque un Prix ou une Quantité du 3ème Produit": Exit Sub
If CbProd4 <> "" And (CbQte4 = "" Or TxtPrix4 = "") Then MsgBox "Il manque un Prix ou une Quantité du 4ème Produit": Exit Sub
If CbProd5 <> "" And (CbQte5 = "" Or TxtPrix5 = "") Then MsgBox "Il manque un Prix ou une Quantité du 5ème Produit": Exit Sub
If CbProd6 <> "" And (CbQte6 = "" Or TxtPrix6 = "") Then MsgBox "Il manque un Prix ou une Quantité du 6ème Produit": Exit Sub
If CbProd7 <> "" And (CbQte7 = "" Or TxtPrix7 = "") Then MsgBox "Il manque un Prix ou une Quantité du 7ème Produit": Exit Sub
If CbProd8 <> "" And (CbQte8 = "" Or TxtPrix8 = "") Then MsgBox "Il manque un Prix ou une Quantité du 8ème Produit": Exit Sub
If CbProd9 <> "" And (CbQte9 = "" Or TxtPrix9 = "") Then MsgBox "Il manque un Prix ou une Quantité du 9ème Produit": Exit Sub
If CbRef1 <> "" And (CbQteCons1 = "" Or CbCons1 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 1": Exit Sub
If CbRef2 <> "" And (CbQteCons2 = "" Or CbCons2 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 2: Exit Sub"
If CbRef3 <> "" And (CbQteCons3 = "" Or CbCons3 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 3": Exit Sub
If CbRef4 <> "" And (CbQteCons4 = "" Or CbCons4 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 4": Exit Sub
If CbRef5 <> "" And (CbQteCons5 = "" Or CbCons5 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 5": Exit Sub
If CbRef6 <> "" And (CbQteCons6 = "" Or CbCons6 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 6": Exit Sub
If CbRef7 <> "" And (CbQteCons7 = "" Or CbCons7 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 7": Exit Sub
If CbRef8 <> "" And (CbQteCons8 = "" Or CbCons8 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 8": Exit Sub
If CbRef9 <> "" And (CbQteCons9 = "" Or CbCons9 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 9": Exit Sub

    With [TbCommande].ListObject
   ' initiles Produits pour Fiche Navette
            If CbProd1 <> "" Then p = Application.Match(Me.CbProd1, [TBProduit[PRODUITS]], 0):   TxtIniProd1.Value = Application.Index([TBProduit[Initiales Produits]], p)
            If CbProd2 <> "" Then p = Application.Match(Me.CbProd2, [TBProduit[PRODUITS]], 0):   TxtIniProd2.Value = Application.Index([TBProduit[Initiales Produits]], p)
            If CbProd3 <> "" Then p = Application.Match(Me.CbProd3, [TBProduit[PRODUITS]], 0):   TxtIniProd3.Value = Application.Index([TBProduit[Initiales Produits]], p)
            If CbProd4 <> "" Then p = Application.Match(Me.CbProd4, [TBProduit[PRODUITS]], 0):   TxtIniProd4.Value = Application.Index([TBProduit[Initiales Produits]], p)
            If CbProd5 <> "" Then p = Application.Match(Me.CbProd5, [TBProduit[PRODUITS]], 0):   TxtIniProd5.Value = Application.Index([TBProduit[Initiales Produits]], p)
            If CbProd6 <> "" Then p = Application.Match(Me.CbProd6, [TBProduit[PRODUITS]], 0):   TxtIniProd6.Value = Application.Index([TBProduit[Initiales Produits]], p)
            If CbProd7 <> "" Then p = Application.Match(Me.CbProd7, [TBProduit[PRODUITS]], 0):   TxtIniProd7.Value = Application.Index([TBProduit[Initiales Produits]], p)
            If CbProd8 <> "" Then p = Application.Match(Me.CbProd8, [TBProduit[PRODUITS]], 0):   TxtIniProd8.Value = Application.Index([TBProduit[Initiales Produits]], p)
            If CbProd9 <> "" Then TxtIniProd9.Value = CbProd9.Value
        Dim r, X, V, i&, reponse
            X = Application.IfError(Application.Match(TxtRefComm, .Range.Columns(13), 0), 0) ' test si ref commande existe déjà
        If X <> 0 And TxtRefComm <> "" Then MsgBox "Cette référence existe déjà" & vbCrLf & " Veuillez choisir une autre référence": Exit Sub
        
        PxAchatComm = IIf(TxtPrixAchatComm.Value = "", 0, TxtPrixAchatComm.Value) ' valeur numérique à 0
        QteProd1 = IIf(CbQte1.Value = "", 0, CbQte1.Value): QteProd2 = IIf(CbQte2.Value = "", 0, CbQte2.Value): QteProd3 = IIf(CbQte3.Value = "", 0, CbQte3.Value): QteProd4 = IIf(CbQte4.Value = "", 0, CbQte4.Value): QteProd5 = IIf(CbQte5.Value = "", 0, CbQte5.Value): QteProd6 = IIf(CbQte6.Value = "", 0, CbQte6.Value): QteProd7 = IIf(CbQte7.Value = "", 0, CbQte7.Value): QteProd8 = IIf(CbQte8.Value = "", 0, CbQte8.Value): QteProd9 = IIf(CbQte9.Value = "", 0, CbQte9.Value):
        PxProd1 = IIf(TxtPrix1.Value = "", 0, TxtPrix1.Value): PxProd2 = IIf(TxtPrix2.Value = "", 0, TxtPrix2.Value): PxProd3 = IIf(TxtPrix3.Value = "", 0, TxtPrix3.Value): PxProd4 = IIf(TxtPrix4.Value = "", 0, TxtPrix4.Value): PxProd5 = IIf(TxtPrix5.Value = "", 0, TxtPrix5.Value): PxProd6 = IIf(TxtPrix6.Value = "", 0, TxtPrix6.Value): PxProd7 = IIf(TxtPrix7.Value = "", 0, TxtPrix7.Value): PxProd8 = IIf(TxtPrix8.Value = "", 0, TxtPrix8.Value): PxProd9 = IIf(TxtPrix9.Value = "", 0, TxtPrix9.Value):
        QteCons1 = IIf(CbQteCons1.Value = "", 0, CbQteCons1.Value): QteCons2 = IIf(CbQteCons2.Value = "", 0, CbQteCons2.Value): QteCons3 = IIf(CbQteCons3.Value = "", 0, CbQteCons3.Value): QteCons4 = IIf(CbQteCons4.Value = "", 0, CbQteCons4.Value): QteCons5 = IIf(CbQteCons5.Value = "", 0, CbQteCons5.Value): QteCons6 = IIf(CbQteCons6.Value = "", 0, CbQteCons6.Value): QteCons7 = IIf(CbQteCons7.Value = "", 0, CbQteCons7.Value): QteCons8 = IIf(CbQteCons8.Value = "", 0, CbQteCons8.Value):: QteCons9 = IIf(CbQteCons9.Value = "", 0, CbQteCons9.Value)
        PrixFact1 = IIf(TxtPxFact1.Value = "", 0, TxtPxFact1.Value): PrixFact2 = IIf(TxtPxFact2.Value = "", 0, TxtPxFact2.Value): PrixFact3 = IIf(TxtPxFact3.Value = "", 0, TxtPxFact3.Value): PrixFact4 = IIf(TxtPxFact4.Value = "", 0, TxtPxFact4.Value): PrixFact5 = IIf(TxtPxFact5.Value = "", 0, TxtPxFact5.Value): PrixFact6 = IIf(TxtPxFact6.Value = "", 0, TxtPxFact6.Value): PrixFact7 = IIf(TxtPxFact7.Value = "", 0, TxtPxFact7.Value): PrixFact8 = IIf(TxtPxFact8.Value = "", 0, TxtPxFact8.Value): PrixFact9 = IIf(TxtPxFact9.Value = "", 0, TxtPxFact9.Value):
        heure = IIf(TxtHeure.Value = "", 0, TxtHeure.Value): acompte1 = IIf(Txt1erAcompte.Value = "", 0, Txt1erAcompte.Value): solde = IIf(TxtSolde.Value = "", 0, TxtSolde.Value)
        acompte2 = IIf(Txt2emeAcompte.Value = "", 0, Txt2emeAcompte.Value)
        Datetest = Now
        ' On constitue la liste de données à Ajouter à la liste
       V = Array(TxtCommercial, TxtNomClient, TxtPrenomCl, TxtRefDevis, TxtTelClient.Value, TxtVille2, CDbl(TxtPrixHT), CDbl(TxtPrixTTC), TxtDatePosePrevue, _
       TxtDateConfClient, CDbl(acompte1), Abs(ObMetOui), Abs(ObMetNon), CDate(heure), TxtRefComm, CDbl(TxtTempsPose), CDbl(TxtNbPers), _
       TxtDateMetrage, CbMetreur, TxtAdresse, TxtVille, TxtCp, TxtDateComFourn, TxtDateLivToury, CDbl(PxAchatComm), TxtCommentaire, CbPoseur, _
       CbPoseur2, Abs(ChbAttTVA), Abs(ChbCGV), Abs(ObDechetOui), Abs(ObDechetNon), CbProd1, CbDetail1, CDbl(QteProd1), CDbl(PxProd1), _
       CbProd2, CbDetail2, CDbl(QteProd2), CDbl(PxProd2), CbProd3, CbDetail3, CDbl(QteProd3), CDbl(PxProd3), CbProd4, CbDetail4, CDbl(QteProd4), _
       CDbl(PxProd4), CbProd5, CbDetail5, CDbl(QteProd5), CDbl(PxProd5), CbProd6, CbDetail6, CDbl(QteProd6), CDbl(PxProd6), CbProd7, CbDetail7, _
       CDbl(QteProd7), CDbl(PxProd7), CbProd8, CbDetail8, CDbl(QteProd8), CDbl(PxProd8), CbProd9, CbDetail9, CDbl(QteProd9), CDbl(PxProd9), CbRef1, _
       CDbl(QteCons1), CbCons1, CbRef2, CDbl(QteCons2), CbCons2, CbRef3, CDbl(QteCons3), CbCons3, CbRef4, CDbl(QteCons4), CbCons4, CbRef5, _
       CDbl(QteCons5), CbCons5, CbRef6, CDbl(QteCons6), CbCons6, CbRef7, CDbl(QteCons7), CbCons7, CbRef8, CDbl(QteCons8), CbCons8, CbRef9, _
       CDbl(QteCons9), CbCons9, TxtCommPassee)
       For i = LBound(V) To UBound(V)
           If IsNumeric(V(i)) Then V(i) = CDbl(V(i))
      Next
      .ListRows.Add.Range.Cells(1).Resize(, 96) = V ' On ajoute la ligne à la base de données
        LigSal = .ListRows.Count
        .ListRows(LigSal).Range.Cells(116).Resize(, 12) = Array(LblInitCommercial.Caption, TxtIniProd1, TxtIniProd2, _
        TxtIniProd3, TxtIniProd4, TxtIniProd5, TxtIniProd6, TxtIniProd7, TxtIniProd8, TxtIniProd9, CDbl(acompte2), CDbl(solde))
        .ListRows(LigSal).Range.Cells(132).Resize(, 3) = Array(Abs(ObFermeture), Abs(ObVeranda), Abs(ChbProspect))
        .ListRows(LigSal).Range.Cells(138).Resize(, 2) = Array(CDate(Format(Datetest, "dd/mm/yyyy hh:mm")), LblInit)
  End With
    Remplir_Navette
    
        Archive_Fiche_Navette
        Vidange
        
        UserForm_Initialize    'on remet la listbox a jour automatiquement
Application.ScreenUpdating = True
End Sub
 

vgendron

XLDnaute Barbatruc
pourquoi le second test n'est pas le meme que les autres?
VB:
If CbRef1 <> "" And (CbQteCons1 = "" Or CbCons1 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 1": Exit Sub
If CbRef2 <> "" And (CbQteCons2 = "" Or CbCons2 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 2: Exit Sub"

si le test sur CBRef2 est KO, tu ne sors PAS de la macro..
==> on en vient à ce que je disais: le code n'a pas toutes les infos necessaires

ce meme test erroné est aussi dans la macro
BtModifComm_Click
 

eric72

XLDnaute Accro
pourquoi le second test n'est pas le meme que les autres?
VB:
If CbRef1 <> "" And (CbQteCons1 = "" Or CbCons1 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 1": Exit Sub
If CbRef2 <> "" And (CbQteCons2 = "" Or CbCons2 = "") Then MsgBox "Il manque un Prix ou une Désignation Du Cosommable 2: Exit Sub"

si le test sur CBRef2 est KO, tu ne sors PAS de la macro..
==> on en vient à ce que je disais: le code n'a pas toutes les infos necessaires
En effet le " est après le Exit Sub oups la boulette!!!! cela pourrait-il venir de là?
 

vgendron

XLDnaute Barbatruc
Pas d'autre remarques sur le code?
Merci beaucoup pour le coup de main
oh si.. il y a à dire.. :-D
macro Actu: tu calcules une zone dans la feuille1...(=feuille Menu).. ne serait ce pas plutot la feuille "Données"??
et pourquoi forcer le calcul?? ton mode de calcul du classeur n'est pas en automatique?

coté purement esthétique.. l'indentation n'est pas très "rigoureuse", ce qui bien souvent permet de détecter des erreurs de syntaxe (le fameux guilemet pas à sa place par exemple)

macro "vidernavette":
plutot que vider les cellules une par une, tu peux utiliser une range.clearcontents
 

Pièces jointes

  • My Gest_Com_P NOM.xlsm
    182.1 KB · Affichages: 1

eric72

XLDnaute Accro
oh si.. il y a à dire.. :-D
macro Actu: tu calcules une zone dans la feuille1...(=feuille Menu).. ne serait ce pas plutot la feuille "Données"??
et pourquoi forcer le calcul?? ton mode de calcul du classeur n'est pas en automatique?

coté purement esthétique.. l'indentation n'est pas très "rigoureuse", ce qui bien souvent permet de détecter des erreurs de syntaxe (le fameux guilemet pas à sa place par exemple)

macro "vidernavette":
plutot que vider les cellules une par une, tu peux utiliser une range.clearcontents
Oui en effet le calcul sur la feuil1, pas terrible, par contre je force le calcul car je me suis aperçu que si l'utilisateur a besoin de consulter un autre fichier:
VB:
STXT(CELLULE("nomfichier");TROUVE("[";CELLULE("nomfichier"))+1;TROUVE("]";CELLULE("nomfichier"))-TROUVE("[";CELLULE("nomfichier"))-1)
peut faire référence au deuxième classeur, ce qui pose un problème.
Pour vider la Navette, c'est clair que c'est plus simple comme ça.
Merci 1000 fois pour toutes ces remarques, cela permet de progresser petit à petit.
Je ne ferme pas le post, j'attends les tests pour résoudre ce post.
Bonne journée à tous et encore merci.
 

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh