XL 2010 Suppression fournisseur (Modification VBA)

aminovsky

XLDnaute Nouveau
Bonjour à tous,
dans l'exemple que j'ai joint j'ai un code avec le quel je supprime les fournisseurs ajoutés,
dans l'onglet Données n'importe quelle cellule de la ligne 8 contenant le nom du fournisseur qu'on veut supprimé en cliquant par la suite sur l'onglet supprimer fournisseur, le code efface toutes les colonnes de l'onglet Total général qui concernent le fournisseur choisi.
mon problème c'est que pour supprimer un fournisseur je dois remplir le type et le prix unitaire et faire un passage dans l'onglet total général pour actualisation avant de cliquer sur supprimer fournisseur, car si par exemple dans l'exemple ci-joint je choisi la cellule F8 et je clique sur supprimer fournisseur le code bug parce que les informations de la colonne F ne sont pas remplis,
VB:
Sub SupprimerUnFournisseur()
   
    If Selection.Count > 1 Then End
    If Not Intersect(Selection, Range(Cells(8, 5), Cells(8, Cells(8, Columns.Count).End(xlToLeft).Column))) Is Nothing Then
        If Selection.Column = 5 Then
            MsgBox "Vous ne pouvez pas supprimer le premier fournisseur.", 16
            End
        Else
            rep = MsgBox("Vous voulez vraiment supprimer le fournisseur " & Selection.Value & " ?", 20)
            If rep = 7 Then End
           
            f = Selection
            Set ft = Sheets("Total Général")
           
            'colonnes de détail du fournisseur
            col = ft.Rows("10:10").Find("*LIVRAISON*", LookAt:=xlWhole).Column
            col2 = ft.Range(ft.Cells(10, 9), ft.Cells(10, col - 1)).Find(f, LookAt:=xlWhole, LookIn:=xlValues).Column
            ft.Range(ft.Columns(col2), ft.Columns(col2 + 6)).Delete Shift:=xlToLeft
           
            'colonne "LIVRAISON"
            col = ft.Rows("10:10").Find("LIVRAISON " & f, LookAt:=xlWhole, LookIn:=xlValues).Column
            ft.Range(ft.Columns(col), ft.Columns(col)).Delete Shift:=xlToLeft
           
            'colonnes "Prix unitaires"
            col = ft.Rows("10:10").Find(f, LookAt:=xlWhole, LookIn:=xlValues).Column
            ft.Range(ft.Columns(col), ft.Columns(col + 6)).Delete Shift:=xlToLeft
           
            'colonne "MONTANT FOURNISSEUR"
            col = ft.Rows("10:10").Find("MONTANT " & f, LookAt:=xlWhole, LookIn:=xlValues).Column
            ft.Range(ft.Columns(col), ft.Columns(col)).Delete Shift:=xlToLeft
           
            'colonne du fournisseur dans la feuille "Données"
            Range(Columns(Selection.Column), Columns(Selection.Column)).Delete Shift:=xlToLeft
           
            ActiveWorkbook.Names(f).Delete
           
        End If
    Else
        MsgBox "Vous devez sélectionner le nom du fournisseur à supprimer.", 16
        End
    End If
   
End Sub

j'attends vos recommandations

Merci d'avance
 

Pièces jointes

  • Suivi FRS.xlsm
    51.8 KB · Affichages: 71

aminovsky

XLDnaute Nouveau
Bonsoir a tous,
Je suis nouveau sur ce forum et ca fait plus que 24h que j'ai posté mon problème et personne ne m'a donné une solution
Est ce que je dois attendre la validation des moderateurs pour qu'il soit affiché parce que c'est le 1er message ???
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Non, non, évidemment ce n'est pas ça.
Il faut croire que ça n'a inspiré personne, ou que ce n'était pas assez clair, ou que tout devrait être repensé d'une autre façon, je ne sais pas, je commence seulement à regarder…
 

Dranreb

XLDnaute Barbatruc
Bonjour
La méthode Find renvoie Nothing si elle ne trouve pas.
Donc pour éviter des plantages, décomposez les Col = ….Find(etc…).Column en Set R = ….Find(etc…): If Not R Is Nothing Then Col = R.Column
Ou bien mettez On Error Resume Next, ensuite l'instruction qui peut planter, puis If Err=0 Then. Terminer par End If puis On Error GoTo 0
 

Dranreb

XLDnaute Barbatruc
Essayez comme ça là ou SUPPRIMER FOURNISSEUR plante après avoir sélectionné F8 (NICOLA) :
VB:
  Set Cel = ft.Range(ft.Cells(10, 9), ft.Cells(10, col - 1)).Find(f, LookAt:=xlWhole, LookIn:=xlValues)
            If Not Cel Is Nothing Then Cel.EntireColumn.Resize(, 7).Delete
 

Dranreb

XLDnaute Barbatruc
Et bien faites pareil pour tous les autre: n'essayez plus de récupérer directement la .Column d'une expression utilisant la méthode Find sans avoir d'abord vérifié qu'elle renvoie bien un Range et non pas Nothing, et tant qu'à faire, si elle renvoie bien une cellule, à quoi bon récupérer son numéro de colonne si c'est simplement pour supprimer la colonne entière dont elle fait partie.
 

Discussions similaires

Réponses
2
Affichages
208

Statistiques des forums

Discussions
312 913
Messages
2 093 534
Membres
105 750
dernier inscrit
fred13340