XL 2003 : VBA / comparer cellules + couper/coller lignes

  • Auteur de la discussion CedricBDO
  • Date de début

CedricBDO

Nouveau membre
Bonjour,
J'espère que certains pourront venir à mon aide, je suis débutant en VBA (je pars de zéro mais avec des bases en C et fortran) et je dois absolument réaliser une maccro VBA.

Voila j'explique mon problème un peu plus en détails.

J'ai deux fichiers excel : "A_valider_calculs" et "Priorites".
Le fichier "A_valider_calculs" contient une feuille "Clos" et le fichier "Priorites" contient 3 feuilles : "Bidos", "Non_Bidos" et "Clos_Priorites".

Le but de la maccro VBA est de comparer la colonne A de "A_valider_calculs/Clos" avec respectivement "Priorites/Bidos" et "Priorites/Non_Bidos".
Si le contenu des cellules est le meme pour une ligne, il faut que je colorie en vert la ligne correspondante dans "Priorites/Bidos" ou "Priorites/Non_Bidos" et que je coupe cette même ligne pour la coller dans "Priorites/Clos_Priorites", sachant que ce fichier contient déjà des lignes à la base.

Petite chose en plus, Il faudrait également que cette maccro s'effectue à l'aide d'un "bouton" mise à jour qui se situerait dans la première cellule de "Priorites/Bidos" et qui afficherait la dernière date à laquelle on a cliqué dessus.

Je remercie tous ceux qui auront le temps de lire mon problème et qui m'apporteront de l'aide sachant que je galère dessus depuis pas mal de jour.

Bonne journée
 

zeb

Modérateur
Salut,

Eh, bien sûr que nous pouvons t'aider. !
Tu as trois amis. Google, qui t'a amené ici, l'enregistreur de macro d'Excel qui va écrire pour toi un code épouvantable mais dont nous allons nous servir de base pour découvrir VBA/Excel et zeb, un petit tyran sur le forum PPC, qui va t'aider à faire du code de l'enregistreur une belle macro capable de résoudre ton problème. :)

Comme je ne vais pas faire ton boulot à ta place, c'est à toi de commencer. Publie donc une ébauche de code, on va faire en sorte qu'à la fin, ça marche ;)
 

CedricBDO

Nouveau membre
Je n'ai malheureusement pas encore de code, je suis en train d'éplucher les tuto pour voir comment se nomme les différentes fonctions, mais j'ai à peu près écris l'algorithme en langage... humain :)

ca donne ca :

-> Ouvrir le fichier "A_Valider_Calculs"
-> Ouvrir la feuille "Clos"
-> Ouvrir le fichier "Priorites"
-> Ouvrir les feuilles "Bidos", "Non_Bidos" et "Clos_Priorites"
-> Lire les valeurs de la colonne A de "A_Valider_Calculs/Clos"
-> Lire les valeurs de la colonne A de "Priorites/Bidos" (ou de "Priorites/Non_Bidos)
-> Comparer toutes ces valeurs entre elles
-> Si des valeurs sont égales, sélectionner la ligne correspondante dans "Priorites/Bidos)
-> Colorier la ligne en vert
-> Couper la ligne
-> Sélectionner la première ligne vide dans la feuille "Priorites/Clos_Priorites"
-> Coller à cet endroit la ligne coupée provenant de "Priorites/Bidos"
-> Afficher l'heure+date de la dernière utilisation de la maccro à coter du bouton de mise à jour
-> Fermer le fichier "A_Valider_Calculs"

je suis en train de faire une ébauche de code, je poste ca des que finit.
merci de l'aide
 

zeb

Modérateur
[:glublutz:25]

Ouh que cet algorithme est laid ! C'est moche quand tu écris : Couper ... Coller.

De quel droit te permets-tu de te servir du presse-papier comme variable temporaire ?
C'est comme ça que tu programmais en C ou en Fortran ? Je ne pense pas.

Imagine que plusieurs programmes ou macros en fassent autant, et en même temps !
Quelle pagaille.

Il faudra donc trouver une solution alternative.
 

CedricBDO

Nouveau membre
Sub Maccro()
Dim i, j As Integer 'Je définis mes variables
 
 
'Je déclare les fichiers d'entrées
Workbooks.Open A_Valider_Calcul:="C:\A_Valider_Calcul.xls"
Workbooks.Open Priorites:="C:\Priorites.xls"
Workbooks("A_Valider_Calcul.xls").Activate
Workbooks("Priorites.xls").Activate
Set wk0 = Workbooks("A_Valider_Calcul.xls")
Set wk1 = Workbooks("Priorites.xls")
 
'Je sélectionne mes feuilles dans les fichiers
wk0.Sheets("Clos").Select
wk1.Sheets("Bidos").Select
wk1.Sheets("Non_Bidos").Select
wk1.Sheets("Clos_Priorites").Select
 
'Je sélectionne les colonnes/lignes/cellules qui m'intéressent
wk0.Sheets("Clos").Columns("A:A").Select
wk1.Sheets("Bidos").Columns("A:ZZ").Select
wk1.Sheets("Non_Bidos").Columns("A:ZZ").Select
 
'Je fais une double boucle pour comparer chaque valeur de la colonne A
'de "A_Valider_Calcul/Clos" avec chaque valeur de la colonne A de "Priories/Bidos ou Non_Bidos"
 
For i = 1 To 1000
For j = 1 To 1000
If wk0.Sheets("Clos").Cells(j, 1) = wk1.Sheets("Bidos").Cells(i, 1) Then wk1.Sheets("Bidos").Range("Ai:ZZi").Select
' Cells(j,1) correspond bien à la cellule (ligne=i, colonne=1)?
'La je ne sais pas comment colorier la cellule en vert ni comment la déplacer dans la feuille "Priorites/Clos_Priorites"
End If
 
If wk0.Sheets("Clos").Cells(j, 1) = wk1.Sheets("Non_Bidos").Cells(i, 1) Then wk1.Sheets("Non_Bidos").Range("Ai:ZZi").Select
End If
 
Next
Next
 
End Sub
 

CedricBDO

Nouveau membre
Sub Maccro()
Dim i, j As Integer 'Je définis mes variables
 
 
'Je déclare les fichiers d'entrées
Workbooks.Open A_Valider_Calcul:="C:\A_Valider_Calcul.xls"
Workbooks.Open Priorites:="C:\Priorites.xls"
Workbooks("A_Valider_Calcul.xls").Activate
Workbooks("Priorites.xls").Activate
Set wk0 = Workbooks("A_Valider_Calcul.xls")
Set wk1 = Workbooks("Priorites.xls")
 
'Je sélectionne mes feuilles dans les fichiers
wk0.Sheets("Clos").Select
wk1.Sheets("Bidos").Select
wk1.Sheets("Non_Bidos").Select
wk1.Sheets("Clos_Priorites").Select
 
'Je sélectionne les colonnes/lignes/cellules qui m'intéressent
wk0.Sheets("Clos").Columns("A:A").Select
wk1.Sheets("Bidos").Columns("A:ZZ").Select
wk1.Sheets("Non_Bidos").Columns("A:ZZ").Select
 
'Je fais une double boucle pour comparer chaque valeur de la colonne A
'de "A_Valider_Calcul/Clos" avec chaque valeur de la colonne A de "Priories/Bidos ou Non_Bidos"
 
For i = 1 To 1000
For j = 1 To 1000
If wk0.Sheets("Clos").Cells(j, 1) = wk1.Sheets("Bidos").Cells(i, 1) Then wk1.Sheets("Bidos").Range("Ai:ZZi").Select
' Cells(j,1) correspond bien à la cellule (ligne=i, colonne=1)?
'La je ne sais pas comment colorier la cellule en vert ni comment la déplacer dans la feuille "Priorites/Clos_Priorites"
End If
 
If wk0.Sheets("Clos").Cells(j, 1) = wk1.Sheets("Non_Bidos").Cells(i, 1) Then wk1.Sheets("Non_Bidos").Range("Ai:ZZi").Select
End If
 
Next
Next
 
End Sub
 

CedricBDO

Nouveau membre
Merci pour votre aide, j'ai finalement trouvé la solution à mon problème après moultes essais et bcp d'aides.

Pour ceux que ça intéresse voici mon code :

Code:
Sub maccro()
'Définition des variables
Dim i As Long, j As Long, k As Long, wk0 As Workbook, wk1 As Workbook 

'Permet de ne pas afficher le message de fermeture de fichier
Application.DisplayAlerts = False 

On Error Resume Next 'Ouverture de la gestion de problème
Workbooks.Open "C:\Doc1.xls"
If Err <> 0 Then
    MsgBox ("Le fichier C:\Doc1.xls n'existe pas")
    Exit Sub 'Affichage d'un message d'erreur si le fichier n'existe pas
End If
On Error GoTo 0 'Fermeture de la gestion de problème
Set wk0 = ActiveWorkbook
Set wk1 = ThisWorkbook


j = 2
While wk0.Worksheets("Doc1_Feuille1").Cells(j, 1) <> ""
      On Error Resume Next
      i = WorksheetFunction.Match(wk0.Worksheets("Doc1_Feuille1").Cells(j, 1).Value, wk1.Worksheets("Doc2_Feuille1").Columns(1), 0) 'Comparaison de la valeur des colonnes A des différentes feuilles
      If Err Then i = 0
      On Error GoTo 0
      If i <> 0 Then
      wk1.Worksheets("Doc2_Feuille1").Rows(i).Interior.Color = RGB(153, 204, 0) 'Remplissage en vert de la ligne
      wk1.Worksheets("Doc2_Feuille1").Rows(i).Cut 'On coupe la ligne qui a passé le test de comparaison
      With wk1.Worksheets("Doc2_Feuille2")
        With .UsedRange: k = .Row + .Rows.Count
        .Rows(k).Insert 'On insert la ligne dans la feuille " Doc2_Feuille2"
        End With
      End With
      wk1.Worksheets("Doc2_Feuille1").Rows(i).Delete 'On supprime la ligne qu'on a déplacé et qui est maintenant vide
      End If
j = j + 1 'On passe au traitement de la ligne suivante dans la feuille " Doc1_Feuille1" de Doc1
Wend


wk0.Close

'Affichage de la date de dernière mise à jour dans la 1ère case de la feuille Doc2_Feuille1
wk1.Worksheets("Doc2_Feuille1").Cells(1, 1) = " Mis à jour le   " + Format(Date, "dd-mm-yyyy") + " à  " + Format(Time, "hh:mm")

End Sub

Remarque : La maccro plante s'il y a des colonnes avec des cellules fusionnées.

Bonne journée
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 070
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut