Rechercher : dans
Par :

BESOIN D'AIDE URGENTE MACROS EXCEL 2003

Dernière réponse le 16 nov 2009 à 11:12:18 itreal, le 6 nov 2009 à 12:20:35 
 Signaler ce message aux modérateurs

Bonjour,
je viens vers vous pour trouver une solution à mon GROS problème pour créer une macro sur Excel.
Je dois faire en sorte de rapatrier des données de quatre tableaux excel à ramener sur un seul.
Deux d'entre eux ont exactement les même colonnes et deux autres non.
Je dois donc pouvoir sélectionner les colonnes que je veux ramener et cela doit se faire après automatiquement, les données à la suite les unes des autres.
On m'a dit que je pouvais faire ça avec une macro qui fait une boucle... après je comprenais plus.
Mon problème est que l'on m'a embaucher pour ce poste et que j'ai un mois pour réussir ça ou je pense que j'ai de grande chance de dégager.
En espérant que quelqu'un me vienne en aide.

Configuration: Windows XP
Excel 2003

49

itreal, le 10 nov 2009 à 16:30:57

J'en ai marre, j'ai un nouveau problème.
Il ne prend pas toutes les lignes de mon "baseboulot3"

Répondre à itreal

50

pijaku, le 10 nov 2009 à 17:09:44

Ne pas cèder à la panique!
La macro, tous les codes donnés ci-dessus sont corrects. Envoie moi par mail (tu trouveras mon adresse perso dans mon profil) tes 5 classeurs, je ferais en sorte que les petits réglages de fin fonctionnent. Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ­ou est le problème? --

Répondre à pijaku

51

itreal, le 13 nov 2009 à 11:02:41

Salut,
je reviens vers toi en plus des couleurs car je m'aperçois que quand je change ma macro (je lui dit par exemple que la colonne 11 du "base3" ne va plus en AA mais en Q de ma "cible")
il ne rafraichit pas correctement.
ce qui fait que des données se trouvent mélangées, c'est la catastrophe.

Répondre à itreal

52

pijaku, le 13 nov 2009 à 11:06:53

Salut,
pas compris! quand je change ma macro (je lui dit par exemple que la colonne 11 du "base3" ne va plus en AA mais en Q de ma "cible")
il ne rafraichit pas correctement

Mets voir ici ton code stp. Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

53

itreal, le 13 nov 2009 à 11:26:14

Je n'ai mis qu'un exemple de "base" sur les 5 qui s'importent dans "cible".
j'ai voulu changer la destination de la ligne 11 pour qu'elle se mette dans Q et non dans AA.
Et là j'ai données qui se mettent bien en Q mais restent aussi en AA.

Pareil pour la couleur, quand j'enlève les données dans la colonne"Dossier clos", la ligne reste rouge.

Private Sub Workbook_Open()
Dim derlig As Integer, dercol As Integer, numligne As Integer
ActiveSheet.Range("A2:Z65536").ClearContents

Dim i As Integer
derlig = Range("AE65536").End(xlUp).Row
For i = 2 To derlig
If Range("AA" & i) <> "" Then
With Range(Cells(i, 1), Cells(i, 38)).Interior
.ColorIndex = 3
End With
End If
Next i

Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\bureau\base1.xls"
With Workbooks("cible.xls").Sheets("Feuil1")
numligne = .Range("A65536").End(xlUp).Offset(1, 1).Row
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("A" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 2), Cells(derlig, 2)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("H" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 3), Cells(derlig, 3)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("L" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 4), Cells(derlig, 4)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("G" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 5), Cells(derlig, 5)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("D" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 6), Cells(derlig, 6)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("J" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 7), Cells(derlig, 7)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("O" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 9), Cells(derlig, 9)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("P" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 10), Cells(derlig, 10)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("Y" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 11), Cells(derlig, 11)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("AA" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 12), Cells(derlig, 12)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("AB" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 14), Cells(derlig, 14)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("AC" & numligne)

Workbooks("cible.xls").Activate
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Range("A2").Select
Range("A1:AL" & derlig).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub

Répondre à itreal

54

itreal, le 13 nov 2009 à 12:02:11

Je vois en plus qu'il mélange des données, si la "base4" n'a pas de données à alimenter dans la colonne AA de mon tableau "cible".
Il me prend des donnée d'une autre base et le met sur la même ligne dans ma cible.

Répondre à itreal

55

pijaku, le 13 nov 2009 à 12:14:21

Déjà la couleur : A la fin de la macro... comme ceci :

Private Sub Workbook_Open()
Dim derlig As Integer, dercol As Integer, numligne As Integer, i As Integer

ActiveSheet.Range("A2:Z65536").ClearContents

Workbooks.Open Filename:="C:\Documents and Settings\rperez\Mes documents\bureau\base1.xls"
With Workbooks("cible.xls").Sheets("Feuil1")
numligne = .Range("A65536").End(xlUp).Offset(1, 1).Row
End With
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 1), Cells(derlig, 1)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("A" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 2), Cells(derlig, 2)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("H" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 3), Cells(derlig, 3)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("L" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 4), Cells(derlig, 4)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("G" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 5), Cells(derlig, 5)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("D" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 6), Cells(derlig, 6)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("J" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 7), Cells(derlig, 7)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("O" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 9), Cells(derlig, 9)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("P" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 10), Cells(derlig, 10)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("Y" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 11), Cells(derlig, 11)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("AA" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 12), Cells(derlig, 12)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("AB" & numligne)
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 14), Cells(derlig, 14)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("AC" & numligne)

Workbooks("cible.xls").Activate
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Range("A2").Select
Range("A1:AL" & derlig).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

derlig = Range("AE65536").End(xlUp).Row
For i = 2 To derlig
If Range("AA" & i) <> "" Then
With Range(Cells(i, 1), Cells(i, 38)).Interior
.ColorIndex = 3
End With
End If
Next i

End Sub

2- explication du copier coller :
première partie de la phrase = partie à copier ex:
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 9), Cells(derlig, 9)).Copy
signifie : Classeur"base1", feuille active, Selection de cellules de I2 à I dernière ligne, à copier
la deuxième partie = ou coller? ex :
Workbooks("cible.xls").Sheets("Feuil1").Range("P" & numligne)
signifie coller à : Classeur"cible", Feuille 1, à partir de la cellule P et numligne qui est la variable renseignant la première ligne vide en bas de feuille...
Donc pour copier AA en Q tu devrais avoir quelque chose comme :
Workbooks("base1.xls").ActiveSheet.Range(Cells(2, 27), Cells(derlig, 27)).Copy Workbooks("cible.xls").Sheets("Feuil1").Range("Q" & numligne)
Or je ne vois cela nulle part dans ton code...
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

56

itreal, le 16 nov 2009 à 09:47:21

Bonjour,
je vois où se trouve mon problème, il garde en mémoire les anciennes données.
Si je change ma macro, mon tableau cible n'enlève pas les données qui l'avait avec l'ancienne macro.
Ce qui fait que si je modifie quelque chose, il ne reprend pas depuis le début.
Est ce qu'il n'existe pas une commande pour que tout soit contrôlé par ma macro ?

Répondre à itreal

57

pijaku, le 16 nov 2009 à 10:05:43

Salut,
Remplace au début de ta macro :
ActiveSheet.Range("A2:Z65536").ClearContents
par :
ActiveSheet.Range("A2:AZ65536").Delete
Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku

58

itreal, le 16 nov 2009 à 10:23:28

Il me met qu'il y a un bug dans ma macro que tu m'avais donné pour trier, à la ligne :
"derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row"

qui se trouve ici :
"Workbooks("cible.xls").Activate
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Range("A2").Select
Range("A1:AL" & derlig).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal"

Répondre à itreal

59

pijaku, le 16 nov 2009 à 10:33:01

Peux tu me renvoyer ton tableau par mail que j'y regardes. Le code à l'air bon là... Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ­ou est le problème? --

Répondre à pijaku

60

 pijaku, le 16 nov 2009 à 11:12:18

Oui c'est tout à fait normal qu'il y ai un bug ici car : Range("A1").SpecialCells(xlCellTypeLastCell).Row ne peux pas être utilisé plusieurs fois de suite sans enregistrement du classeur.
2 choix :
1- tu enregistres le classeur avant cette ligne :
Workbooks("cible.xls").Activate
Workbooks("cible.xls").Save
derlig = Range("A1").SpecialCells(xlCellTypeLastCell).Row
Range("A2").Select
Range("A1:AL" & derlig).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

2- tu remplaces : Range("A1").SpecialCells(xlCellTypeLastCell).Row
par : derlig = Range("A65536").End(xlUp).Row

Personnellement je préfères la 2ème solution, mais à toi de voir... Cordialement,
-- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --

Répondre à pijaku