[HELP] VBA sur Excel

VBA sur Excel [HELP] - VB/VBA/VBS - Programmation

Marsh Posté le 02-01-2013 à 12:26:08    

Bonjour à tous,
 
Je suis étudiant à l'université et j'ai un sacré problème...
 
Pour notre cours d'informatique, nous devons faire une base de données via Access, puis la transférer vers Excel... Avec, évidemment, beaucoup de consignes... Nous sommes parvenus à tout faire excepté nos traitements VBA... On ne parvient pas à les faire fonctionner :( Nous devons rendre notre travail demain ainsi que notre rapport pour 16H au plus tard... Nous sommes vraiment mal barré et je fais donc un appel au secours en espérant qu'une âme charitable pourra nous aider...
Les codes sont déjà fait mais ça foire quand on les exécute....
 
Je vous en supplie... Quelqu'un pourrait-il nous consacrer un tout petit peu de son temps pour vérifier et corriger nos code ?
 
Je vous remercie d'avance....
leodarth

Reply

Marsh Posté le 02-01-2013 à 12:26:08   

Reply

Marsh Posté le 02-01-2013 à 13:59:14    

SVP aidez-nous  :(

Reply

Marsh Posté le 02-01-2013 à 14:24:37    

Faudrait déjà commencer par expliquer ce qui ne marche pas dans le VBA? Déjà, quels sont ces traitements VBA dont tu parles. Ensuite, quels msg d'erreur ou bug constatés?
 
Question annexe : quelle méthode pour transférer les données de la BD Access vers Excel? ODBC depuis Excel, SQL+VBA depuis Access, extract en CSV depuis Access + traitement du CSV via VBA depuis Excel, autre ?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-01-2013 à 15:05:21    

Je te MP

Reply

Marsh Posté le 02-01-2013 à 15:36:52    

Mieux vaudrait mettre les données sur ce topic, plus de gens pourront t'aider. J'ai vu ton msg en MP :  non, je ne veux pas que tu m'envoies les fichiers et que je me dépatouille seul (déjà parce que j'ai pas Access). Si ce n'est pas toi qui a fait le code, demandes à tes copains qui l'ont pondu de venir ici expliquer ce qui ne marche pas. Ce n'est pas à nous de deviner. :o
 
Du reste, pourquoi est-ce toi qui ouvre ce topic qui semble important pour ton groupe si tu n'es pas en mesure d'exposer les pbs techniques :??: Tu as dû pourtant contribuer à ce projet, non?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-01-2013 à 15:45:44    

Tout simplement car ils ne sont pas en "état" de le faire... Je vais transmettre des Screenshots

Reply

Marsh Posté le 02-01-2013 à 15:55:37    

http://img203.imageshack.us/img203/7821/excelh.png
Voici la fiche qui bug...  
IOn a actuellement un tableau excel plein de données issues d'Access (donc surtout ne pas changer ces données) sinon les deux programmes ne corresponderaient plus.  
 
On a du, pour excel, faire des traitements statistiques (faits) et des représentation graphiques (fait aussi)
 
Il ne nous reste plus qu'à, via des Macros (en excell c'est donc simplement un moyen pour faire des programmes automatiques, pas hyper compliqués je pense.)  J'en ai deja réalisé deux assez semblables, qui présentent un petit defaut c'est que je n'arrive pas à faire demarrer les "ordres" par defaut de la bonne case pour rendre le remplissage des cases semi automatique correct quel que soit la "Active Cell" au momenrt de lancer la macro (et de pousser sur le bouton donc, car on relie chaque programmation VBA (macro) à un bouton) (Tres simple à faire) J'ai commencé un programme dans lequel je voulais faire que toutes les donnees au dessus d'un chiffre (la moyenne dans  notre cas) se mettent en une couleur et tout celles en dessous de la colonne total de la feuille "Fiches d'entretien" en une autre colonne
 
Voici les codes qu'on a utilisé pour ce faire :
Sub Total_Entretien()
 
Dim rng_total As Range
Dim compteur As Integer
 
Set rng_total = Sheets("Fiches_d'entretien" ).Range("rng_Total" )
 
compteur = 1
 
'La boucle commence ici
For Each valeir_total In rng_total
    If valeur_total < 500 Then
        Sheets("Fiches_d'entretien" ).Cells(compteur, 13).Value = "Petite réparation"
    Else
        Sheets("Fiches_d'entretien" ).Cells(compteur, 13).Value = "Grosse Réparatoin"
    End If
    compteur = compteur + 1
'On termine finit la boucle
Next
         
End Sub
Sub Somme_si_Couleurs()
 
'déclaration
 
Dim rng_total As Range
Dim compteur As Integer
Dim moyenne_compteur As Integer
Dim somme_total As Variant
Dim Moyenne_total As Variant
 
'Initialisation
 
Set rng_total = Sheets("Fiches_d'entretien" ).Range("rng_Total" )
 
compteur = 1
moyenne_compteur = 0
somme_total = 0
 
'On calcule la moyenne des la colonne Total
 
For Each valeur_total In rng_total
    moyenne_compteur = moyenne_compteur + 1
    somme_total = somme_total + valeur_solde
Next
 
Moyenne_total = somme_total / (moyenne_compteur)
 
'On donne une couleur aux cases
 
For Each valeur_total In rng_total
    If valeur_total < Moyenne_total Then
        Sheets("Fiches_d'entretien" ).Cells(compteur, 12).Font.ColorIndex = 20
    Else
        Sheets("Fiches_d'entretien" ).Cells(compteur, 12).Font.ColorIndex = 30
    End If
     
    compteur = compteur + 1
 
Next
 
 
End Sub
 
 
Et mon module (qui ne marche pas) :
Sub Macro1()
 
' Macro1 Macro
 
    Range("L2,L3,L5,L7,L6,L8,L9,L10,L1," ).Select
    Range("L2" ).Activate
    With Selection.Font
        .Color = -11489280
        .TintAndShade = 0
    End With
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("G38" ).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("L4,L11,L14,L16,L21,G39" ).Select
    Range("L4" ).Activate
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("G39" ).Select
End Sub
 
Sub entretien_inférieur_moyenne()
'
' Entretien inférieur à la moyenne
'
 
'
    Range("L2:L3" ).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("L5:L6:L8:L9:L10:L12:L13:L15:L17:L18:L19:L20" ).Select
    Range("G38" ).Activate
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub
Sub Entretien_suppérieur_moyenne()
'
' Entretien Suppérieur à la moyenne
'
 
'
    Range("L4" ).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("L7:L11:L14:L16:L21" ).Select
    Range("G39" ).Activate
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 5287936
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("K29" ).Select
End Sub


Message édité par Leodarth le 02-01-2013 à 16:01:45
Reply

Marsh Posté le 02-01-2013 à 16:08:52    

Pour le bouton "ajouter client" où l'ajout se fait automatiquement à la suite de notre tableau voici notre code :  
Sub ajouterclient()
 
 
ActiveCell.FormulaR1C1 = ActiveCell.Offset(-1, 0).Value + 1
ActiveCell.Offset(0, 1).Select
 
' Encode le nom de la personne
Nom = InputBox("Entrez le nom du nouveau client" )
ActiveCell.FormulaR1C1 = Nom
ActiveCell.Offset(0, 1).Select
 
' Encode le prénom de la personne
Prénom = InputBox("Entrez le prénom du client" )
ActiveCell.FormulaR1C1 = Prénom
ActiveCell.Offset(0, 1).Select
 
' Encode l'adresse
Adresse = InputBox("Entrez l'adresse du nouveau client" )
ActiveCell.FormulaR1C1 = Adresse
ActiveCell.Offset(0, 1).Select
 
' Encode le code postal
Codepostal = InputBox("Entrez le code postal du nouveau client (B-****)" )
ActiveCell.FormulaR1C1 = Codepostal
ActiveCell.Offset(0, 1).Select
 
' Encode la ville
Ville = InputBox("Entrez la ville du nouveau client" )
ActiveCell.FormulaR1C1 = Ville
ActiveCell.Offset(0, 1).Select
 
' Encode le sexe du client
Sexe = InputBox("Entrez le sexe du client (Homme/Femme)" )
ActiveCell.FormulaR1C1 = Sexe
ActiveCell.Offset(0, 1).Select
 
