> Tous les forums > Forum Bureautique
 Vba Trouver Nom Prénom sur autre fichier (reformulé)Sujet résolu
Ajouter un message à la discussion
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]
vieuxmonsieur
  Posté le 12/10/2018 @ 12:17 
Aller en bas de la page 
Astucien

Bonjour,

J'ai 2 classeurs Excel 2003 :

Classeur 1 : nommé "Annuaire" comportant une feuille nommée "Base"
Classeur 2 : nommé "FichePC" Formulaire fait avec Excel nommé "FR" et une feuille nommée "Report".

Cette feuille "Report" reprend les infos de la fiche "FR" dans l'ordre de destination du fichier "Annuaire".
(Cette feuille sera en xlSheetVeryHidden)

Je souhaiterai un code Vba permettant de rechercher selon le "Nom Prénom" de la feuille "Report" la personne correspondante dans le classeur nommé

"Annuaire" feuille "Base" le "Nom Prénom" de la personne pour mettre à jour ses informations.

Certaines cellules de la feuille "Report" resteront avec un "blanc" (du fait des formules). Il ne faudrait pas que les renseignements éventuels de la feuille

"Base" correspondants au "blanc" soient effacés.
D'autres ayant la police en rouge sur le formulaire soient reportées à l'identique.

Comptant sur votre sympathique gentillesse, je vous en remercie.

https://www.cjoint.com/c/HJmpRkKiWPQ

https://www.cjoint.com/c/HJmpRYVnvnQ



Modifié par vieuxmonsieur le 26/10/2018 12:41
Publicité
nainconnu.bis
 Posté le 12/10/2018 à 15:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Message supprimé vu reformulation de la demande !

.

.

.

.

.



Modifié par nainconnu.bis le 12/10/2018 19:49
vieuxmonsieur
 Posté le 12/10/2018 à 17:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir nainconnu,

Merci, mais j'ai reformulé ma demande qui était mal présentée

ferrand
 Posté le 12/10/2018 à 19:04 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Je ne suis pas sûr de comprendre ce que tu veux faire ?

S'agit-il simplement de reporter ta ligne 2 de Report, sur l'annuaire à la suite ?

Ou à la place si le nom existe déjà ?

Si c'est le cas, pourquoi deux classeurs ?

vieuxmonsieur
 Posté le 12/10/2018 à 20:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir M. ferrand

Je vous remercie de me répondre

Oui, c'est pour mettre à jour des renseignements existants dans l'annuaire

Le formulaire, c'est ce que la secrétaire recevra (environ 200 par mois)

J'ai pensé en remettant les données dans l'ordre de l'annuaire sur la feuille Report, ce serait plus facile

Si la personne n'existe pas dans la Base ou s'il faut la supprimer, Ouvrir le formulaire Userform_Action

Par l'enregistreur, je peux faire un copier et 2 collage spécial (valeur et format) pour récupérer le formatage si police en rouge

Mais je ne sais pas comment faire pour retrouver le nom et le prénom pour mettre à jour



Modifié par vieuxmonsieur le 12/10/2018 20:22
ferrand
 Posté le 12/10/2018 à 23:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Re,

Ce que tu ajoutes me laisse perplexe.

Je pensais que la feuille servant de formulaire (FR) était destinée à la saisie. Ton bouton Valider saisie est quelque peu trompeur, car il ne fait qu'enregistrer une copie sur le Bureau (qui n'est un emplacement ni sûr, ni recommandé). Mais bon ! La saisie est en fait répercutée par formules sur la feuille masquée Report.

