XL 2010 D'une userform transfert sur plusieurs feuilles en fonction

ccia

XLDnaute Nouveau
Bonjour le Forum,

je cherche à améliorer une macro pour la rendre moins "gourmande"..lol
je m'explique
je suis en train de concevoir un fichier comtat pour une association...(NB je n'y connais rien en compta.)
grâce à un userform je transfert les données sur une feuille journal et celons le nom du compte, renvoi sur la feuille du compte indiqué.
voici la partie de la macro que j'utilise :

' RENVOYER DANS LES DIFFERENTES FEUILLES DE COMPTES
' LES CHARGES
If ComboBox2.Value = "6023 A" Then
With Sheets("6023 A")
.Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
.Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
If TextBox3 = "" Then
.Range("B3") = CDate(TextBox2) ' renvoi la date automatique
Else
.Range("B3") = TextBox3 ' sinon renvoi la date saisie
End If
.Range("C3").Value = TextBox4 'renvoi la desognation
.Range("D3").Value = ComboBox3 'renvoi compte financier
.Range("E3").Value = ComboBox1 'renvoi moyen de réglement
.Range("F3").Value = TextBox6 ' renvoi le n° de cheque
.Range("G3").Value = (TextBox7) ' renvoi la somme
End With


ElseIf ComboBox2.Value = "60281 M" Then
With Sheets("60281 M")
.Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
.Range("A3").Value = (TextBox1)
If TextBox3 = "" Then
.Range("B3") = CDate(TextBox2) ' renvoi la date automatique
Else
.Range("B3") = TextBox3 ' sinon renvoi la date saisie
End If
.Range("C3").Value = TextBox4
.Range("D3").Value = ComboBox3
.Range("E3").Value = ComboBox1 'renvoi moyen de réglement
.Range("F3").Value = TextBox6 ' renvoi le n° de cheque
.Range("G3").Value = (TextBox7) ' renvoi la somme
End With

ElseIf ComboBox2.Value = "60282 P" Then
With Sheets("60282 P")
.Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
.Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
If TextBox3 = "" Then
.Range("B3") = CDate(TextBox2) ' renvoi la date automatique
Else
.Range("B3") = TextBox3 ' sinon renvoi la date saisie
End If
.Range("C3").Value = TextBox4 'renvoi la desognation
.Range("D3").Value = ComboBox3 'renvoi compte financier
.Range("E3").Value = ComboBox1 'renvoi moyen de réglement
.Range("F3").Value = TextBox6 ' renvoi le n° de cheque
.Range("G3").Value = (TextBox7) ' renvoi la somme
End With


ElseIf ComboBox2.Value = "6063 E" Then
With Sheets("6063 E")
.Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
.Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
If TextBox3 = "" Then
.Range("B3") = CDate(TextBox2) ' renvoi la date automatique
Else
.Range("B3") = TextBox3 ' sinon renvoi la date saisie
End If
.Range("C3").Value = TextBox4 'renvoi la desognation
.Range("D3").Value = ComboBox3 'renvoi compte financier
.Range("E3").Value = ComboBox1 'renvoi moyen de réglement
.Range("F3").Value = TextBox6 ' renvoi le n° de cheque
.Range("G3").Value = (TextBox7) ' renvoi la somme
End With

ElseIf .............................

malheureusement, au vu du nombre de feuille la macro BLOQUE : trop importante

Donc comment améliorer ou changer la macro et ne plus avoir ce message d'erreur
Merci d'avance au forum
 

Pièces jointes

  • Compta-association V1.xlsm
    487.4 KB · Affichages: 8
Solution
Bonjour @ccia

Ton problème viens de la longueur de ton code 1200 lignes de code c'est ...beaucoup 🤔 🙃

Je dois avouer que j'ai pas eu trop envie de tout refaire o_Omais voici les grandes lignes de simplification de ton code dans USF

Le principe pour ton bouton "CommandButton1_Click" qui fait ~760 lignes qu'on peut réduire à moins de 200 à 300 lignes et encore surement moins.

On peut diviser le code de ton bouton en 3 parties (zone)

Zone 1 :
Une partie propre à chaque feuille

Zone 2 :
Une partie commune à chaque feuille

Zone 3 :
De nouveau une partie propre à chaque feuille (éventuellement)

VB:
Sub CommandButton1_Click() ' en cliquant sur le bouton de commande 1 (nouvelle saisie ou modification)...

Phil69970

XLDnaute Barbatruc
Bonjour @ccia

Ton problème viens de la longueur de ton code 1200 lignes de code c'est ...beaucoup 🤔 🙃

Je dois avouer que j'ai pas eu trop envie de tout refaire o_Omais voici les grandes lignes de simplification de ton code dans USF

Le principe pour ton bouton "CommandButton1_Click" qui fait ~760 lignes qu'on peut réduire à moins de 200 à 300 lignes et encore surement moins.

On peut diviser le code de ton bouton en 3 parties (zone)

Zone 1 :
Une partie propre à chaque feuille

Zone 2 :
Une partie commune à chaque feuille

Zone 3 :
De nouveau une partie propre à chaque feuille (éventuellement)

VB:
Sub CommandButton1_Click() ' en cliquant sur le bouton de commande 1 (nouvelle saisie ou modification)


'*******************************************************************************
'*
'*      'Zone 1
'*      'Partie du code propre à chaque feuille
'*
'*******************************************************************************

'...Code de la zone 1
'Blablabla 1


'*******************************************************************************
'*
'*      'Zone 2
'*      'Partie du code commune à chaque feuille
'*
'*******************************************************************************
'...Code de la zone 2

Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Sheets

    Select Case Ws.Name

    Case "6023 A", "60281 M", "nom des autres feuilles" 'Liste à completer
 
        '...ici, le code identique pour toutes les feuilles mentionnées au dessus

'*******************************************************************************
'*
'*        '...Juste avec ces lignes tu gagnes environ 600 lignes de codes !!!!!!
'*
'*******************************************************************************

        ' RENVOYER DANS LES DIFFERENTES FEUILLES DE COMPTES
        ' LES CHARGES
        If ComboBox2.Value = Ws.Name Then 'Compare le nom de la Combo avec le nom de la feuille
            With Ws
                .Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
                .Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
                If TextBox3 = "" Then
                .Range("B3") = CDate(TextBox2) ' renvoi la date automatique
                Else
                .Range("B3") = TextBox3 ' sinon renvoi la date saisie
                End If
                .Range("C3").Value = TextBox4 'renvoi la desognation
                .Range("D3").Value = ComboBox3 'renvoi compte financier
                .Range("E3").Value = ComboBox1 'renvoi moyen de réglement
                .Range("F3").Value = TextBox6 ' renvoi le n° de cheque
                .Range("G3").Value = (TextBox7) ' renvoi la somme
            End With
        End If
 
    Case "abc", "xyz" 'Nom à adapter selon si besoin (OPTIONNEL)
        '...ici, le code identique pour toutes les feuilles mentionnées au dessus

    Case Else
        '...Ici le code pour toutes les situations imprévus

    End Select

Next Ws

'*******************************************************************************
'*
'*      'Zone 3
'*      'Fin de partie du code propre à chaque feuille éventuellement
'*
'*******************************************************************************

'...Code de la zone 3
'Blablabla 3

End Sub

J'ai fait la partie commune c'est à dire la zone 2 et qui fonctionne pour les feuilles "6023 A", "60281 M" je te laisse remplir les autres noms de feuilles
A toi de faire le reste maintenant que tu as le principe.

Il faut sur le même principe pour le bouton de command2

De 300 lignes tu vas avoir seulement 40 lignes......
VB:
Private Sub CommandButton2_Click()

Dim nbl As Long, i As Long 'declaration des variante : Long = entier long (4 oct)

'Partie zone 1
If MsgBox("ATTENTION - Vous allez vider la ligne sélectionée", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
    ' VIDER LES DONNEES DANS LA FEUILLE JOURNAL
    nbl = ActiveCell.Row ' donne une variante
    If nbl < 7 Then Exit Sub ' à partir de la ligne 7 sur la ligne selectionné
        Rows(nbl).ClearContents ' on efface toutes les données de la ligne
        'Cells(nbl & 2;20).ClearContents
        Range("A" & nbl).Value = (TextBox1)
        Range("C" & nbl).Value = "donnée annulée"

'Partie zone 2 commune à X feuilles
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Sheets
        Select Case Ws.Name
        Case "6023 ALIMENTATION", "60281 MEDAILLES S.", "nom des autres feuilles" 'Liste à completer
        ' RETIRER LES DONNEES DANS LA FEUILLE DE COMPTE CORRESPONDANTE & remonte la ligne
            If ComboBox2.Value = Ws.Name Then   'si la valeur du combox 2 est :"...
                With Ws                         'aller sur la feuille :"....
                    For i = .Range("A65000").End(xlUp).Row To 2 Step -1 'la variante i ce trouve dans la colonne A
                        If CStr(.Cells(i, 1)) = TextBox1.Value Then '
                            .Rows(i).EntireRow.Delete Shift:=xlUp ' retire la ligne de la variante i et remonte d'une ligne
                        End If
                    Next
                End With
            End If
           
        Case Else
        '...Ici le code pour toutes les situations imprévus
        End Select
    Next Ws
End If

'Partie Zone 3
Worksheets("Systeme").Range("J4").ClearContents 'vide (oui) la cellule J4 de la feuille sytéme
Unload UserForm1 'ferme la userform 1
End Sub

J'ai fait la macro command2 qui fonctionne pour les feuilles "6023 ALIMENTATION", "60281 MEDAILLES S." je te laisse remplir les autres noms de feuilles
A toi de faire le reste maintenant que tu as le principe.

*************************************************************

Autrement une autre piste mais il faut revoir la totalité de ton projet c'est de créer UNE feuille à la demande vu que tu ne peux jamais voir plus d'une feuille à la fois.

Tu as besoin uniquement des feuilles suivantes
1661655856963.png

Et d'une feuille supplémentaire modèle

En cliquant par exemple sur "6023 A" tu crées ta feuille avec les infos qui se complète d’après un modèle et une BDD

Merci de ton retour

@Phil69970
 
Dernière édition:

ccia

XLDnaute Nouveau
Bonjour @ccia

Ton problème viens de la longueur de ton code 1200 lignes de code c'est ...beaucoup 🤔 🙃

Je dois avouer que j'ai pas eu trop envie de tout refaire o_Omais voici les grandes lignes de simplification de ton code dans USF

Le principe pour ton bouton "CommandButton1_Click" qui fait ~760 lignes qu'on peut réduire à moins de 200 à 300 lignes et encore surement moins.

On peut diviser le code de ton bouton en 3 parties (zone)

Zone 1 :
Une partie propre à chaque feuille

Zone 2 :
Une partie commune à chaque feuille

Zone 3 :
De nouveau une partie propre à chaque feuille (éventuellement)

VB:
Sub CommandButton1_Click() ' en cliquant sur le bouton de commande 1 (nouvelle saisie ou modification)


'*******************************************************************************
'*
'*      'Zone 1
'*      'Partie du code propre à chaque feuille
'*
'*******************************************************************************

'...Code de la zone 1
'Blablabla 1


'*******************************************************************************
'*
'*      'Zone 2
'*      'Partie du code commune à chaque feuille
'*
'*******************************************************************************
'...Code de la zone 2

Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Sheets

    Select Case Ws.Name

    Case "6023 A", "60281 M", "nom des autres feuilles" 'Liste à completer
 
        '...ici, le code identique pour toutes les feuilles mentionnées au dessus

'*******************************************************************************
'*
'*        '...Juste avec ces lignes tu gagnes environ 600 lignes de codes !!!!!!
'*
'*******************************************************************************

        ' RENVOYER DANS LES DIFFERENTES FEUILLES DE COMPTES
        ' LES CHARGES
        If ComboBox2.Value = Ws.Name Then 'Compare le nom de la Combo avec le nom de la feuille
            With Ws
                .Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
                .Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
                If TextBox3 = "" Then
                .Range("B3") = CDate(TextBox2) ' renvoi la date automatique
                Else
                .Range("B3") = TextBox3 ' sinon renvoi la date saisie
                End If
                .Range("C3").Value = TextBox4 'renvoi la desognation
                .Range("D3").Value = ComboBox3 'renvoi compte financier
                .Range("E3").Value = ComboBox1 'renvoi moyen de réglement
                .Range("F3").Value = TextBox6 ' renvoi le n° de cheque
                .Range("G3").Value = (TextBox7) ' renvoi la somme
            End With
        End If
 
    Case "abc", "xyz" 'Nom à adapter selon si besoin (OPTIONNEL)
        '...ici, le code identique pour toutes les feuilles mentionnées au dessus

    Case Else
        '...Ici le code pour toutes les situations imprévus

    End Select

Next Ws

'*******************************************************************************
'*
'*      'Zone 3
'*      'Fin de partie du code propre à chaque feuille éventuellement
'*
'*******************************************************************************

'...Code de la zone 3
'Blablabla 3

End Sub

J'ai fait la partie commune c'est à dire la zone 2 et qui fonctionne pour les feuilles "6023 A", "60281 M" je te laisse remplir les autres noms de feuilles
A toi de faire le reste maintenant que tu as le principe.

Il faut sur le même principe pour le bouton de command2

De 300 lignes tu vas avoir seulement 40 lignes......
VB:
Private Sub CommandButton2_Click()

Dim nbl As Long, i As Long 'declaration des variante : Long = entier long (4 oct)

'Partie zone 1
If MsgBox("ATTENTION - Vous allez vider la ligne sélectionée", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
    ' VIDER LES DONNEES DANS LA FEUILLE JOURNAL
    nbl = ActiveCell.Row ' donne une variante
    If nbl < 7 Then Exit Sub ' à partir de la ligne 7 sur la ligne selectionné
        Rows(nbl).ClearContents ' on efface toutes les données de la ligne
        'Cells(nbl & 2;20).ClearContents
        Range("A" & nbl).Value = (TextBox1)
        Range("C" & nbl).Value = "donnée annulée"

'Partie zone 2 commune à X feuilles
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Sheets
        Select Case Ws.Name
        Case "6023 ALIMENTATION", "60281 MEDAILLES S.", "nom des autres feuilles" 'Liste à completer
        ' RETIRER LES DONNEES DANS LA FEUILLE DE COMPTE CORRESPONDANTE & remonte la ligne
            If ComboBox2.Value = Ws.Name Then   'si la valeur du combox 2 est :"...
                With Ws                         'aller sur la feuille :"....
                    For i = .Range("A65000").End(xlUp).Row To 2 Step -1 'la variante i ce trouve dans la colonne A
                        If CStr(.Cells(i, 1)) = TextBox1.Value Then '
                            .Rows(i).EntireRow.Delete Shift:=xlUp ' retire la ligne de la variante i et remonte d'une ligne
                        End If
                    Next
                End With
            End If
          
        Case Else
        '...Ici le code pour toutes les situations imprévus
        End Select
    Next Ws
End If

'Partie Zone 3
Worksheets("Systeme").Range("J4").ClearContents 'vide (oui) la cellule J4 de la feuille sytéme
Unload UserForm1 'ferme la userform 1
End Sub

J'ai fait la macro command2 qui fonctionne pour les feuilles "6023 ALIMENTATION", "60281 MEDAILLES S." je te laisse remplir les autres noms de feuilles
A toi de faire le reste maintenant que tu as le principe.

*************************************************************

Autrement une autre piste mais il faut revoir la totalité de ton projet c'est de créer UNE feuille à la demande vu que tu ne peux jamais voir plus d'une feuille à la fois.

Tu as besoin uniquement des feuilles suivantes
Regarde la pièce jointe 1148240
Et d'une feuille supplémentaire modèle

En cliquant par exemple sur "6023 A" tu crées ta feuille avec les infos qui se complète d’après un modèle et une BDD

Merci de ton retour

@Phil69970
Bonjour Phil
Tout d'abord merci d'avoir répondu aussi vite ,
Comme vous avez pu le constater je suis un novice en vba et du fait mes macros sont souvent simple répétitives et longue.

Là vous me donnez la bonne voie et en plus on va certainement gagner en rapidité.
je vais donc étudier et modifier en conséquence... mais d'abord étudier (en autodidacte)
j'ai encore un peu de temps j'ai promis de le finir pour le mois de novembre ou plus...après tout c'est du free

mais naturellement j'ai d'autres commandes à trouver et à faire évoluer
j'aurais certainement besoin d'autres coups de mains et une fois fini le mettre sur le site.

Merci encore et salutations
Antoine
 

ccia

XLDnaute Nouveau
Bonjour @ccia

Ton problème viens de la longueur de ton code 1200 lignes de code c'est ...beaucoup 🤔 🙃

Je dois avouer que j'ai pas eu trop envie de tout refaire o_Omais voici les grandes lignes de simplification de ton code dans USF

Le principe pour ton bouton "CommandButton1_Click" qui fait ~760 lignes qu'on peut réduire à moins de 200 à 300 lignes et encore surement moins.

On peut diviser le code de ton bouton en 3 parties (zone)

Zone 1 :
Une partie propre à chaque feuille

Zone 2 :
Une partie commune à chaque feuille

Zone 3 :
De nouveau une partie propre à chaque feuille (éventuellement)

VB:
Sub CommandButton1_Click() ' en cliquant sur le bouton de commande 1 (nouvelle saisie ou modification)


'*******************************************************************************
'*
'*      'Zone 1
'*      'Partie du code propre à chaque feuille
'*
'*******************************************************************************

'...Code de la zone 1
'Blablabla 1


'*******************************************************************************
'*
'*      'Zone 2
'*      'Partie du code commune à chaque feuille
'*
'*******************************************************************************
'...Code de la zone 2

Dim Ws As Worksheet
For Each Ws In ThisWorkbook.Sheets

    Select Case Ws.Name

    Case "6023 A", "60281 M", "nom des autres feuilles" 'Liste à completer
 
        '...ici, le code identique pour toutes les feuilles mentionnées au dessus

'*******************************************************************************
'*
'*        '...Juste avec ces lignes tu gagnes environ 600 lignes de codes !!!!!!
'*
'*******************************************************************************

        ' RENVOYER DANS LES DIFFERENTES FEUILLES DE COMPTES
        ' LES CHARGES
        If ComboBox2.Value = Ws.Name Then 'Compare le nom de la Combo avec le nom de la feuille
            With Ws
                .Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
                .Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
                If TextBox3 = "" Then
                .Range("B3") = CDate(TextBox2) ' renvoi la date automatique
                Else
                .Range("B3") = TextBox3 ' sinon renvoi la date saisie
                End If
                .Range("C3").Value = TextBox4 'renvoi la desognation
                .Range("D3").Value = ComboBox3 'renvoi compte financier
                .Range("E3").Value = ComboBox1 'renvoi moyen de réglement
                .Range("F3").Value = TextBox6 ' renvoi le n° de cheque
                .Range("G3").Value = (TextBox7) ' renvoi la somme
            End With
        End If
 
    Case "abc", "xyz" 'Nom à adapter selon si besoin (OPTIONNEL)
        '...ici, le code identique pour toutes les feuilles mentionnées au dessus

    Case Else
        '...Ici le code pour toutes les situations imprévus

    End Select

Next Ws

'*******************************************************************************
'*
'*      'Zone 3
'*      'Fin de partie du code propre à chaque feuille éventuellement
'*
'*******************************************************************************

'...Code de la zone 3
'Blablabla 3

End Sub

J'ai fait la partie commune c'est à dire la zone 2 et qui fonctionne pour les feuilles "6023 A", "60281 M" je te laisse remplir les autres noms de feuilles
A toi de faire le reste maintenant que tu as le principe.

Il faut sur le même principe pour le bouton de command2

De 300 lignes tu vas avoir seulement 40 lignes......
VB:
Private Sub CommandButton2_Click()

Dim nbl As Long, i As Long 'declaration des variante : Long = entier long (4 oct)

'Partie zone 1
If MsgBox("ATTENTION - Vous allez vider la ligne sélectionée", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
    ' VIDER LES DONNEES DANS LA FEUILLE JOURNAL
    nbl = ActiveCell.Row ' donne une variante
    If nbl < 7 Then Exit Sub ' à partir de la ligne 7 sur la ligne selectionné
        Rows(nbl).ClearContents ' on efface toutes les données de la ligne
        'Cells(nbl & 2;20).ClearContents
        Range("A" & nbl).Value = (TextBox1)
        Range("C" & nbl).Value = "donnée annulée"

'Partie zone 2 commune à X feuilles
    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Sheets
        Select Case Ws.Name
        Case "6023 ALIMENTATION", "60281 MEDAILLES S.", "nom des autres feuilles" 'Liste à completer
        ' RETIRER LES DONNEES DANS LA FEUILLE DE COMPTE CORRESPONDANTE & remonte la ligne
            If ComboBox2.Value = Ws.Name Then   'si la valeur du combox 2 est :"...
                With Ws                         'aller sur la feuille :"....
                    For i = .Range("A65000").End(xlUp).Row To 2 Step -1 'la variante i ce trouve dans la colonne A
                        If CStr(.Cells(i, 1)) = TextBox1.Value Then '
                            .Rows(i).EntireRow.Delete Shift:=xlUp ' retire la ligne de la variante i et remonte d'une ligne
                        End If
                    Next
                End With
            End If
          
        Case Else
        '...Ici le code pour toutes les situations imprévus
        End Select
    Next Ws
End If

'Partie Zone 3
Worksheets("Systeme").Range("J4").ClearContents 'vide (oui) la cellule J4 de la feuille sytéme
Unload UserForm1 'ferme la userform 1
End Sub

J'ai fait la macro command2 qui fonctionne pour les feuilles "6023 ALIMENTATION", "60281 MEDAILLES S." je te laisse remplir les autres noms de feuilles
A toi de faire le reste maintenant que tu as le principe.

*************************************************************

Autrement une autre piste mais il faut revoir la totalité de ton projet c'est de créer UNE feuille à la demande vu que tu ne peux jamais voir plus d'une feuille à la fois.

Tu as besoin uniquement des feuilles suivantes
Regarde la pièce jointe 1148240
Et d'une feuille supplémentaire modèle

En cliquant par exemple sur "6023 A" tu crées ta feuille avec les infos qui se complète d’après un modèle et une BDD

Merci de ton retour

@Phil69970
Re bonjour,
voici le fichier avec ton votre code pour la suppression de la saisie voulue dans les différente feuille compta.

Magnifique cela fonction à merveille
@+ salutations
 

Pièces jointes

  • Compta-association V2.xlsm
    498.7 KB · Affichages: 5

ccia

XLDnaute Nouveau
Bonjour le Forum,

je cherche à améliorer une macro pour la rendre moins "gourmande"..lol
je m'explique
je suis en train de concevoir un fichier comtat pour une association...(NB je n'y connais rien en compta.)
grâce à un userform je transfert les données sur une feuille journal et celons le nom du compte, renvoi sur la feuille du compte indiqué.
voici la partie de la macro que j'utilise :

' RENVOYER DANS LES DIFFERENTES FEUILLES DE COMPTES
' LES CHARGES
If ComboBox2.Value = "6023 A" Then
With Sheets("6023 A")
.Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
.Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
If TextBox3 = "" Then
.Range("B3") = CDate(TextBox2) ' renvoi la date automatique
Else
.Range("B3") = TextBox3 ' sinon renvoi la date saisie
End If
.Range("C3").Value = TextBox4 'renvoi la desognation
.Range("D3").Value = ComboBox3 'renvoi compte financier
.Range("E3").Value = ComboBox1 'renvoi moyen de réglement
.Range("F3").Value = TextBox6 ' renvoi le n° de cheque
.Range("G3").Value = (TextBox7) ' renvoi la somme
End With


ElseIf ComboBox2.Value = "60281 M" Then
With Sheets("60281 M")
.Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
.Range("A3").Value = (TextBox1)
If TextBox3 = "" Then
.Range("B3") = CDate(TextBox2) ' renvoi la date automatique
Else
.Range("B3") = TextBox3 ' sinon renvoi la date saisie
End If
.Range("C3").Value = TextBox4
.Range("D3").Value = ComboBox3
.Range("E3").Value = ComboBox1 'renvoi moyen de réglement
.Range("F3").Value = TextBox6 ' renvoi le n° de cheque
.Range("G3").Value = (TextBox7) ' renvoi la somme
End With

ElseIf ComboBox2.Value = "60282 P" Then
With Sheets("60282 P")
.Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
.Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
If TextBox3 = "" Then
.Range("B3") = CDate(TextBox2) ' renvoi la date automatique
Else
.Range("B3") = TextBox3 ' sinon renvoi la date saisie
End If
.Range("C3").Value = TextBox4 'renvoi la desognation
.Range("D3").Value = ComboBox3 'renvoi compte financier
.Range("E3").Value = ComboBox1 'renvoi moyen de réglement
.Range("F3").Value = TextBox6 ' renvoi le n° de cheque
.Range("G3").Value = (TextBox7) ' renvoi la somme
End With


ElseIf ComboBox2.Value = "6063 E" Then
With Sheets("6063 E")
.Rows("3:3").Insert Shift:=x1Down, CopyOrigin:=x1FormatFromLeftOrAbove
.Range("A3").Value = (TextBox1) 'renvoi le numero d'ordre
If TextBox3 = "" Then
.Range("B3") = CDate(TextBox2) ' renvoi la date automatique
Else
.Range("B3") = TextBox3 ' sinon renvoi la date saisie
End If
.Range("C3").Value = TextBox4 'renvoi la desognation
.Range("D3").Value = ComboBox3 'renvoi compte financier
.Range("E3").Value = ComboBox1 'renvoi moyen de réglement
.Range("F3").Value = TextBox6 ' renvoi le n° de cheque
.Range("G3").Value = (TextBox7) ' renvoi la somme
End With

ElseIf .............................

malheureusement, au vu du nombre de feuille la macro BLOQUE : trop importante

Donc comment améliorer ou changer la macro et ne plus avoir ce message d'erreur
Merci d'avance au forum
Bonjour Phil,
voilà j'ai appliqué les formules sur le fichier original
Je te le joints ..
Il me reste deux macros à finaliser ou à trouver, si je ne trouve pas je lancerai certainement une discution

Le PB en fin d'année = bouton création d'une nouvelle année
dans le module nouvannée je travaille sur l'année en cours de fin
et dans le UF3 je travaille sur l'année à venir


bon encore des heures de travail pour le novice que je suis
c'est pour ces raisons que je dis encore "merci" et merci au forum
Salutations
 

Pièces jointes

  • Comptabilite 1021.xlsm
    871.7 KB · Affichages: 11

Discussions similaires