Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

macro de recherche

16 réponses
Avatar
Manu
Bonjour,

Je n'arrive pas du tout à m'en sortir. Pas facile... je vais tacher d'etre
clair

J'ai des fichiers nommé : toto 2008.xls ; toto 2009.xls ; toto 2010.xls ;
toto 2011.xls .....
j'ai 13 feuil données ; janvier ; fevrier .. jusqu'a decembre
dans toutes les feuil j'ai en colonne A des noms, ils sont tapé dans la
feuil données et dans chaque autre feuil j'ai fais une liaison =Données!A5
etc ainsi je suis sur que dans chaque col A de chaque feuil, j'ai les memes
noms

Les fichiers ne sont pas toujours totalement identique,
les feuils sont toujours les memes mais en colonne A j'ai des noms mais ne
sont pas toujours les memes d'une année à une autre et ne sont pas toujours
trier de la meme facon.

Je souhaiterai créer un bouton que lorsque je fais des changements de D7 à
D1000 de la feuil decembre du fichier toto 2008.xls, qu'il me copie cette
plage dans la colonne E du fichier toto N+1 c'est à dire toto 2009.xls

ca, j'y arrivais avec cela :

Sub miseajour_N_Nplus1()
Dim NomFic As String, Chemin As String, Annéesuivante As String

Calculate
Sheets("decembre").Select
Range("D7:D1000").Select
Selection.Copy
Sheets("données").Select
Annéesuivante = Range("B1") + 1
NomFic = "toto" & Annéesuivante & ".xls"
Chemin = "C:\" & Annéesuivante & "\"
Workbooks(NomFic).Activate
Sheets("Données").Select
Range("e4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Range("e4").Select
Calculate
Sheets("données").Select
Range("e4").Select
Annéesuivante = Range("B1") - 1
NomFic = "toto" & Annéesuivante & ".xls"
Chemin = "C:\" & Annéesuivante & "\"
Workbooks(NomFic).Activate
ActiveWorkbook.Save
ActiveWindow.Close

End Sub

Mais evidemment comme je le stipulais au dessus, cette macro est une grosse
boulette dans la mesure ou je copie une plage d'un fichier à un autre mais
que ces donnés ne correspondent plus au nom qu'il y a dans la colonne A car
les noms changent d'une année à l'autre.

Alors, est t'il possible de copier les cellules de D7 à D1000 de la feuil
decembre et de coller dans la colonne E du fichier toto N+1 en faisant
attention au nom qu'il y a dans la colonne A, si le noms existe sur les 2
fichiers, alors qu'il me recherche dans le fichier N+1 ou se trouve le nom
et qu'il me le colle dans la colonne E en face du nom correspondant etc...
pour tous les cellules de D7 à D1000 et que si un nom n'est plus commun au 2
fichier alors qu'il ne fasse rien et que si un nom existe en toto N+1 et
qu'il n'existatis pas en N-1 alors qu'il ne fasse rien non plus.

Vraiment pas facile... J'ai été clair ??? j'espere .

merci du coup de main, j'en ais vraiment besoin.

Manu

6 réponses

1 2
Avatar
Manu
Ca fonctionne nickel, j'ai juste ajouter Application.DisplayAlerts =
False
au debut afin qu'il ne m'embete pas si le fichier N+1 est deja ouvert
et en fin de macro Application.DisplayAlerts = True

merci bien de ton implication, ca me depanne vraiment.

Bonne journée

Manu

"FFO" a écrit dans le message de news:

Rebonjour à toi

Mets comme ceci :

Fichier = "Toto " & Sheets("données").Range("B1") + 1 & ".xls"
Classeur = ThisWorkbook.Name
Chemin = "C:" & Sheets("données").Range("B1") + 1 & "" & Fichier
On Error Resume Next
Workbooks.Open (Chemin)
Workbooks(Classeur).Activate
Sheets("decembre").Activate
i = 7
Do While i < Range("A65535").End(xlUp).Row + 1
Ligne = 0
On Error Resume Next
Ligne > Workbooks(Fichier).Sheets("données").Columns("A:A").Find(What:=Range("A" &
i), After:=Workbooks(Fichier).Sheets("données").Range("A6"),
LookIn:=xlValues, Lookat:=xlWhole).Row
If Ligne > 0 Then
Workbooks(Fichier).Sheets("données").Range("E" & Ligne) = Range("D" & i)
End If
i = i + 1
Loop

Celà devrait convenir

Dis moi !!!!



Avatar
FFO
Rebonjour à toi

Heureux de t'avoir satisfait

Si le fichier est déjà ouvert j'avais mis la ligne :

On Error Resume Next

Pensant que celà suffisait pour ne pas générer de message d'erreur

Aprés essai en fait aucun message d'erreur n'apparait si le fichier est déjà
ouvert même sans cette instruction

Réessaies de ton côté sans ligne d'instruction supplémentaire (ni On Error
Resume Next ni Application.DisplayAlerts = False) car il est inutile de
surcharger le code de commande superflue