Ce dispositif, lourd et compliqué (surtout qu'on peut faire nettement plus simple), me laissait donc penser que tu souhaitait que cette ligne saisie, dans Report soit répercutée sur l'annuaire. Ce qui m'avait laissé pensif car la présence d'un formulaire dans le même classeur que l'annuaire aurait facilité toutes opérations de mise à jour (saisie initiale et modifications, comme on procède habituellement pour toute base de données dans Excel)...

Mais quand tu dis :

J'ai pensé en remettant les données dans l'ordre de l'annuaire sur la feuille Report, ce serait plus facile

Cela n'a plus l'air d'être ça du tout. La feuille Report aurait donc plusieurs lignes ? On transférerait des lignes de l'annuaire vers Report ? Je me perds donc en conjectures.

Puis :

Ouvrir le formulaire Userform_Action

dont il n'y a pas trace dans aucun des deux fichiers ! Nouvelle interrogation.

Je passe sur l'enregistreur et l'histoire des couleurs et les problèmes de copier-coller, prônant, pour un code propre, simple, fiable et efficace, d'oublier définitivement l'enregistreur (qui permet juste de ne pas apprendre à coder efficacement en VBA), et aussi éviter autant que possible d'opérer par copier-coller (trop lent par rapport aux méthodes possibles en VBA). Ces aspects méthodologiques sont pour l'instant secondaires... Je comprends moins encore qu'au départ ce qu'il a pratiquement à faire.

Cordialement.

vieuxmonsieur
 Posté le 13/10/2018 à 08:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour M. ferrand,

Le chemin de ces 2 classeurs est :

C:\ADD\
Il s'agit d'un classeur permanent : Annuaire.
Et d'un classeur FichePC qui est réceptionné aléatoirement.

Les 2 classeurs sont ouvert sur le bureau et visible à l'écran.
Ce classeur n'a que 2 feuille FR et Report.

Cette feuille Report n'a que 2 lignes : Titre et reprise des renseignements du formulaire de saisie. j'ai pansé que ce serait plus facile.
La feuille FR étant rempli par Pierre, Paul ou Jacques, puis transmise.

A la réception, mise à jour de l'annuaire.
Il faudrait reporter la ligne 2 de la feuille Report à la place du même Nom, Prénom.

ou l'ajouter à la fin de l'annuaire qui est remis en ordre alphabétique à la fermeture.
Ce formulaire est ensuite archivée dans un classeur nommé RecepFiche.
Si la personne est inconnue, l'ajouter dans l'Annuaire.

En vous remerciant.



Modifié par vieuxmonsieur le 13/10/2018 14:10
ferrand
 Posté le 13/10/2018 à 14:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Je dois dire que la méthode et l'organisation des données ne me semblent pas les meilleures. Ajouté à ce qu'on voit du code, constitué d'agrégats d'origines diverses, parfois mis simplement bout à bout (avec parfois des éléments de code qui ont dû être fournis mais ont depuis disparus), sans intégration réelle (ce qui pourra réserver quelques surprises ultérieurement)... tu m'obliges à continuer dans le bricolage plus ou moins hasardeux, à moins de tout réécrire mais il faudrait avoir tous les éléments et repenser l'organisation sur des bases plus rationnelles...

Voilà donc une proposition, qui fait ce que tu demandais au départ : rechercher si la ligne à reporter existe dans l'annuaire, à partir des nom et prénom pour l'identifier, si elle existe on met à jour la ligne actuelle par substitution de celle à reporter, sinon on ajoute la ligne à reporter en fin d'annuaire ; dans les deux cas on répercute la couleur rouge de certaines mentions.

Sub Report()
Dim wsA As Worksheet, LRp As Range, Red, Annu, i%, Nm$, Pnm$, mfm As Boolean
Set wsA = Workbooks("Annuaire.xls").Worksheets(1)
Annu = wsA.Range("A1").CurrentRegion.Resize(, 2)
Set LRp = ThisWorkbook.Worksheets("Report").Range("A1").CurrentRegion _
.Offset(1).Resize(1)
Nm = LRp.Cells(1, 1): Pnm = LRp.Cells(1, 2)
Red = Array(IIf([TelF] = "x", 6, -6), IIf([TelP] = "x", 7, -7), _
IIf([TelB] = "x", 8, -8), IIf([Mem] = "Devenir", 20, -20))
For i = 2 To UBound(Annu)
If Annu(i, 1) = Nm And Annu(i, 2) = Pnm Then Exit For
Next i
If i > UBound(Annu) Then mfm = True
Application.ScreenUpdating = False
With wsA.Cells(i, 1).Resize(, LRp.Columns.Count)
.Value = LRp.Value
If mfm Then
.Offset(-1).Copy: .Cells(1, 1).PasteSpecial xlPasteFormats
End If
For i = 0 To UBound(Red)
.Cells(1, Abs(Red(i))).Font.Color = IIf(Red(i) > 0, vbRed, vbBlack)
Next i
End With
End Sub

Explications :

Je ne m'étends pas sur les déclarations de variables, elles seront vues s'il y a lieu au fur et à mesure...

La première ligne affecte la feuille Annuaire à une variable objet de type Worksheet :
Set wsA = Workbooks("Annuaire.xls").Worksheets(1)
J'y ai repris le nom de classeur que tu avais fourni, et dans le doute sur le nom de la feuille, j'ai supposé que c'était la première comme dans le modèle. Tu rectifieras donc le cas échéant.

La ligne suivante affecte à une variable de type Variant les deux premières colonnes de l'annuaire (leurs valeurs), en ciblant la totalité de la plage couverte par l'annuaire (la région courante utilisée à partir de A1), redimensionnée sur 2 colonnes.
Annu = wsA.Range("A1").CurrentRegion.Resize(, 2)
On obtient ainsi un tableau à deux dimensions de base 1, listant sur 2 colonnes les noms et prénoms et dont les indices correspondent aux lignes de la feuille.

On poursuit nos préparatifs en passant sur l'autre classeur (qui contient la macro) pour affecter à une variable de type Range la ligne à reporter (plage) sur l'annuaire. On y procède également en se référant à la région courante à partir de A1 pour la décaler d'une ligne et la redimensionner à une ligne. Cette variable plage est notre ligne à reporter.
Set LRp = ThisWorkbook.Worksheets("Report").Range("A1").CurrentRegion.Offset(1).Resize(1)
J'ai dit 'en passant' mais ce n'est qu'une clause de style ! On n'a pas à bouger, on donne simplement les directives à VBA, soit on ne sélectionne strictement rien (opération toujours inutile et parasite quand il ne s'agit pas d'afficher au regard de l'utilisateur, à bannir de tout code si on le veut efficace), on laisse la feuille masquée masquée (ce qui n'empêche nullement de travailler avec).

On prélève les nom et prénom de la ligne dans des variables de type String :
Nm = LRp.Cells(1, 1): Pnm = LRp.Cells(1, 2)

Puis on va encore recueillir les fameuses mentions dont le texte doit être rouge. Il y a 4 mentions de l'espèce : 3 numéros de téléphone figurant aux colonnes F, G, H, et une mention ("Devenir") figurant en col. T. On va s'appuyer sur les conditions pour savoir si elles doivent être rouges ou pas, conditions indiquées dans des cellules de la feuille FR : un "x" pour les n° de tél. et la mention indiquée pour la dernière.
Ce sera peut-être à rectifier, car il y a contradiction entre une MFC de FR et celle correspondante de Report, qu'il ne m'appartient pas de trancher...
Les cellules repères étant nommées, on utilise ces noms pour recueillir l'information. On va placer ces infos, dans un tableau affectée à une variable de type Variant au moyen de la fonction Array : si la condition est réunie, on place dans le tableau le numéro de colonne dont le texte devra alors être rouge, si elle ne l'est pas, on place aussi le numéro de colonne mais avec une valeur négative, le texte devant alors être rétabli au noir s'il y a lieu.
Red = Array(IIf([TelF] = "x", 6, -6), IIf([TelP] = "x", 7, -7), IIf([TelB] = "x", 8, -8), IIf([Mem] = "Devenir", 20, -20))
NB- La fonction IIf fonctionne sur le même modèle que SI en feuille de calcul.

Les préparatifs étant ainsi terminés, on passe à la détection sur l'annuaire. On parcourt donc notre tableau liste de noms et prénoms, à partir de la ligne 2 (en-tête en 1), jusqu'à trouver une correspondance du nom et du prénom avec nos variables dans lesquelles on a recueilli ces indications pour les chercher.
For i = 2 To UBound(Annu)
If Annu(i, 1) = Nm And Annu(i, 2) = Pnm Then Exit For
Next i
Quand et si on les trouve, on sort ! Notre variable de boucle i aura la valeur du numéro de ligne où notre ligne à reporter doit se substituer à la ligne en place.

Si aucune correspondance n'est trouvée, la boucle ira jusqu'à son terme, et i, incrémentée sur la valeur qui suit la dernière ligne aura alors la valeur de numéro de ligne sur laquelle insérer notre ligne à reporter. Dans tous les cas, i indiquera donc sur quelle ligne on va mettre notre report.

Mais si on doit insérer sur une nouvelle ligne, il faudra mettre cette dernière en forme... on enregistre donc le fait en mettant une variable booléenne à True si on doit mettre en forme la ligne.
If i > UBound(Annu) Then mfm = True
NB-On ne s'occupe pas de la mettre à False s'il n'y a pas lieu de mettre en forme, car une variable a toujours une valeur par défaut, c'est naturellement False pour une booléenne, 0 pour une numérique ou "" pour une String. Si donc une variable n'a pas été initialisée, il est tout à fait inutile de la réinitialisée à sa valeur par défaut, qu'elle a déjà, double emploi !

A ce stade on va intervenir sur la feuille annuaire, on désactive donc la mise à jour de l'affichage.
Application.ScreenUpdating = False
Comme on procèdera le cas échéant à la mise en forme par copie de formats, cela provoque un tressautement dans l'affichage qu'on évitera ainsi. Sans cela le peu qu'on a à faire (écriture d'une ligne) ne justifiait pas vraiment d'y procéder... (Lorsque l'on a des séquences assez longues d'écriture sur la feuille active, l'inhibition de l'affichage est une nécessité si on ne veut pas ralentir l'exécution, si l'on écrit ailleurs que sur la feuille visible, l'affichage ne changeant pas, il n'y a pas lieu d'y recourir).
NB-Et on ne rétablit pas la propriété à True à la fin ! Excel fait ça tout seul automatiquement (il le fait aussi pour DisplayAlerts), on le laisse s'en charger...

