VBA-appel dans Excel d'un autre classeur-itération-conditionnement

ChuckPriape

XLDnaute Nouveau
Salut à tous.

En fait, je dispose d’une base de données sur Excel établie par des commerciaux où sont listés, par colonnes : le nom du commercial, l’objet de la vente, le lieu, le montant…
Ce fichier est sur le réseau de l’entreprise, il ne bouge pas.

Je dois établir, pour chaque commercial, un nouveau fichier Excel regroupant sa seule activité.
Le problème c’est que ce fichier doit être dynamique : en gros, si le commercial concerné par le fichier rajoute une vente dans la base de données générale, son fichier Excel doit s’incrémenter en conséquence (nouvelle ligne au tableau, valeurs de cellules et mise en forme).

Je ne suis pas un expert concernant Excel mais je me suis que la solution passera par une macro.
Le problème : je n’y connais rien en macro et en VBA.

En suivant quelques tutos, j’ai réussi, avec l’outil automatique d’Excel, à créer les lignes de code pour la mise en forme (ajout d’une nouvelle ligne, de valeurs et mise en forme de cette dernière).
Seulement, je ne sais pas comment dire à la macro d’aller chercher, dans mon fichier de données générale, le nom X dans la colonne des noms et, à chaque fois qu’il repère X, répéter les lignes de codes que j’ai crée via l’assistant.

Je pense (avec mes souvenirs de Turbo Pascal :D) qu’il faut d’abord appeler le fichier général puis déclarer une boucle et, dans cette boucle, intégrer un conditionnement avant de rajouter les lignes crées par l’assistant.

Si, par exemple je recherche le nom « Dupont » et que la colonne des noms est la colonne A dans ma base de données, pouvez-vous me donner les lignes de code à ajouter ?

Merci d’avance.
 

tototiti2008

XLDnaute Barbatruc
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

Bonjour ChuckPriape,

Ah... le Turbo Pascal, un poème ;)

As-tu essayé d'utiliser les Données externes d'Excel ?

Menu Données - Données Externes - Créer une requête

ça pourrait limiter la part de VBA...
 

ChuckPriape

XLDnaute Nouveau
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

Oui, j'ai essayé mais je ne vois pas comment définir mon itération et mon conditionnement avec cet outil.
C’est peut être bête mais je ne vois vraiment pas.

Mais ça doit bien exister une boucle du style FOR, TO, DO et une boucle IF, THEN, ELSE comment en Turbo Pascal.

En tout cas, merci de cette réponse rapide.
 

tototiti2008

XLDnaute Barbatruc
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

Re,

l'itération est réalisée par le SQL créé dans Query, avec les Données externes.

Maintenant, si tu tiens à le réaliser en VBA, c'est évidement possible, en se connectant en ADO sur le fichier Excel global
 

ChuckPriape

XLDnaute Nouveau
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

Bon, là je ne comprends plus rien, je ne suis vraiment pas un expert en Excel.

Le peu de programmation que je connais me vient de mes cours de prépa et c’était vraiment pas bien compliqué.

Si c’est faisable en VBA, peux-tu me donner les lignes de code à ajouter à la macro ?
Sinon, peux-tu me dire comment faire avec les données externes ? (j’ai lâché à SQL :D)

Merci d’avance !
 

camarchepas

XLDnaute Barbatruc
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

Bonjour ChuckPriape et tototiti,

Tout dépend de la masse d'info à traiter, le Sql peut être sympa, mais sur Excel, un seul utilisateur pourra ce connecter à la fois.

Une autre approche serait effectivement une base triée par la clef de référence du commercial, dans laquelle on procéderait à une recherche via Find puis une boucle de recherche de nombre de lignes associèes à ce commercial, ensuite il suffit d'éjecter ces lignes via un classeur nominatif disponible dans le serveur, reste la mise à jour dans l'autre sens. on pourrait à l'ouverture du fichier général ou via un bouton réintégré l'ensemble des fichiers individuels et voilà.
 

camarchepas

XLDnaute Barbatruc
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

Re moi,

En fait pas de souci, j'avais pas bien compris en première lecture, et l'info circule uniquement de la base vers les fichiers individuels, via le programmeur de tache ou le déclenchement via le timer d'excel lui même , on peu démarrer un fichier qui lirait la base de données pour effectuer les traitements vu au dessus, et le tour est joué, je pense qu'en ayant un rafraichissement toutes les 15 min pendant les heures d'ouvertures cela devrait être jouable
- Question : les fichiers individuels sont stockés également sur le serveur ou ailleur ?
 

tototiti2008

XLDnaute Barbatruc
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

Bonjour camarchepas,
Re,

Moi je reste persuadé que ce serait beaucoup plus simple en utilisant las données externes, il suffit simplement d'apprendre à les utiliser plutôt que de tout recoder en VBA... désolé si je suis buté mais je pense que pour un débutant VBA ce sera beaucoup moins lourd.

Sais-tu créer une requête avec les données externes ?
 

ChuckPriape

XLDnaute Nouveau
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

Euh, j'avoue être un peu perdu.
Je suis, bien sûr, pour la solution la plus simple vu mon niveau Excel.

@camarchepas : ils sont destinés à bouger un peu mais ils resteront principalement sur le serveur.
@tototiti2008 : Non je ne sais pas.

Sinon, voila ce que mon collègue et moi avons réussi à "bricoler" en VBA :

Sub test1()
'
' test1 Macro
'
' Keyboard Shortcut: Ctrl+Shift+M

Dim Cell As Range


For Each Cell In Ws.Range("'[IDF modif.xlsm]Feuil1'!A:A") :mad:

If Cell.Value = "FPA" Then Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A66:G66").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A66").Select
ActiveCell.FormulaR1C1 = "='[IDF modif.xlsm]Feuil1'!R43C"
Range("A66").Select
Selection.AutoFill Destination:=Range("A66:G66"), Type:=xlFillDefault
Range("A66:G66").Select
ActiveWindow.SmallScroll Down:=-10
Range("A66:D66").Select
ActiveWindow.SmallScroll Down:=-8
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("F66").Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("E66").Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("G66").Select
With Selection
.HorizontalAlignment = xlRight
.VerticalAlignment = xlCenter
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Next Cell



End Sub

Si cela peut vous aider : le problème vient visiblement de la ligne avec le smiley rouge. C'est là que je veux appeler la base de données mais ça ne marche pas.
Bon c'est du code que nous avons fait avec l'assistant et des extraits de forums...

PS : IDF modif.xlsm c'est ma base de données.
 
Dernière édition:
G

Guest

Guest
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

bonjour,

Ce que tu nous donnes là et surtout une macro de mise en forme.

Je suis plutôt de l'avis de Tototiti (que je salue cordialement par la même occasion). J'ajouterais, si je peux me permettre, de souligner l'importance de séparer les données (ici l'importation) et la mise en forme pour ne pas tout transformer en usine à gaz.
Excel 2007 dans l'onglet Donnée offre plusieurs mode d'importation et divers assistant.

Aprendre à les utiliser me semble la solution la plus sûre et la plus souple pour toi.

A+
 

ChuckPriape

XLDnaute Nouveau
Re : VBA-appel dans Excel d'un autre classeur-itération-conditionnement

OK, je m'oriente donc vers l'importation de données externes.

Je viens de faire un tour dans l'onglet "Data" d'Excel et je ne trouve rien pour faire venir les données d'un autre classeur.

J'ai des liens pour importer via Word, Internet, Acces...
Mais pas via Excel.
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 316
Membres
102 860
dernier inscrit
fredo67