Tiens moi informé !!!!!
Avatar
Modeste
Bonsour® FFO avec ferveur ;o))) vous nous disiez :

Si le fichier est déjà ouvert j'avais mis la ligne :

On Error Resume Next

Pensant que celà suffisait pour ne pas générer de message d'erreur

Aprés essai en fait aucun message d'erreur n'apparait si le fichier
est déjà ouvert même sans cette instruction

Réessaies de ton côté sans ligne d'instruction supplémentaire (ni On
Error Resume Next ni Application.DisplayAlerts = False) car il est
inutile de surcharger le code de commande superflue



il est vrai que si l'on n'identifie pas l'erreur, la détecter ne sert à rien ;o)))

un traitement d'erreur n'est pas du code superflu !!!
encore faut-il (*)identifier l'erreur et agir selon le cas !!!
voir case Else ci-dessous


sub FFO()
On Error goto TrtErr ' qui doit etre intégré à l'interieur de la proc elle-même
../.
' ton code
../..
Goto Fin: ' permet de sortir de la proc sans repasser sur le traitement du ON ERROR
' ************************************************************************
TrtErr:
' **** Évalue le numéro d'erreur.
Select Case Err.Number
Case 55 ' Erreur "Ce fichier est déjà ouvert".
Close #1 ' Ferme le fichier.
Resume ' Reprend l'exécution au niveau de la
' ligne à l'origine de l'erreur exemple err
Case XX ' prévisible à la conception exemple err 55
' call code *** action définie correspondante pour contourner
Err.Clear
Resume Next
Case YY or WW ' prévisible à la conception
' ***************action bloquante remediable par l'utilisateur
' Message d'erreur avec action utilisateur
Err.Clear
Resume ' Reprend l'exécution au niveau de la
' ligne à l'origine de l'erreur
Case ZZ ' Action bloquante non remediable
' Message d'erreur avec avertissement risque perte de controle
End ou Exit Sub ' selon l'impact sur le travail en cours (mise a jour, calculs errones etc...)
Case Else ' <----instruction obligatoire(*)
' Traite les autres situations ici...
Msg = "L'erreur # " & Str(Err.Number) & " a été générée par " _
& Err.Source & Chr(13) & Err.Description
MsgBox Msg, , "Erreur dans proc FFO "
' permet d'identifier l'erreur, une copie de cet d'écran de ce message
' permetttra éventuellement au programmeur de revoir sa copie ;o)))
End
End Select
'************************************************************************ *
Fin:
End Sub
Avatar
Manu
Si je retire les lignes que tu m'as dis, j'ai le message : toto 2010.xls est
deja ouvert ....
C'est genant.


"FFO" a écrit dans le message de news:

Rebonjour à toi

Heureux de t'avoir satisfait

Si le fichier est déjà ouvert j'avais mis la ligne :

On Error Resume Next

Pensant que celà suffisait pour ne pas générer de message d'erreur

Aprés essai en fait aucun message d'erreur n'apparait si le fichier est
déjà
ouvert même sans cette instruction

Réessaies de ton côté sans ligne d'instruction supplémentaire (ni On Error
Resume Next ni Application.DisplayAlerts = False) car il est inutile de
surcharger le code de commande superflue

Tiens moi informé !!!!!




Avatar
FFO
Rebonjour à toi

Moi je ne l'ai pas

Donc maintiens ces lignes si pour toi ce n'est pas le cas

Il ne faut maintenir que ce qui est utile et nécessaire
Avatar
Manu
Merci encore

Manu

"FFO" a écrit dans le message de news:

Rebonjour à toi

Moi je ne l'ai pas

Donc maintiens ces lignes si pour toi ce n'est pas le cas

Il ne faut maintenir que ce qui est utile et nécessaire


1 2