IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur d'execution '13' entre deux macro [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2015
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2015
    Messages : 86
    Par défaut Erreur d'execution '13' entre deux macro
    Bonjour tous le monde

    Voila je suis face à une erreur dont j'arrive pas à trouver la cause, en effet j'ai deux userform qui contiennent des macros le premier contient un combobox qui m'affiche la liste des fournisseur et un bouton qui appel le deuxième userform et dans ce deuxième userfom de textbox qui permet d'ajouter un nouveau fournisseur qui envoi les données vers une feuille nommée "Liste_fournisseur"

    jusque là tout fonctionne bien mais dès que je vide la feuille "Liste_fournisseur" en la remettant à zéro au lancement de l'userform il y a débogage Erreur d'execution '13'

    Voici l'ensemble des macros de l'userform menu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim f, choix1()
     
    Private Sub CommandButton1_Click()
    AjoutFournisseurs.Show
    End Sub
     
    Private Sub UserForm_Initialize()
     Set f = Sheets("liste_Fournisseurs")
      choix1 = Application.Transpose(f.Range("d12:D" & f.[D65000].End(xlUp).Row))
      Me.ComboBox1.List = choix1
    End Sub
    Private Sub ComboBox1_Change()
     If Me.ComboBox1.ListIndex = -1 And IsError(Application.Match(Me.ComboBox1, choix1, 0)) Then
       Me.ComboBox1.List = Filter(choix1, Me.ComboBox1.Text, True, vbTextCompare)
       Me.ComboBox1.DropDown
      End If
    End Sub
    Et celles-ci de l'userform ajoutfournisseur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub AjoutNouveauFournisseur_Click()
     
      Dim Ctrl As Control
      Dim r As Integer
      Dim Derligne As Integer
      Dim LigneDebut As Long
     
      'Si le Fourniseurs_TextBox est vide ou c'est une valeur numérique
      If Trim(Fourniseurs_TextBox) = "" Or IsNumeric(Fourniseurs_TextBox) Then
      'Alors arrêt avec ce message en sortant de la boucle et en retourant sur Fourniseurs_TextBox
      MsgBox "Votre cellule est vide ou en format incorrecte! Veuillez le redéfinir", vbCritical
      On Error GoTo 0: Fourniseurs_TextBox.SetFocus: Exit Sub
      End If
      With Worksheets("Liste_Fournisseurs")
          LigneDebut = 12
          Derligne = .Range("C" & Cells.Rows.Count).End(xlUp).Row + 1
            For Each Ctrl In AjoutFournisseurs.Controls
            r = Val(Ctrl.Tag)
                    If r > 0 Then .Cells(Derligne, r) = Ctrl
            Next
          Fourniseurs_TextBox = ""
          Fourniseurs_TextBox.SetFocus
       End With
        ActiveWorkbook.Worksheets("Liste_Fournisseurs").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Liste_Fournisseurs").Sort.SortFields.Add Key:= _
            Range("D12:D" & Derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
            :=xlSortNormal
        ActiveWorkbook.Worksheets("Liste_Fournisseurs").Sort.SortFields.Add Key:= _
            Range("C12:C" & Derligne), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
            :=xlSortTextAsNumbers
        With ActiveWorkbook.Worksheets("Liste_Fournisseurs").Sort
            .SetRange Range("B11:D" & Derligne)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
       End Sub
     
    Private Sub Annulation_Click()
    Unload AjoutFournisseurs
    End Sub
     
    Private Sub UserForm_Initialize()
      DateBox.Value = FormatDateTime(Now, vbShortDate)
    End Sub
    et ici le fichier joins pour être plus claire

    Merci à vous tous cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix1 = Application.Transpose(f.Range("d12:D" & f.[D65000].End(xlUp).Row))
    ton en-tête est en D11

    donc quand ta liste est vide : choix = le titre de la colonne et une ligne vide <>D12:D11
    et ensuite, quand tu écris le premier fournisseur, que se passe-t-il ? Transpose nécessite combien de cellules au minimum ?


    deux solutions :

    - revoir le positionnement
    - revoir la ligne de code

    bon tests

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2015
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2015
    Messages : 86
    Par défaut
    Bonjour

    Merci pour la réponse

    Et bien à l'essai il faut deux lignes minimum pour que ça bug pas

    Donc je pense il faut revoir ce code afin de qu'il accepte la liste des fournisseurs vierge dans un premier temps et qu'il bug pas lors d'ajout du premier fournisseur et c'est là ou je me coince.


    Une idée l'ami ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il suffit de connaître la ligne résultant du calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.[D65000].End(xlUp).Row
    si = 11 : la liste est vide ==> ne rien faire
    si = 12 : il n'y a qu'un élément ==> le mettre dans choix 1
    si > 12 : on crée la liste avec un transpose qui met la plage dans choix1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    choix1 = Application.Transpose(f.Range("d12:D" & f.[D65000].End(xlUp).Row))
    très simple

  5. #5
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2015
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2015
    Messages : 86
    Par défaut
    Bonjour Joe levrai

    Et bien merci pour le fil après essai cette macro fait bien l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Public Sub UserForm_Initialize()
     
      Dim f As Worksheet, Choix1, Nbl&
     
      Set f = Sheets("liste_fournisseurs")
      Nbl = f.[D1048576].End(xlUp).Row
      Select Case Nbl
        Case Is < 12
        Exit Sub
        Case 12
        Me.ComboBox1.AddItem f.Range("D12")
        Case Else
        Choix1 = Application.Transpose(f.Range("D12:D" & Nbl))
        Me.ComboBox1.List = Choix1
      End Select
    End Sub
    Merci encore mon ami

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] erreur aléatoire de comparaison entre deux valeurs
    Par jean_jean dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/04/2012, 17h58
  2. [XL-2003] executer une macro entre deux dates
    Par Eric26 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2011, 09h24
  3. erreur d'execution '13' dans une macro Excel lors du passage 2003->2007
    Par Bobsinglar dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/10/2008, 15h16
  4. Communication entre deux Executables ?
    Par QAYS dans le forum Langage
    Réponses: 8
    Dernier message: 11/05/2005, 14h41
  5. communication entre deux executables
    Par semenzato dans le forum MFC
    Réponses: 8
    Dernier message: 13/04/2005, 22h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo