[EXCEL2010] Pouvez vous verifier ce code svp

Résolu/Fermé
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 - 6 nov. 2011 à 14:33
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 - 7 nov. 2011 à 13:22
Bonjour,
J'ai pris des bouts de code sur le net dans l'espoir que mis bout à bout cela marche mais bien sur c'est raté.


Public Sub CommandButton2_Click() 'copie sauvegarde classeur


If ("M17:P17,M23:P23") <> "" Then
    MsgBox ("Vous devez renseigner un nom de client ainsi qu'un numéro de facture pour l'enregistrement")
Exit Sub


Else
Dim nom As String
    nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & Range("M17") & "_" & Range("M23")
    ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom
    rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")


If MsgBox("Voulez vous effacer les données ?", _
    vbYesNo, "Attention !") = vbYes Then Range("B3:B26,C3:C26,F3:F26,H3:H26,M17:P17,M19:P19,M21:P21,M23:P23,M25:P25,M27:P27,M29:P29,M30:P30,M31:P31,M32:P32,M33:P33").ClearContents
End If
End Sub




J'ai fait des saut de ligne pour l'exemple
Ce code serais sensé :
1 - Verifier que cellule M17:P17 et M23:P23 ne soit pas vide sinon affichage message et fin de code
2 - Enregistrer le workbook
3 - Effacer les donnees si je le souhaite

Sans la partie 1 les parties 2 et 3 fonctionnent bien (peut etre pas dans l'exemple en haut je l'ai tripatouiller)

Je me doute bien qu il y a une histoire de if else endif et autre mais je ne connais pas le vba pour me debrouiller par moi même.


pouvez vous m'aider svp



A voir également:

9 réponses

m@rina Messages postés 21229 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 6 janvier 2025 11 375
6 nov. 2011 à 16:13
Bonjour,

Si tu commences une condition par IF, elle doit obligatoirement se terminer par END IF...
Tu peux avoir des imbrications de IF :

IF ....
     IF ....
     END IF
END IF


Je regarde rapidement ton code, et je vois deux IF et un seul END IF
0
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
6 nov. 2011 à 16:28
J'ai modifier le code mais la premiere etape ne marche pas (verifier si cellule est remplie)
Le reste marche

y a t il une erreur dans le code de la premiere partie ?

Public Sub CommandButton2_Click() 'copie sauvegarde classeur
If ("M17:P17,M23:P23") = "" Then
    MsgBox ("Vous devez renseigner un nom de client ainsi qu'un numéro de facture pour l'enregistrement")
Exit Sub
Else
If ("M17:P17,M23:P23") <> "" Then
Dim nom As String
    nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & Range("M17") & "_" & Range("M23") & "_" & ActiveWorkbook.Name
    ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom
    rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")
End If
If MsgBox("Voulez vous effacer les données ?", _
    vbYesNo, "Attention !") = vbYes Then Range("B3:B26,C3:C26,F3:F26,H3:H26,M17:P17,M19:P19,M21:P21,M23:P23,M25:P25,M27:P27,M29:P29,M30:P30,M31:P31,M32:P32,M33:P33").ClearContents
End If
End Sub
0
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
Modifié par ced3c le 6/11/2011 à 16:57
ah ça s'améliore

mais le problème est que la vérification des cellules ne se fait que sur la première cellule (M17)

If IsEmpty(Range("M17,M23")) Then 
    MsgBox ("Vous devez renseigner un nom de client ainsi qu'un numéro de facture pour l'enregistrement") 
Exit Sub 

Comment dois je l'écrire pour que cela marche aussi sur M23 svp ?
0
m@rina Messages postés 21229 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 6 janvier 2025 11 375
Modifié par m@rina le 6/11/2011 à 17:21
Il faut faire une boucle sur chaque cellule et vérifier si elle vide :

