CIGPME - Votre association ERP
Prenez une longueur davance ... avec le CIGPME.  
CIGPME
 Bienvenue au Club Informatique Gestion des Petites & Moyennes Entreprises 
 Visiteur

  Accueil    Contact    Forums    Liens    Télécharger    Articles    Guides métier    Dictionnaires    Top    Recherche 

Recherche globale

 
Sommaire

Accueil
Parrainez ce site
Le club
Présentation
Fonctionnement
Nos objectifs

Savoir
Forums
Guides métier
Dictionnaire
Téléchargement
Tutoriel

Presse
Top articles
Articles en aperçu

Nouveaux Articles
Liste Articles
Archives

Infos site
Sondages
Top utilisateurs
Best of complet

Proposer un article


Adhésion or
 
Gestion du club
Nos statuts
Règlement intérieur
Charte
Données perso
Gestion Bureau
Gestion cotisations
Planning
Liste des membres
 
CIGPME Base de connaissances



Domaine: Principal -> Excel et métier niveau 1

Question
·  Dresser un tableau excel en liste avec une synthèse annuelle
·  Tableau avec mise en forme du nombre de lignes
·  Déclencher une mise à jour quelques soient les feuilles ajoutées
·  J'ai une liste de clients à traiter à suivre, comment dois je les organiser ?
·  Tableau modèle à forme paramétrable (VBA)

Solution
·  Dresser un tableau excel en liste avec une synthèse annuelle


Tout d'abord il faut réaliser un tableau à partir de la 3 ème colonne à savoir la colonne. Dans l'exemple, nous faisons un état des dépenses informatiques. Nous avons pris par convention de mettre en gris les champs calculés



Donc D pour les libellés de matériel, E pour l'année qui ici est calculé, la formule EXCEL en E2 est =SI(F2<>"";ANNEE(F2);"")
On prend donc la fonction année appliqué sur la date de la colonne suivante. Le test sur F2 permet de mettre blanc au lieu d'une
erreur si le champ d'à côté est vide. La colonne F est la date d'achat et la colonne G le prix de la facture. Pour résumer on ne saisit que les colonnes D, F, G.

On colorise les entêtes en jaune pour mettre en évidence le début de tableau. On crée un petit tableau à gauche avec les différentes années, au besoin il suffit de se mettre dans le bas à droite de la A13 sélectionnée pour avoir le +, maintenir le curseur et duppliquer en incrément les années. Ici on a 2005, avec l'incrémentation durant la copie on aura 2007, on peut même sélectionner A13 et B13 et aller dans le bas à droite de B13 et duppliquer la cellule.

Enfin passons à la formule de cumul de l'année. Pour 1999 en cellule B7, on va mettre la formule suivante
=SOMME.SI($E$2:$E$345;A7;$G$2:$G$345)
c'est la somme sous condition, chaque paramètre est séparé par un ; L'aide d'excel nous permet d'avoir un descriptif.

Le premier paramètre après la parenthèse soit $E$2:$E$345 nous donne la sélection du tableau, on a mis $ devant les références de cellule pour fixer celles-ci en cas de copie., le A7 pour l'année, le $G$2:$G$345 pour la colonne
des sommes.

Bien sûr certains connaissent, mais cela donne des idées...

Syntaxe de l'aide excel

SOMME.SI(plage;critère;somme_plage)

plage représente la plage de cellules sur lesquelles baser la fonction.

critère représente le critère, sous forme de nombre, d'expression ou de texte, définissant les cellules à additionner. Par exemple, l'argument critère peut être exprimé sous une des formes suivantes : « 32 », « >32 », « pommes ».

somme_plage représente les cellules à additionner.

[ Retour au début ]

·  Tableau avec mise en forme du nombre de lignes

Voici une feuille qui donne des tableaux d'amortissement et se remplice suivant les données saisies
en entete, pour le calcul du nombre de ligne. On sait que les amortissements ont le nombre de ligne
dépendant du nombre d'années d'amortissements, le tout ajusté pour le mode linéaire donc avec
ajustement par rapport à la date de mise en service du bien. On en déduit forcément le taux
et la valeur avec le montant du bien.

Pour une meilleur présentation, on formate chaque cellule format cellule onglet nombre puis on choisit
comptabilité dans la liste pour gommer les valeurs 0. Les valeurs saisies dans cette feuille sont les champs
en bleu. On peut donc ensuite faire menu outils puis protéger la feuille comme ci dessous.
Au préalable il ne faut pas oublier de préciser dans format cellule les cellules verrouillées et celles non



Voici le détail pour calculer le tableau d'amortissement :


La première cellule année aura comme formule =SI($C9>0;ANNEE($C$4);0) pour
afficher l'année si on a une valeur. Ensuite on obtient comme dans la figure ci dessus
la formule décrite pour calculer les années suivantes.

