Excel 2010 Comment copier des cellules correspondant à certaines valeurs dans une autre feuille ?

  • Auteur de la discussion Guest
  • Date de début
G

Guest

Invité
Bonjour,

J'essaie de créer un "logiciel" de comptabilité dans Excel. Je connais bien les formules Excel mais pour ce point (j'y arrive), je crois qu'elles ne peuvent rien pour moi. J'aurai donc peut-être besoin d'aide en VBA.

Je m'explique :

J'entre les mouvements de compte dans ma première feuille (Journal d'écritures), avec
- la date
- le libellé
- le compte débité
- le compte crédité
- le montant débité
- le montant crédité.

Toutes mes autres feuilles sont les comptes en détail (par exemple, 1000 Caisse, 1010 Poste, 3400 Honoraires, etc.)

J'aimerais que chaque ligne qui contient le numéro de compte - que ce soit dans la colonne Compte débité ou Compte crédité - se reporte dans la feuille correspondant au compte Caisse. J'ai essayé de faire cela avec la fonction RECHERCHEV mais le résultat n'était pas concluant.
Par contre, je suis arrivé à quelque chose avec la fonction SI. Mais là, le problème est qu'il y a plein de lignes vides (toutes celles qui sont copiées et qui ne correspondent pas au critère).

Est-ce que je dois utiliser une macro Excel pour que cette action s'effectue automatiquement ?

D'ores et déjà merci beaucoup aux personnes qui répondront !
 

zeb

Modérateur
Salut Mickysuisse,

Avec des formules ou avec un programme ?
Si tu poses la question sur un forum dédié à Excel, on te répondra "Formule" !
Mais tu poses la question dans un forum dédié à la programmation, alors voici ma réponse : "Programme" !
;)

Donc si tu veux qu'on le fait ensemble ce programme, moi je suis partant.
 

Michael Bonzon

Nouveau membre
Bonjour,
Désolé pour cette réponse extrêmement tardive. J'ai eu un gros souci avec ma connexion Internet ces derniers temps.

Je ne sais pas exactement comment arriver à mes fins. Ce que je sais, par contre, c'est le résultat que j'aimerais (si possible) atteindre.

Est-il possible, d'une manière ou d'une autre, d'enlever les cellules vides afin de "laisser la place" sur la feuille aux cellules remplies ?
Je m'explique : Jusqu'à maintenant, j'ai réussi à reporter mes lignes du Journal d'écritures au compte concerné. Mais avec ma fonction SI, je reporte aussi toutes les lignes ne correspondant pas au critère (c'est-à-dire qu'elles correspondent à d'autres comptes). Le problème est que je ne peux pas anticiper le nombre de lignes qu'il y aura dans le Journal d'écritures. Donc le report des lignes (du Journal d'écritures au compte concerné) sera illimitée et, du coup, très compliquée à faire. De plus, question mise en page, c'est vraiment pas terrible.

Merci beaucoup à zeb ou à d'autres courageux pour vos réponses !

PS: Je suis mickysuisse@guest mais j'ai dû changer mon nom d'utilisateur...
 

zeb

Modérateur
Salut Mickysuisse,

Ici, c'est un forum, pas un tchat. Tu viens quand tu veux. ;)

Bon, j'ai rien compris à ton problème. Sauf que tu insistes. Donc comme ici je ne donne de solution qu'en VBA, c'est parti pour du VBA.

-------

Comme je ne comprends que lentement, commençons par le début, mais lentement.
Donne-moi un exemple facile de ce que tu veux qu'il se passe quand tu remplis une case.

Puis au fur et à mesure, on compliquera.
 

Michael Bonzon

Nouveau membre
Ca marche ! Alors...

Dans ma première feuille, j'ai le Journal d'écritures. Prenons l'exemple que je vais retirer de l'argent à la banque pour acheter du matériel.
L'écriture est la suivante :
Date 01.08.2012 / Libellé Achat de matériel X / Compte débité 1234 Banque / Compte crédité 9876 Matériel X / Montant débité 500.- / Montant crédité 500.-

En complétant mon Journal d'écritures, j'aimerais que cela complète chaque compte concerné. Dans l'exemple pris, j'aimerais que dans la feuille 1234 Banque, la date, le libellé et le montant débité se reportent. Et que dans la feuille 9876 Matériel X, la date, le libellé et le montant crédité se reportent également. Ainsi, j'aurai le détail de chaque mouvement de compte... pour chaque compte.
Jusque là, je suis arrivé avec des fonctions SI. Mais mon problème surgit !
Avec ma fonction SI, toutes les lignes qui correspondent au critère se reportent et toutes les lignes qui ne correspondent pas au critère se reportent vides.