For Each cellule In Range("M17:P17,M23:P23")  
If IsEmpty(cellule) Then  
MsgBox "Vous devez blablabla...!"  
Exit Sub  
End If  
next 


m@rina
0

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

Posez votre question
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
6 nov. 2011 à 17:37
je suis vraiment désolé m@rina mais je fais encore des erreurs

Public Sub CommandButton2_Click() 'copie sauvegarde classeur
For Each cellule In Range("M17:P17,M23:P23")
If IsEmpty(cellule) Then
MsgBox "Vous devez blablabla...!"
Exit Sub
End If
Next
Else
If ("M17:P17,M23:P23") <> "" Then
Dim nom As String
    nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & Range("M17") & "_" & Range("M23") & "_" & ActiveWorkbook.Name
    ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & nom
    rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")
End If
If MsgBox("Voulez vous effacer les données ?", _
    vbYesNo, "Attention !") = vbYes Then Range("B3:B26,C3:C26,F3:F26,H3:H26,M17:P17,M19:P19,M21:P21,M23:P23,M25:P25,M27:P27,M29:P29,M30:P30,M31:P31,M32:P32,M33:P33").ClearContents
End If
End Sub


le else pose problème mais si je l enlève, y a un autre problème .....
Je ne connais pas le vba et je ne sais pas du tout comment m en sortir la

Apparemment ce que tu m'as donner comme réponse conviendrais parfaitement mais je ne sais pas du tout l'exploiter.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
6 nov. 2011 à 18:46
Bonjour à tous

petite maquette pour le principe
Sub xxxx()

Set Source = Union(Range("M17:P17"), Range("M23:P23"))
If Application.CountA(Source) = 0 Then
MsgBox "vide"
Else
MsgBox "au moins une valeur"
End If


maintenant eb regardant ton code tu sembles n'avoir besoin que de M17 et M23,

donc si par ex M17 est vide mais N17= "azerty", problème...

Ps: ca va M@rina, bien longtemps que je ne t'avais croisé!
0
m@rina Messages postés 21229 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 6 janvier 2025 11 375
6 nov. 2011 à 20:47
Hello Michel !! ;))) Je te laisse prendre le relais !
Moi je vais me reposer ! :) A +
0
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
6 nov. 2011 à 19:54
Merci de vos réponses

Je ne comprends pas
j'essai plusieurs choses mais rien à faire
Si vous acceptez encore de m'aider je vous joint le fichier excel
Le code est sur la feuille vente

http://www.cijoint.fr/cjlink.php?file=cj201111/cijgtvZG1R.xlsm

Peut être que ce sera plus facile comme cela
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
Modifié par eriiic le 7/11/2011 à 09:45
Bonjour,

Ton code :
Set Source = Union(Range("M17:P17"), Range("M23:P17")) 
If Application.CountA(Source) = 0 Then 

Oublions l'erreur de saisie M23:P17...

Tes colonne M:P sont fusionnées, dans ce cas seule M est utilisée, inutile de spécifier les autres (elles seront toujours vides).
Il faut savoir que la fusion de colonne pose beaucoup de pb (ici ce n'est pas ce qui bloque mais il faut le savoir) et il faut l'éviter au maximum. Tu peux très bien t'en passer en élargissant M

Ton erreur :
Si j'ai bien compris tu veux que les 2 cellules soient remplies. Donc :
Set Source = Union(Range("M17"), Range("M23")) 
If Application.CountA(Source) < 2 Then 


Teste et dis...

eric
0
ced3c Messages postés 237 Date d'inscription samedi 19 juillet 2008 Statut Membre Dernière intervention 28 mai 2016 5
7 nov. 2011 à 13:22
Bonjour Eriiic

T'es un king cela marche niquel
C'est tout juste ce que je désirais

Je vais suivre ton conseil et éviter un maximum les fusions de cellules

Je vous remercie tous les trois de vos aides et conseils :)

et de votre patiente ^^

Merci et à très bientôt je pense
0