Pour la valeur brute la cellule C9 aura D3 comme valeur, et les suivantes auront
=SI(E9>0;E9;0).

L'amortissement de la première année peut être proratisé =C9*C5*MOIS(C4)/12
et les suivantes redeviennent normales ou résiduelles =SI($C10>$E$4;$E$4;$C10)

La valeur résiduelle reste égale à elle même et pareil sur toutes les cellules à savoir
=SI(D10>0;C10-D10;0)

En cadeau du fichier un tableau de trésorerie avec un graphique, n'oubliez pas le document
est normé la saisie se fait sur les champs en bleu.

[ Retour au début ]

·  Déclencher une mise à jour quelques soient les feuilles ajoutées

Voici un exemple de script VBA sous excel qui scanne toutes les feuilles existantes y compris les nouvelles
de congés et qui raptrient le total sur une feuille de garde la première en l'occurence

Ci dessous un modele de fiche congés



Private Sub Worksheet_Activate()
Feuil1.Unprotect
Dim var1 As Single 'cp
Dim var2 As Single 'ctd employé
Dim var3 As Single 'ctd employeur
Dim var4 As Single 'absence
Dim var5 As Single 'cg sans solde
Dim var6 As Integer 'mois
Dim var7 As Integer 'position
Dim var8 As Single 'tot1
Dim var9 As Single 'tot2

For t = 6 To 53
Cells(t, 11) = ""
Cells(t, 14) = ""
Cells(t, 15) = ""
Next t
rem *********** lecture des feuilles type congés
For t = 1 To Sheets.Count
If InStr(1, Sheets(t).Name, "conge") <> 0 Or InStr(1, Sheets(t).Name, "congé") <> 0 Then
var1 = var1 + Sheets(t).Cells(42, 6)
var2 = var2 + Sheets(t).Cells(48, 6)
var3 = var3 + Sheets(t).Cells(50, 6)
var4 = var4 + Sheets(t).Cells(44, 6)
var5 = var5 + Sheets(t).Cells(46, 6)
var6 = Month(Sheets(t).Cells(33, 3))
var7 = 2 + 4 * var6
var8 = Sheets(t).Cells(42, 6) + Sheets(t).Cells(48, 6) + Sheets(t).Cells(50, 6) + Sheets(t).Cells(46, 6)
var9 = var8 + Sheets(t).Cells(44, 6)

Cells(var7, 11) = Cells(var7, 11) + Sheets(t).Cells(42, 6)
Cells(var7 + 1, 11) = Cells(var7 + 1, 11) + Sheets(t).Cells(48, 6)
Cells(var7 + 2, 11) = Cells(var7 + 2, 11) + Sheets(t).Cells(50, 6)
Cells(var7, 14) = Cells(var7, 14) + Sheets(t).Cells(44, 6)
Cells(var7 + 1, 14) = Cells(var7 + 1, 14) + Sheets(t).Cells(46, 6)
'cumul intermédiaire
Cells(var7 + 3, 14) = Cells(var7 + 3, 14) + var8
Cells(var7 + 3, 15) = Cells(var7 + 3, 15) + var9
End If
Next t
rem *********** alimentation de la page de garde
Cells(5, 14) = var1 + var2 + var3 + var5
Cells(5, 15) = var1 + var2 + var3 + var4 + var5
Cells(2, 11) = var1
Cells(3, 11) = var2
Cells(4, 11) = var3
Cells(2, 14) = var4
Cells(3, 14) = var5
ThisWorkbook.Unprotect
Feuil1.Protect
End Sub

Dans le principe on lit les feuilles (ci dessus)qui ont toujours le même format et les champs
à même position, après reste à ajouter la somme de chaque feuille dans des variables et
faire une boucle FOR... TO... et NEXT (variables var1 à var9), ensuite on redéverse tout
dans le premier feuillet du classeur (voir le dernier pavet de code ci dessus)

On obtient à chaque changement de feuille (puisque l'on utilise une procédure évènementielle
du type Private Sub Worksheet_Activate()) un rafraichissement des champs du premier onglet
nommé situation_rh, les colonnes mises à jour sont K,N et O


[ Retour au début ]

·  J'ai une liste de clients à traiter à suivre, comment dois je les organiser ?


C'est simple,il faut penser base de données, tableau en liste avec filtre automatisé, ne pas oublier
de découper au plus fin si on a des critères d'analyse, notamment le découpage de l'adresse
pour la décomposition par code postal ou région.

Voici le document final



Pour aller chercher les filtres automatiques (triangle de sélection en liste à côté de chaque champ), voici où aller




attention en choisissant le filtre la somme (TOTAUX) ne varie pas avec le filtre. Sinon un clic
sur la donnée filtre les résultats voulus.



Il suffit cependant de réselectionner les cellules dans le total pour que cela marche.
On voit alors apparaitre la fonction SOUS-TOTAL.



On peut aussi procéder à des sous-totaux et masquer les niveaux(en haut à gauche 1 2 3) avant les cellules, une
nouvelle zone est apparue on pourrait dire la marge. Il faut aller dans le menu données puis sous-totaux,
vous choisissez le critère, ici le CA en somme (excel reprend vos entêtes)



Il faudra effacer votre total qui risque de prendre les sous-totaux à tort puisque
l'outil le génère.

Avec les sous-totaux et les critères vos totaux peuvent varier.


[ Retour au début ]

·  Tableau modèle à forme paramétrable (VBA)

Pour générer un tableau modèle, on peut écrire un script VBA pour le fichier excel :
Ce code est à coller en allant dans le vb script ou en maintenant ALT on appuie sur F11 (on relache tout),
on clique sur l'objet feuil1 et on colle tout dans la nouvelle fenêtre au centre.

Public tab1 As Integer, Position As Integer, Longueur As Integer

Private Sub cmd1_Click()
Rem tableau 1 ---------------------------------------
If Feuil1.Cells(9, 2).Value <> "" Then
tab1 = 0: tab2 = 0: tab3 = 0
If Feuil1.Cells(9, 2).Value = "0" Then tab1 = 0
If Feuil1.Cells(9, 2).Value = "1" Then tab1 = 1
If Feuil1.Cells(9, 2).Value = "2" Then tab1 = 2
If Feuil1.Cells(9, 2).Value = "3" Then tab1 = 3
If Feuil1.Cells(9, 2).Value = "4" Then tab1 = 4
If Feuil1.Cells(9, 2).Value = "5" Then tab1 = 5
If Feuil1.Cells(9, 2).Value = "6" Then tab1 = 6
If Feuil1.Cells(9, 2).Value = "7" Then tab1 = 7
If Feuil1.Cells(9, 2).Value = "8" Then tab1 = 8
If Feuil1.Cells(9, 2).Value = "9" Then tab1 = 9
If Feuil1.Cells(9, 2).Value = "10" Then tab1 = 10

If tab1 = 0 Then tab1 = 1
If tab1 > 0 Then Position = 12: Longueur = 6: Call r1
End If

End Sub

Private Sub r1()
Call vidage1
Call cadrage1
For t = 2 To 1 + tab1
Feuil1.Cells(Position, t).Font.Bold = True
Feuil1.Cells(Position, t).HorizontalAlignment = xlCenter
Feuil1.Cells(Position, t).Value = "DEV" + Str(t - 1)
Next t

End Sub

Private Sub vidage1()
For t = 2 To 30
Feuil1.Cells(Position, t).Value = ""
Feuil1.Cells(Position + 1, t).Value = ""
Feuil1.Cells(Position + 2, t).Value = ""
Feuil1.Cells(Position + 3, t).Value = ""
Feuil1.Cells(Position + 4, t).Value = ""
Feuil1.Cells(Position + 5, t).Value = ""
Feuil1.Cells(Position + 6, t).Value = ""
Feuil1.Cells(Position + 7, t).Value = ""
Feuil1.Cells(Position + 8, t).Value = ""
Feuil1.Cells(Position + 9, t).Value = ""

Feuil1.Cells(Position, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 1, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 2, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 3, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 4, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 5, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 6, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 7, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 8, t).Borders.LineStyle = xlNone
Feuil1.Cells(Position + 9, t).Borders.LineStyle = xlNone

Next t

End Sub
Private Sub cadrage1()
colonn = 0
If Position = 72 Then colonn = 1

Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).Borders(xlDiagonalDown).LineStyle = xlNone
Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).Borders(xlDiagonalUp).LineStyle = xlNone

Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).Borders(xlEdgeLeft).LineStyle = xlContinuous
Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).Borders(xlEdgeTop).LineStyle = xlContinuous
Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).Borders(xlEdgeBottom).LineStyle = xlCo!ntinuous
Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).Borders(xlEdgeRight).LineStyle = xlContinuous
Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).Borders(xlInsideHorizontal).LineStyle = xlContinuous
If tab1 + tab2 + tab3 > 1 Then Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).Borders(xlInsideVertical).LineStyle = xlContinuous
Feuil1.Range(Feuil1.Cells(Position, 2), Feuil1.Cells(Position + Longueur - colonn, tab1 + tab2 + tab3 + 1)).ColumnWidth = 20
End Sub

On crée sur la feuille 1, pour avoir le tableau suivant il faut respecter la position des cellules,



On modifie ici le nombre de serveur en cliquant dans la cellule B9, on met une valeur >1 puis clic sur
le bouton mettre à jour, excel modifie la structure du tableau.

Si vous souhaitez avoir le fichier, Télécharger ici.



[ Retour au début ]



Site du Club C.I.G.P.M.E. Tous droits réservés © 2005 - réalisé avec PHPNUKE
CIGPME - association à but non lucratif