On cible donc la ligne de l'annuaire sur laquelle on intervient, en la plaçant sous instruction With :
With wsA.Cells(i, 1).Resize(, LRp.Columns.Count)
Première cellule de la ligne définie par i, redimensionnée à la longueur de la ligne à reporter.
NB-Dès qu'on plus d'une chose à faire avec un objet, ou si l'on a à s'y référer plusieurs fois, je préconise toujours cette instruction qui raccourcit notablement le code et est un facteur d'accélération de l'exécution. A l'intérieur de l'instruction With... End With, toute expression précédée par un point réfèrera à l'objet. L'expression sera donc parfaitement qualifiée, dans les meilleures conditions pour l'exécution (VBA ne traînera pas les boulets constitués par les Select produits par l'enregistreur, suivis d'expressions non qualifiées plus lentes à exécuter, et dont la fiabilité n'est jamais pérenne).

Première intervention sur la ligne, l'affectation de la ligne à reporter :
.Value = LRp.Value
C'est simple et clair ! On affecte en bloc les valeurs d'une plage source à une plage cible. Nettement plus rapide qu'un copier-coller, plus rapide aussi qu'une affectation de valeur cellule par cellule, on gagnerait encore un peu en utilisant un tableau au lieu d'une variable plage (mais ici l'impact en serait annulé sur l'ensemble des manipulations à opérer, certaines exigeant l'usage d'objet Range...)