Pour trois écritures, ça va. Mais je te laisse imaginer la tête de mes détails de compte lorsque j'entre des centaines d'écritures. Il y a énormément de lignes vides et la mise en page est horrible. Ce qui ne facilite pas la lecture et l'impression des feuilles.

Dans un premier temps, j'aimerais, si c'est possible, que toutes ces lignes vides disparaissent. Est-ce que tu as la solution miracle ?


P.S: Je me demande si Access ne serait pas la meilleure solution pour créer un "logiciel" de comptabilité...
 

zeb

Modérateur
Salut,

La réponse à la dernière question est "Oui, sûrement".
Alors quoi, on laisse tomber ?

Comme ce n'est pas mon genre, je te propose d'étudier ce bout de code VBA pour Excel.

Code:
Sub Worksheet_Change(ByVal Target As Range)
    ' Une cellule a changé.
    ' Mais on ne traite que si toutes les valeurs de la ligne
    ' (Date, Libellé, Compte débité, Compte crédité, Montant débité, Montant crédité) sont enregistrées
    ' On va dire que Date est dans la colonne A, Libellé dans la colonne B, etc.)
    
    ' On ne considère donc pas la cellule Target mais toute la ligne !
    
    Dim ligne As Range
    ligne = Target.EntireRow
        
    If ligne.Cells(1) <> "" And _
       ligne.Cells(2) <> "" And _
       ligne.Cells(3) <> "" And _
       ligne.Cells(4) <> "" And _
       ligne.Cells(5) <> "" And _
       ligne.Cells(6) <> "" Then

        ' Il y a quelque chose dans chaque cellule.
        ' On peut traiter
        
        
        ' mettre ici le traitement
       
    End If
End Sub

Donc on cherche les feuilles "1234 Banque" et "9876 Matériel X"
Facile !

Deux solutions : Appeler directement la feuille, en espérant que l'utilisateur a entré le bon nom, quitte à gérer l'erreur éventuelle, soit on se fait une fonction spéciale.

Options 2, bien sûr :

Code:
Function feuille_par_nom(ByVal nom As String) As Worksheet
    Dim sh As Worksheet
    For Each sh In Worksheets
        If sh.Name = nom Then
            Set feuille_par_nom = sh
            Exit Function
        End If
    Next
    Set feuille_par_nom = Nothing
End Function

Et on l'appelle deux fois :
Code:
Dim sh_deb as Worksheet
Dim sh_cre as Worksheet
Set sh_deb = feuille_par_nom(ligne.Cells(3).Value)
Set sh_cre = feuille_par_nom(ligne.Cells(4).Value)

If sh_deb Is Nothing Or sh_cre Is Nothing Then
	MsgBox "Eh coco, faudrait voir à me donner des noms de compte qui existent ! Je les supprime pour la peine."
    If sh_deb Is Nothing Then ligne.Cells(3).Value = ""
    If sh_cre Is Nothing Then ligne.Cells(4).Value = ""
    Exit Sub
End If

Moi, pour avoir fait un peu de compta à l'école, je ne me rappelle pas avoir vu un nombre différent pour les montants débités et crédités. M'enfin!
Code:
If ligne.Cells(5).Value <> ligne.Cells(6).Value Then
	MsgBox "T'es bien sûr ?"
End If

Bon, on a la date, le libellé, le montant et le nom de la feuille. Il ne manque plus que de trouver la dernière ligne de chaque feuille et de mettre nos valeurs à la suite.
T'as une idée ?
Cherche bien ;) La solution est facile d'accès sur le forum !
Alors !?
 
G

Guest

Invité
Ce ne serait pas plus simple d'utiliser l'outil dans Excel "Rapport de tableau dynamique croisé" que de se lancer dans de la programmation en VBA. J'ai un ami, qui fait aussi ses feuilles compta sous Excel. Dans sa première page, il y a son journal d'écriture (avec un peu de VBA pour faciliter l'encodage), et toutes les autres feuilles, ce ne sont que des rapports de tableau dynamique croisé.
 

zeb

Modérateur
Très bonne remarque Alexske !

Malheureusement, ici, ce n'est pas "Expert Excel" mais "Programmeur fou".
Relis mon , je n'ai pas pris Mickael en traître. Alors les solutions données ici sont orientées vers la programmation, même si une solution plus simple, plus élégante voire carrément triviale est possible autrement.

D'où l'intérêt de ton intervention, Alexske. Michael, à bon entendeur...
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 103
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut