Selectionner une case via une variable (c'est compliqué ;))

Bonjour,

J'ai une macro qui fait va chercher dans un fichier 1 une valeur et ensuite faire un find sur un fichier 2.

1/ Si la valeur n'est pas trouvée on copie la ligne correspondant dans le fichier 1 et on la colle tout en bas du fichier 2.

2/ Si la valeur est trouvée et selon des conditions on va mettre une date sur la case H ou I du fichier 2 correspondant à la ligne de la valeur (c'est pas clair).

Mon problème est sur le point 2 car la valeur n'est pas forcément sur la même ligne dans le fichier 1 et 2. Sur les lignes surlignées dans le code ci-dessous je me réfère aux mêmes lignes entre le fichier 1 et 2 alors que ce n'est pas forcément le cas.

En gros je voudrai sélectionner dans le fichier 2 la case H ou I (selon les conditions) mais sans me référer dans la boucle For à la variable i mais à la variable "résultat".

Je sais c'est pas clair du tout mais si quelqu'un arrive à comprendre et à me dépatouiller ça serait sympa

  • --------------------------------------------------------------------------------------------------------
  • --------------------------------------------------------------------------------------------------------

Sub Pilotage_des_feux()

'

' Pilotage_des_feux Macro

'

'déclaration des variables

Dim resultat As Range

Dim valeur As Range

Dim feujour As Range

Dim feuveille As Range

Dim dateorange As Range

Dim datevert As Range

Dim MyFiles() As String

Windows("Pilotage des Feux test.xlsm").Activate

Worksheets("Feuil1").Activate

chemin = Worksheets("Feuil1").Range("A2").Value 'chemin où sont les fichiers

chemin2 = Worksheets("Feuil1").Range("A4").Value 'chemin du fichier matrice

fichier2 = Worksheets("Feuil1").Range("B4").Value 'Fichier matrice

fichier = Dir(chemin)

'ouverture du fichier matrice

ChDir "" & chemin2 & ""

Workbooks.OpenText Filename:= _

"" & chemin2 & "" & fichier2 & ".xls"

'On récupère le nom de l'onglet dans une variable

nomonglet2 = ActiveSheet.Name

'On boucle dans le répertoire définit pour réucpérer tous les fichiers qui sont présents

Do While fichier <> ""

ReDim Preserve MyFiles(j)

MyFiles(j) = fichier

j = j + 1

fichier = Dir()

Loop

Workbooks.Open chemin & MyFiles(0) 'on ouvre le 1er fichier du répertoire

For j = LBound(MyFiles) To UBound(MyFiles) 'on va ouvrir les fichiers du répertoire définit successivement pour faire les tests

nomonglet = ActiveSheet.Name 'on récupère le nom de l'onglet dans une variable

Sheets(nomonglet).Activate

pgmitim = "PGM_ ITIM SURVEILLANCE FEU " 'permettra ensuite de récupérer la date de fichier du jour par rapport au nom du fichier du jour

Columns("H:I").EntireColumn.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 'on ajoute 2 colonnes H et I pour pouvoir faire le copier/coller dans le fichier matrice avec le même nombre de colonnes

'Permet de récupérer la date J-1 du fichier du jour (ex : PGM_ ITIM SURVEILLANCE FEUX 20092018, on récupère 19/09/2018)

datewb = Replace(Replace(MyFiles(j), pgmitim, ""), ".xls", "")

datewb = DateSerial(Right(datewb, 4), Mid(datewb, 3, 2), Left(datewb, 2)) - 1

'on compte le nombre de lignes du fichier

Range("A4").Select

Selection.End(xlDown).Select

fin = ActiveCell.Row

For i = 4 To fin 'On va de la valeur 2 à la valeur fin

Set valeur = Sheets(nomonglet).Cells(i, 1) 'la variable valeur aura comme résultat i = 4 à fin et 1 = colonne A (donc A4 à A"fin") - càd n° de référence unique sur lequel on fera la recherche

Set feujour = Sheets(nomonglet).Cells(i, 7) 'la variable feujour aura comme résultat i = 4 à fin et 7 = colonne G (donc G4 à G"fin")

Orange = "H" & i & "" 'Orange servira à aller sur la case H4 à H"fin"

Vert = "I" & i & "" 'Vert servira à aller sur la case I4 à I"fin"

Windows("" & fichier2 & ".xls").Activate 'On va sur le fichier matrice

Set resultat = Sheets(nomonglet2).Columns(1).Find(What:=valeur, LookAt:=xlWhole, MatchCase:=False) 'On fait un find sur le fichier matrice pour trouver la donnée "valeur"

[Surligner] Set feuveille = Sheets(nomonglet2).Cells(i, 7) 'on récupère la valeur de la case G4 à G"fin"

Set dateorange = Sheets(nomonglet2).Cells(i, 8) 'on récupère la valeur de la case H4 à H"fin"

Set datevert = Sheets(nomonglet2).Cells(i, 9) 'on récupère la valeur de la case I4 à I"fin"

[/Surligner]

If resultat Is Nothing And feujour = "Feu orange Arrivée" Then 'si on ne trouve pas la variable "resultat" dans le fichier matrice et que la case Gx contient "Feu Orange Arrivée" dans le fichier du jour

Windows(MyFiles(j)).Activate 'alors on va sur le fichier du jour, on copie la ligne

Range("A" & i & "").EntireRow.Select

Selection.Copy

Windows("" & fichier2 & ".xls").Activate 'on colle la ligne tout en bas du fichier matrice et on on met la date du fichier jour en colonne Hx

Range("A4").Select

Selection.End(xlDown).Select

ActiveCell.Offset(1, 0).Select

ActiveSheet.Paste

ActiveCell.Offset(0, 7).Select

ActiveCell.Value = datewb

Else

'si on trouve la variable "resultat" dans le fichier matrice et que la donnée "Feu vert Arrivée" du fichier du jour est renseignée

'et que la donnée "Feu orange Arrivée" du fichier matrice est renseignée alors on met la date du fichier du jour dans la case Ix du fichier matrice

If Not resultat Is Nothing And feujour = "Feu vert Arrivée" And feuveille = "Feu orange Arrivée" Then

Windows("" & fichier2 & ".xls").Activate

[Surligner] Range(Vert).Select

Range(Vert).Value = Format(Now - 1, "dd/mm/yyyy")

Range(Vert).Value = datewb

[/Surligner]

End If

End If

Windows(MyFiles(j)).Activate

Next i 'on passe à la prochaine itération

Windows(MyFiles(j)).Activate

ActiveWindow.Close

Next j

Windows("" & fichier2 & ".xls").Activate

ActiveWorkbook.Save

ActiveWindow.Close 'on enregistre et clôture le fichier matrice

End Sub

slt Marty,

essai comme ca:

Set feuveille = Sheets(nomonglet2).Cells(resultat.Row , 7) 'on récupère la valeur de la case G4 à G"fin"
Set dateorange = Sheets(nomonglet2).Cells(resultat.Row, 8) 'on récupère la valeur de la case H4 à H"fin"
Set datevert = Sheets(nomonglet2).Cells(resultat.Row, 9) 'on récupère la valeur de la case I4 à I"fin"

Salut m3ellem1,

Merci énormément, non seulement tu as réussi à décrypter ce que j'ai écrit et en plus c'est exactement ce qu'il me faut.

Je ne suis jamais déçu quand je viens ici, des réponses rapides et des gens sympas. C'est assez rare pour le signaler.

Rechercher des sujets similaires à "selectionner case via variable complique"