Excel Downloads
Forum

Précédent   Excel Downloads Forums > Excel > Forum Excel


Réponse
 
LinkBack Outils de la discussion
Vieux 24/05/2008, 23h39   #1 (permalink)
XLDnaute Nouveau
 
Date d'inscription: mai 2008
Messages: 3
Par défaut Question de débutant Macro excel

Bonjour,
Je suis totalement débutant en macro sur excel.
Je connais un peu excel et ses formule, mais les macros, rien du tout.
Je sollicite donc votre aide :

J'ai "fait" un code, ou plutot recopier des codes de diverses sources internet pour arriver à mes fins.
J'ai donc réussi à obtenir ce code que je comprend à peu près puisque je l'ai modifier.
Le voici :

Option Explicit
Const Vcol As Long = 5



Sub Itemscommuns() 'FLA 24.03.08
' COMPARER 1 COLONNE DANS 2 FEUILLES, FLAGER
' LES ITEMS COMMUNS AUX 2 COLONNES
' INSCRIRE LES LIGNES CORRESPONDANTES DANS UNE FEUILLE
' CRITÈRE DE COMPARAISON :ITEMS EN COLONNE A; À DÉFINIR
Dim Tablo As Variant, Tabb As Variant, Tabc As Variant
Dim Sbd1 As Worksheet, Sbd2 As Worksheet
Dim I&, J&, Ka&, Kb&, Kc&, Cola&, Colb&
Dim Fichier1$, cell1 As Range
Dim Fichier2$, cell2 As Range

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Set Sbd1 = Feuil2
Set Sbd2 = Feuil3
Ka = Feuil2.Cells(65536, 1).End(xlUp).Row
Kb = Feuil3.Cells(65536, 1).End(xlUp).Row
Cola = 1
Colb = 1
' RAZ TRAITEMENT PRECEDENT
Feuil7.Range("A1").Offset(1, 0).Resize(Ka + Kb, Vcol).ClearContents

' CHARGEMENT DANS TABLEAUX DES DATAS À COMPARER
Tablo = Feuil2.Cells(2, 1).Resize(Ka, Cola).Value
Tabb = Feuil3.Cells(2, 1).Resize(Kb, Colb).Value
ReDim Tabc(1 To UBound(Tablo), 1)
' COMPARAISON DES DATAS CHARGEES DANS LES TABLEAUX
For I = LBound(Tablo) To UBound(Tablo)
For J = LBound(Tabb) To UBound(Tabb)
If Tablo(I, 1) = Tabb(J, 1) Then
Tabc(I, 1) = Tablo(I, 1)
End If
Next J
Next I
Kc = 1
' RESTITUTION DES ITEMS COMMUNS EN FEUIL7
Feuil7.Cells(1, 1) = Feuil2.Cells(1, 1)
For I = LBound(Tabc) To UBound(Tabc)
If Tabc(I, 1) <> vbNullString Then
Feuil7.Cells(Kc + 1, Cola) = Tabc(I, 1)
Kc = Kc + 1
End If
Next
Set Sbd1 = Nothing: Set Sbd2 = Nothing
Erase Tablo: Erase Tabb
' COPIE DES ITEMS COMMUNS DANS FEUIL7
Call Transfertcommuns
Erase Tabc
Application.GoTo reference:=Feuil7.Cells(2, 1), Scroll:=True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Public Sub Transfertcommuns()
' COPIE DES PLAGES DES ITEMS COMMUNS DANS FEUIL7
' COPIE DES DATAS DE LA FEUILLE BASE1
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Dim Tabuniq As Variant, Vardatas As Variant
Dim K&, Kf&, Col&
Col = 1
K = Feuil2.Cells(65536, Col).End(xlUp).Row
Kf = Feuil7.Cells(65536, Col).End(xlUp).Row
Tabuniq = Feuil7.Cells(1, Col).Resize(K, Col).Value
Vardatas = Feuil2.Cells(1, Col).Resize(K, Vcol).Value
For K = LBound(Vardatas) To UBound(Vardatas)
For Kf = LBound(Tabuniq, 1) To UBound(Tabuniq, 1)

If Vardatas(K, 1) = Tabuniq(Kf, 1) Then
Feuil7.Cells(Kf, 2) = Vardatas(K, 2)
Feuil7.Cells(Kf, 3) = Vardatas(K, 3)
Feuil7.Cells(Kf, 4) = Vardatas(K, 4)
Feuil7.Cells(Kf, Vcol) = Vardatas(K, Vcol)
End If
Next Kf
Next K
Application.Calculation = xlCalculationAutomatic
Erase Vardatas: Erase Tabuniq
End Sub



Ce code me permet de comparer les feuilles 2 et 3 de mon classeur et de copier les lignes en communs dans la feuille 7

Le probleme est qu'il travail sur les feuilles du claseur en cours, et mon but est de faire ceci sur des feuille situées dans d'autres fichier, sans les ouvrir si possible.

j'ai vu que c'était possible grace à la commande "Workbooks.Open", mais je n'arrive pas à m'en servir par inexpérience.


Merci de votre aide.
KisskooOool est déconnecté   Réponse avec citation
ANNONCES
Vieux 25/05/2008, 08h52   #2 (permalink)
XLDnaute Barbatruc
 
Avatar de JeanMarie
 
Date d'inscription: février 2005
Localisation: montbéliard
Version Excel : Excel 2004 (MAC)
Messages: 2 769
Par défaut Re : Question de débutant Macro excel

Bonjour

Tu vas encore avoir de la lecture, c'est ici
http://www.excel-downloads.com/forum...michelxld.html
recherche dans cette très longue page "Piloter les fichiers fermés"

Si tu as beaucoup de lignes, il est préférable d'ouvrir le fichier.

@+Jean-Marie
JeanMarie est déconnecté   Réponse avec citation
Vieux 25/05/2008, 09h13   #3 (permalink)
XLDnaute Accro
 
Date d'inscription: septembre 2007
Messages: 1 502
Par défaut Re : Question de débutant Macro excel

Bonjour,


Fonction perso matricielle pour obtenir la liste des éléments communs de 2 listes:

Code:
Function Communs(champ1, champ2)
 Set MonDico1 = CreateObject("Scripting.Dictionary")
  For Each c In champ1
    If Not MonDico1.Exists(c.Value) Then MonDico1.Add c.Value, c.Value
  Next c
  Set mondico2 = CreateObject("Scripting.Dictionary")
  For Each c In champ2
    If MonDico1.Exists(c.Value) Then
      If Not mondico2.Exists(c.Value) Then mondico2.Add c.Value, c.Value
    End If
  Next c
  i = 1
  Communs = Application.Transpose(mondico2.items)
End Function

Avec classeurs fermés:

Code:
Sub essai()
  repertoire = ThisWorkbook.Path
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _
      repertoire & "\" & "ADOsource.xls"
  Set rs = cnn.Execute("SELECT nom FROM MaBD WHERE nom<>'' Order By nom")
  tbl = rs.GetRows ' tableau à 2 dimensions on ne récupère pas la première ligne
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
  '---
  Set cnn = New ADODB.Connection
  cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _
      repertoire & "\" & "ADOsource2.xls"
  Set rs = cnn.Execute("SELECT nom FROM MaBD WHERE nom<>'' Order By nom")
  tbl2 = rs.GetRows ' tableau à 2 dimensions on ne récupère pas la première ligne
  rs.Close
  cnn.Close
  Set rs = Nothing
  Set cnn = Nothing
  '----
  Set MonDico1 = CreateObject("Scripting.Dictionary")
  For Each c In tbl
    If Not MonDico1.Exists(c) Then MonDico1.Add c, c
  Next c
  Set mondico2 = CreateObject("Scripting.Dictionary")
  For Each c In tbl2
    If MonDico1.Exists(c) Then
      If Not mondico2.Exists(c) Then mondico2.Add c, c
    End If
  Next c
  i = 1
  [A2].Resize(mondico2.Count, 1) = Application.Transpose(mondico2.items)
End Sub
JB
Formation Excel VBA JB
Fichiers attachés
Type de fichier : xls FonctionCommunsx.xls (34,0 Ko, 11 affichages)
Type de fichier : zip AdoRecupCommuns.zip (18,7 Ko, 8 affichages)

Dernière modification par BOISGONTIER ; 25/05/2008 à 09h49.
BOISGONTIER est connecté maintenant   Réponse avec citation
Vieux 25/05/2008, 23h20   #4 (permalink)
XLDnaute Nouveau
 
Date d'inscription: mai 2008
Messages: 3
Par défaut Re : Question de débutant Macro excel

Merci, j'ai reussi a faire ce que je voulais.

Une autre petite question au passage, puvez vous m'expliquer ce que fais cette partie de code (les parties en gras) :

K = Feuil2.Cells(65536, Col).End(xlUp).Row
Kf = Feuil7.Cells(65536, Col).End(xlUp).Row

Tabuniq = Feuil7.Cells(1, Col).Resize(K, Col).Value
Vardatas = Feuil2.Cells(1, Col + 1).Resize(K + 1, Vcol).Value
For K = LBound(Vardatas) To UBound(Vardatas)
For Kf = LBound(Tabuniq, 1) To UBound(Tabuniq, 1)
If Vardatas(K, 1) = Tabuniq(Kf, 1) Then
Feuil7.Cells(Kf, 2) = Vardatas(K, 2)
Feuil7.Cells(Kf, 3) = Vardatas(K, 3)
Feuil7.Cells(Kf, 4) = Vardatas(K, 4)
Feuil7.Cells(Kf, Vcol) = Vardatas(K, Vcol)

End If
Next Kf
Next K
Application.Calculation = xlCalculationAutomatic
KisskooOool est déconnecté   Réponse avec citation
Vieux 25/05/2008, 23h45   #5 (permalink)
XLDnaute Occasionel
 
Avatar de Marcel32
 
Date d'inscription: mai 2008
Version Excel : Excel 2000 (PC)
Messages: 287
Par défaut Re : Question de débutant Macro excel

Je ne connais pas grand chose, mais je peux essayer de te renseigner.

Vardatas(x, y) doit être une variable qui est en fait un tableau de x colonnes et y lignes et qui te permet de stocker des données en mémoire.
En faisant varier les valeurs de x et y tu accèdes à la donnée que tu veux stockée dans le tableau.

Feuil7.Cells(a, b) = Vardatas(x, y) permet de mettre, dans la cellule située colonne b ligne a dans la feuille "Feuil7", la valeur contenue dans le tableau Vardatas aux indices x et y.

K = Feuil2.Cells(65536, Col).End(xlUp).Row : en gros ça fait comme si tu positionnais le curseur dans la feuille "Feuil2", sur la ligne numéro 65536 (la dernière ligne possible dans une feuille Excel) de la colonne dont le numéro est contenu dans la variable "Col" et ensuite ça remonte dans cette même colonne jusqu'à la première cellule non vide. Le numéro de ligne de cette cellule est alors mis dans la variable "K".

Dernière modification par Marcel32 ; 25/05/2008 à 23h56.
Marcel32 est déconnecté   Réponse avec citation
Vieux 26/05/2008, 09h06   #6 (permalink)
XLDnaute Accro
 
Date d'inscription: septembre 2007
Messages: 1 502
Par défaut Re : Question de débutant Macro excel

Bonjour,

K = Feuil2.Cells(65536, Col).End(xlUp).Row

Donne le no de la dernière ligne de la colonne Col

For Kf = LBound(Tabuniq, 1) To UBound(Tabuniq, 1)

Lbound donne la limite inférieure d'un tableau et Ubound la limite supérieure

Les tableaux

Remarque: les méthodes que j'ai donné avec Dictionnary sont beaucoup plus rapides que ta méthode( 2 boucles emboitées)

Code:
Sub Communs()
  Set MonDico1 = CreateObject("Scripting.Dictionary")
  For Each c In Range([A2], [A65000].End(xlUp))
     If Not MonDico1.Exists(c.Value) Then MonDico1.Add c.Value, c.Value
  Next c
  Set mondico2 = CreateObject("Scripting.Dictionary")
  For Each c In Range([B2], [B65000].End(xlUp))
    If MonDico1.Exists(c.Value) Then
      If Not mondico2.Exists(c.Value) Then mondico2.Add c.Value, c.Value
    End If
  Next c 
  Range("E2:E" & mondico2.Count + 1) = Application.Transpose(mondico2.items)
End Sub
Objet dictionary

JB

Dernière modification par BOISGONTIER ; 26/05/2008 à 09h17.
BOISGONTIER est connecté maintenant   Réponse avec citation
ANNONCES
Réponse

Liens sociaux

Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui

Discussions similaires
Discussion Auteur Forum Réponses Dernier message
question de débutant romulus37 Forum Excel 8 25/11/2007 20h27
débutant ayant une question sur les conditions dans les formules excel. mouloud Forum Excel 5 16/08/2006 22h39
question de débutant alex Forum Excel 2 03/05/2005 23h03
question de debutant crunch Forum Excel Downloads - Archives 2 18/07/2003 09h17
Question de debutant ;-) Milandou Forum Excel Downloads - Archives 2 18/04/2003 12h18


Fuseau horaire GMT +2. Il est actuellement 05h16.


(C) 2006 Excel Downloads