Deuxième intervention, opérer la mise en forme dans le cas d'un ajout. Dans le contexte, il apparaît plus économique de procéder par copie de la ligne précédente et collage des format.
If mfm Then
.Offset(-1).Copy: .Cells(1, 1).PasteSpecial xlPasteFormats
End If
On y procède avant de s'occuper des texte rouge, car la mise en forme de couleur de police pourrait être annulée par une mise en forme à partir de la ligne précédente.
NB-Le caractère ":" est un séparateur de lignes de code (il y 2 ligne de code sur la même ligne physique), de même que " _" en fin de ligne est un caractère de continuité de ligne (la ligne de code se poursuit à la ligne en dessous).

Troisème et dernière intervention : la mise en place de texte en rouge, ou rétablissement en noir, selon cas.
For i = 0 To UBound(Red)
.Cells(1, Abs(Red(i))).Font.Color = IIf(Red(i) > 0, vbRed, vbBlack)
Next i
On boucle sur notre tableau Red. On est toujours en référence à la ligne mise sous With : ciblant une cellule sur cette ligne, sa ligne est donc 1 en adressage relatif, et la colonne est fourni par la valeur absolue de Red(i). On passera le texte en rouge ou blanc selon que cette valeur est positive ou négative.
NB-VBA fournit des constantes pour les 8 couleurs de base (rouge, vert, bleu, jaune, cyan et magenta, et balnc et noir) qu'on peut utiliser sans avoir à recourir à la fonction RGB.

NB2-Noter qu'on réutilise la variable i alors qu'elle est déjà utilisée dans l'instruction de mise sous With de la ligne... Mais à l'exécution de cette instruction les références de l'objet Range constitué par la ligne ont été mémorisées par VBA, et la variable est redevenue disponible, ce qui permet sa réutilisation au sein même de l'instruction With, sans avoir besoin de rajouter une autre variable.

Cordialement.

vieuxmonsieur
 Posté le 14/10/2018 à 13:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour M. ferrand,
Désolé de vous répondre aussi tardivement, mais des obsèques douloureuses m'ont empêcher de vous répondre plus tôt.

Je vous remercie de me répondre et de vos explications très détaillées que je note précieusement, vous êtes un excellent pédagogue.
Vous avez parfaitement compris que je ne connais que peu de chose en Vba et je vois que ma demande manque d'explications aussi, vais-je tenter de le faire.
Les "FichesPC" arrivent chaque jour de partout.
C'est pourquoi je désirerai qu'à la réception, elles mettent le fichier "Annuaire_APEM" à jour; je pense qu'il faudrait un test en début de code pour vérifier que ce classeur soit ouvert et s'il ne l'est pas, l'ouvrir.
Les deux classeurs se trouvent : C:\ADD\Annuaire APEM.xls (comporte 11 onglets) onglet Base est celui concerné et C:\ADD\FichePC.xls (comporte 2 onglets)
Je ne suis pas le créateur de ces codes, sauf quelque uns avec l'enregistreur.
J'ai rectifié sur la feuille FR la Mfc en X25
En testant le code j'ai un os ici : Set LRp = ThisWorkbook.Worksheets("Report").Range("A1").CurrentRegion _

Dans l'attente de vous lire.



Modifié par vieuxmonsieur le 15/10/2018 09:50
Publicité
ferrand
 Posté le 14/10/2018 à 17:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Pas de souci de délai... Et mes condoléances pour ce qui vous arrive.

La ligne de code est :

Set LRp = ThisWorkbook.Worksheets("Report").Range("A1").CurrentRegion _
.Offset(1).Resize(1)

(Le caractère " _" [espace suivi de underscore] est un caractère de continuité de ligne qui indique que la ligne de code se poursuit à la ligne physique suivante.)

Quelle est l'erreur signalée par VBA ?

ThisWorkbook fait toujours référence au classeur qui contient la macro en cours d'exécution. Donc au classeur FichePC dans lequel elle est censée être, et où se trouve la feuille Report.

Les possibilité d'erreurs peuvent donc provenir de :

- la macro n'a pas été placée dans le classeur FichePC.xls

- ce classeur ne contient pas de feuille Report

- les données dans la feuille n'occupent pas les 2 premières lignes à partir de A1.

Cordialement.

vieuxmonsieur
 Posté le 14/10/2018 à 19:01 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir M. ferrand,

Je vous remercie pour votre compassion.

Set wsA = Workbooks("Annuaire_APEM.xls").Worksheets(1)

Donne erreur 9

Maintenant ici : erreur 91

Annu = wsA.Range("A1").CurrentRegion.Resize(, 2)



Modifié par vieuxmonsieur le 15/10/2018 09:49
ferrand
 Posté le 15/10/2018 à 00:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

L'erreur 9 c'est qu'il y a certainement erreur sur le nom du classeur, c'est le seul élément... car pour la feuille de rang 1, comme tout classeur doit contenir au moins une feuille, il y a forcément une première feuille (ce ne sera peut-être pas forcément celle qu'on voulait si on ne l'a pas vérifié, mais cela déclencherait un autre type d'erreur et ailleurs).

Si wsA n'a pas été défini cela implique l'erreur 91 puisque l'objet n'existe alors pas (mais cela supposerait que tu aies inhibé la commande précédente définissant wsA... ?)

Maintenant ce pourrait aussi être une erreur provoquée par Excel dans le contexte. Ajoute toujours Value à cette ligne pour forcer la précision, il arrive quelquefois qu'Excel ne parvienne pas à se décider entre l'objet et la valeur de l'objet (sa propriété par défaut) :

Annu = wsA.Range("A1").CurrentRegion.Resize(, 2).Value

Cordialement.

vieuxmonsieur
 Posté le 15/10/2018 à 09:54 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour M. ferrand,

Toujours en erreur

http://zupimages.net/viewer.php?id=18/42/49bl.jpg



Modifié par vieuxmonsieur le 15/10/2018 09:55
vieuxmonsieur
 Posté le 17/10/2018 à 16:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Re,

Je ne sais quel lien mettre, alors je mets les quatre

http://zupimages.net/viewer.php?id=18/42/broy.jpg

https://zupimages.net/up/18/42/broy.jpg

[url=http://zupimages.net/viewer.php?id=18/42/broy.jpg][img]https://zupimages.net/up/18/42/broy.jpg[/img][/url]

<a href="http://zupimages.net/viewer.php?id=18/42/broy.jpg"><img src="https://zupimages.net/up/18/42/broy.jpg" alt="" /></a>



Modifié par vieuxmonsieur le 17/10/2018 16:42
vieuxmonsieur
 Posté le 17/10/2018 à 16:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Re,

Erreur 91

Variable objet ou variable de bloc With non définie

ferrand
 Posté le 17/10/2018 à 19:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Si tu invalides des lignes de commandes, cela ne peut plus marcher.

L'annuaire n'est sans doute pas sur la 1re feuille, il faut donc remplacer 1 par le nom de la feuille annuaire.

vieuxmonsieur
 Posté le 17/10/2018 à 20:34 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonsoir M. ferrand,

Je vous remercie grâce à vous, j'ai compris pourquoi ça n'allait pas.

En effet, le classeur Annuaire ouvert ce n'était pas suffisant, il fallait ôter la protection, ce que j'oubliais de faire.

J'ai aussi remplacé le n° de la feuille.

Merci encore M. ferrand

Publicité
vieuxmonsieur
 Posté le 26/10/2018 à 12:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour M. ferrand,

Je reviens vers vous car j'ai un blocage macro ici que je ne comprends pas car ça fonctionnait avant.

En vous remerciant

Private Sub Btn_MajBase_Click() 'EN COURS COURS
Dim wsA As Worksheet, LRp As Range, Red, Annu, i%, Nm$, Pnm$, mfm As Boolean
Dim Rep As Integer

'MsgBox "Vérifiez que l'Annuaire APEM soit ouvert" & vbCrLf & "et vous êtes-vous authentifié ?" & vbCrLf & "Avez-vous sélectionner la feuille Base ?", vbYesNo, vbCritical, "ATTENTION"

Rep = MsgBox("Vérifiez que l'Annuaire_APEM soit ouvert" & vbCrLf & vbCrLf & "et la feuille Base sélectionnée." & vbCrLf & vbCrLf & "Voulez-vous continuez ?", vbYesNo + vbQuestion + vbCritical, "ATTENTION")
If Rep = vbNo Then
Exit Sub
Else
'si réponse Oui exécute code

' Set wsA = Workbooks("Annuaire_APEM.xls").Worksheets("Base")
Set LRp = ThisWorkbook.Worksheets("Report").Range("Base").CurrentRegion _
.Offset(1).Resize(1)

ferrand
 Posté le 26/10/2018 à 15:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Je sais ce qu'est "A1" sur la feuille indiquée et je peux prédire exactement (sauf bouleversement complet de la structure de dispostion des données sur la feuille) que la CurrentRegion à partir de A1, décalée de 1 ligne et redimensionnée à 1 ligne, sera une plage correspondant à la ligne à reporter (voir explications dans mon post du 13/10 à 14h17).

Mais je ne sais pas ce qu'est "Base" ! Je ne peux donc rien dire sur la CurrentRegion renvoyée à partir de "Base" (un tel nom de plage n'existait pas dans le fichier sur lequel j'ai travaillé).

Cordialement.

vieuxmonsieur
 Posté le 26/10/2018 à 16:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour M. ferrand,

"Base" est le nom de la feuille du classeur "Annuaire_APEM" qui reçoit les données actualisés.

En vous remerciant.



Modifié par vieuxmonsieur le 26/10/2018 16:12
ferrand
 Posté le 26/10/2018 à 17:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Alors que vient-il faire comme nom d'objet Range ?

Et pourquoi la ligne précédente est-elle invalidée ?

vieuxmonsieur
 Posté le 26/10/2018 à 17:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Effectivement.

Je vous remercie M. ferrand

Maintenant je ne peux pas tester cette macro pas à pas (F8) et elle ne fait pas ce que j'attends

Private Sub Worksheet_Change(ByVal Target As Range)
Dim tx, i%
tx = Target.Value
Application.EnableEvents = False
Select Case Target.Address(False, False)
Case "AD1"
Btn_MajBase.Visible = (UCase(tx) = "ADD")
Btn_ValiderSaisie.Visible = Not (UCase(tx) = "ADD")
Case "A29", "A34", "A37", "S10", "S18", "S21", "S34"
Target = UCase(Left(tx, 1)) & LCase(Mid(tx, 2))
Case "A4", "K7", "G24"
Target = UCase(tx)
Case "K4"
tx = Split("-" & tx, "-")
For i = 1 To UBound(tx)
tx(i) = StrConv(tx(i), vbProperCase)
Next i
Target = Replace(Join(tx, "-"), "-", "", 1, 1)
End Select
Application.EnableEvents = True
End Sub
ferrand
 Posté le 26/10/2018 à 18:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Ça, c'est un code que j'ai proposé dans un autre de tes sujets, qui reprend les éléments d'un code antérieur pour les organiser de façon plus cohérente et véritablement intégré dans une même procédure aulieu de les laisser à l'état de succession de bouts de code d'origines diverses... Il fait la même chose que le précédent (dans la mesure où le précédent fonctionnait), il devrait donc correspondre à ce que tu attends... Je n'ai juste dissocié que la mise d'une majuscule initiale aux prénoms pour traiter les prénoms composés, car il ne me paraît pas adéquat d'écrire par exemple Jean-pierre au lieu de Jean-Pierre !

Si donc ce qu'il fait ne convient pas, c'est à toi de dire ce qui doit être fait.

Mais là on passe du coq à l'âne ! Dans le présent sujet une discussion était en cours, des questions posées, il conviendrait donc de mener cette discussion à terme avant de passer à autre chose.

Cordialement.

vieuxmonsieur
 Posté le 26/10/2018 à 19:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Désolé, vous avez raison, j'ouvre un autre sujet

Avec mes remerciements chaleureux

ferrand
 Posté le 27/10/2018 à 00:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Ce sujet n'était pas terminé. Tu as modifié le code en introduisant des erreurs. Il serait bon de les éliminer...

vieuxmonsieur
 Posté le 27/10/2018 à 00:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Merci M; ferrand

Accepte-tu de me les mettre en lumière Stp

Publicité
Pages : [1] 2 ... Fin
Page 1 sur 2 [Fin]

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
comment transformer fichier slk en pdf ou autre
récupérer un fichier remplacé par un autre?
trouver fichier iso
Trouver des éléments cachés d'un fichier pdf
Macro Copier ligne vers un autre fichier
(Macro) Copier onglet sur autre fichier Excel (2007)
CREATION BASE DE DONNEES AVEC 1 AUTRE FICHIER EXCE
EXCEL RECHERCHEV pour autre fichier. Macro?
Excel 2007 extraction dans un autre fichier
Sauvegarde fichier Word d'une session sur l'autre
Plus de sujets relatifs à Vba Trouver Nom Prénom sur autre fichier (reformulé)
 > Tous les forums > Forum Bureautique