' Encode la date de naissance du client
Naissance = InputBox("Entrez la date de naissance du client (**/**/****)" )
ActiveCell.FormulaR1C1 = Naissance
ActiveCell.Offset(0, 1).Select
 
' Encode le Numéro de Fixe du client
Fixe = InputBox("Entrez le Numéro de téléphone fixe" )
ActiveCell.FormulaR1C1 = Fixe
ActiveCell.Offset(0, 1).Select
 
' Encode le Numéro du gsm du client
Gsm = InputBox("Entrez le Numéro de Gsm client" )
ActiveCell.FormulaR1C1 = Gsm
ActiveCell.Offset(0, 1).Select
 
' Encode le type de client
Typeclient = InputBox("Entrez le type de client (Particulier/Professionnel)" )
ActiveCell.FormulaR1C1 = Typeclient
ActiveCell.Offset(0, 1).Select
 
 
 
End Sub

Reply

Marsh Posté le 02-01-2013 à 17:55:04    

1- Sheets("NomFeuille";).Cells(indexligne, indexcolonne).Select  
pour en faire ton activecell
 
2-je voulais faire que toutes les donnees au dessus d'un chiffre (la moyenne dans  notre cas) se mettent en une couleur
je conseille la mise en forme conditionnelle je vois le bouton sur ton screen
 
ensuite je pense qu'en 2 semaines de vacances il y avait le temps de faire qqchose car le 2 janvier on est pas productif  
 
et l’enregistreur de macro c'est pas génial pour un travail a rendre


Message édité par boomy29 le 02-01-2013 à 17:55:20
Reply

Marsh Posté le 02-01-2013 à 18:00:50    

Malheureusement je ne suis pas en vacances mais en blocus... Je commence les examens le 7 :s

Reply

Marsh Posté le 02-01-2013 à 18:00:50   

Reply

Marsh Posté le 02-01-2013 à 18:04:33    

Désolé, à mon boulot, on n'a pas accès à imageshack :(
 
C'est normal tous les With Selection.Interior qui se suivent avec le même code plusieurs fois :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 02-01-2013 à 19:14:48    

aucune idée.. si c'est bizarre peut-être que ce n'est pas normal :/

Reply

Marsh Posté le 02-01-2013 à 19:32:54    

Merci boomy29.. Malheureusement, pour les couleurs c'est uniquement en VBA.
Et pour 1- Sheets("NomFeuille".Cells(indexligne, indexcolonne).Select  
pour en faire ton activecell ça bloque sur une seule cellule... Nous voudrions que toutes les rentrées que l'on fait s'enregistre à la suite
(ex: passer à la ligne 26 pour un client, passer à la ligne 27 pour un autre) et ce automatiquement :/

Reply

Marsh Posté le 02-01-2013 à 23:18:37    

il faudrait faire un collection des cellules a mettre en couleur 1
et faire une boucle for sur cette collection  
et faire pareil pour la 2eme couleur  
 
mais je reste sur ma mise en forme conditionnelle car je vois pas l’intérêt d'utiliser une machine a écrire quand on a un ordinateur

Reply

Marsh Posté le 03-01-2013 à 09:50:17    

Plutôt que faire des .select ou .active, vaudrait mieux faire une boucle et à l'intérieur, un truc du genre :
With Application.Worksheets("NomOnglet" ).Cells(i, j)
   .Interior.Color = RGB(204, 255, 204)
   ...
End With
 
Au passage, vaudrait mieux utiliser RGB() pour les codes couleurs, c'est plus lisible, je pense que des codes genre 15773696 :/
 
Enfin, ça manque cruellement de commentaires pertinents. Parce que "La boucle commence ici", ça c'est du commentaire :grrr:
Par contre, d'expliquer la raison de l'enchaînement de tous ces blocs de mise en forme de cellules, ça, ça aiderait la compréhension, la preuve, t'es pas capable de m'expliquer leur raison d'être :/ T'as fait des trucs dans ce code, au moins?
 
Mon impression est que ce code n'est franchement pas de qualité : on sent qu'il n'y a pas eu beaucoup de réflexion sur sa structure et son algorithmie (pas d'appels de fonctions alors qu'il y a de grosses portions répétitives)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed