Faits :
A.
A._, née en 1958, a travaillé depuis 1980 à plein temps en qualité de collaboratrice dans la société B._ à C._. En mars 2010, elle a diminué son horaire de travail à 73 % d'un emploi à temps complet, par choix personnel. Invoquant une diminution de sa capacité de travail pour cause de maladie depuis mai 2010, elle a déposé une demande de prestations de l'assurance-invalidité, le 25 janvier 2011, dans laquelle elle a indiqué que son salaire mensuel brut s'élevait à 4790 fr. 60, versé 13 fois l'an. Dans un questionnaire du 24 juillet 2013, l'employeur a précisé que le salaire annuel était de 63'026 fr. 75 selon un décompte de janvier 2013, et que AXA Winterthur versait des indemnités journalières en cas de maladie.
L'Office de l'assurance-invalidité pour le canton de Vaud (ci-après: l'office AI) a confié un mandat d'expertise au docteur D._, spécialiste en psychiatrie et psychothérapie. Dans son rapport du 4 septembre 2015, l'expert a attesté que l'assurée avait présenté un état dépressif moyen qui s'était installé depuis mai 2010 dans un contexte de problèmes professionnels. L'expert a retenu une incapacité de travail 100 % depuis le 28 mai 2010, 75 % depuis le 3 novembre 2010, 50 % depuis le 20 décembre 2010, et 25 % du 18 juin 2011 au 30 avril 2012. Depuis le 24 juillet 2013, le docteur D._ a repris le taux de 50 %, en précisant que ce 50 % d'un 100 % tenait aussi compte de la baisse de rendement.
Dans deux enquêtes économiques sur le ménage, l'office AI a fixé la part active à 73 %, les 27 % restants étant affectés à la part ménagère. La somme des empêchements dans les travaux ménagers a été arrêtée à 5,25 % dans la première enquête (rapport du 28 novembre 2012) et à 2,4 % dans la seconde (rapport du 19 janvier 2018). Il ressort également de cette dernière enquête qu'à la suite des arrêts de travail pour cause de maladie, l'assurée est occupée à 37,5 % d'un horaire à temps complet, au bénéfice d'un contrat de travail avec la société B._, son employeur; elle perçoit un salaire de 1890 fr., à quoi s'ajoute un montant mensuel de 1700 fr. mentionné sous la rubrique "Rente/PC" (rapport du 19 janvier 2018).
Comme l'expert D._ avait attesté que l'activité habituelle que l'assurée continuait d'exercer était la plus adaptée, l'administration a admis que le taux d'invalidité dans la part active se confondait avec celui de l'incapacité de travail. En application de la méthode mixte d'évaluation de l'invalidité, l'office AI a fixé le taux d'invalidité global à 37,8 % (recte: 37,9 %) au 30 mai 2011 (36, 5 % [part active] + 1,42 % [part ménagère]), respectivement à 37,1 % (36,5 % + 0,6 %) dès le mois de février 2013, ces valeurs étant inférieures au seuil ouvrant droit à la rente. L'office AI a précisé qu'une aggravation de l'état de santé avait entraîné une nouvelle période d'incapacité de travail (100 % du 1 er octobre 2012 au 6 janvier 2013, puis 50 % du 7 au 13 janvier 2013), mais qu'elle n'ouvrait pas de droit à la rente puisqu'elle avait duré moins d'une année. Par décision du 14 février 2018, l'office AI a rejeté la demande.
B.
A._ a déféré cette décision à la Cour des assurances sociales du Tribunal cantonal du canton de Vaud.
Le 8 janvier 2019, le juge instructeur a entendu E._, époux de l'assurée, qui est aussi son supérieur direct en sa qualité de responsable de l'office de la société B._ de la ville C._. E._ a déclaré qu'il avait noté une nette diminution des capacités de son épouse, ce qui avait entraîné un réaménagement de leurs tâches respectives au sein de l'office de la ville C._. Il a précisé que si le cas avait été celui d'une autre personne, il serait intervenu pour une prise en charge complémentaire par un tiers.
Par jugement du 20 février 2019, la juridiction cantonale a admis le recours, réformé la décision du 14 février 2018 en ce sens qu'elle a reconnu le droit de A._ à un quart de rente d'invalidité du 1 er juillet au 31 août 2011, puis du 1 er octobre 2011 au 31 décembre 2017, ainsi qu'à une demi-rente à partir du 1 er janvier 2018.
C.
L'office AI interjette un recours en matière de droit public contre ce jugement dont il demande l'annulation, en concluant à la confirmation de sa décision du 14 février 2018. Il sollicite l'attribution de l'effet suspensif à son recours.
L'intimée conclut au rejet du recours et de la requête d'effet suspensif. L'Office fédéral des assurances sociales a renoncé à se déterminer.

Considérant en droit :
1.
Le recours en matière de droit public (<ref-law>) peut être formé pour violation du droit au sens des art. 95 et 96 LTF. Le Tribunal fédéral applique le droit d'office (<ref-law>). Il statue sur la base des faits retenus par la juridiction précédente (<ref-law>), qu'il peut rectifier ou compléter d'office si des lacunes et erreurs manifestes apparaissent aussitôt (<ref-law>). Il n'examine en principe que les griefs allégués et motivés (<ref-law>) surtout s'ils portent sur la violation des droits fondamentaux (<ref-law>). Il ne peut pas aller au-delà des conclusions des parties (<ref-law>). Le recourant n'est habilité à critiquer les constatations de fait que si les faits ont été établis de manière manifestement inexacte ou en violation du droit au sens de l'<ref-law>, et si la correction du vice est susceptible d'influer sur le sort de la cause (<ref-law>; cf. <ref-ruling> consid. 4.3 p. 62 et les références).
2.
2.1. Le litige porte sur le droit de l'intimée à une rente d'invalidité.
Dans le cadre de l'application de la méthode mixte d'évaluation de l'invalidité, la répartition entre les parts active (73 %) et ménagère (27 %), la fixation du revenu sans invalidité par la juridiction cantonale (62'901 fr. dès l'année 2011, 63'026 fr. 75 dès 2013 après indexation), de même que l'entrave dans l'accomplissement des travaux ménagers (2,4 %), ne sont pas remises en question. Seul demeure contesté, devant le Tribunal fédéral, le revenu d'invalide afférent à la part active.
2.2. Le jugement attaqué expose de manière complète les dispositions légales et réglementaires ainsi que les principes jurisprudentiels relatifs à la notion d'invalidité (art. 7 et 8 al. 1 LPGA en relation avec l'<ref-law>) et à son évaluation (<ref-law>, <ref-law> et <ref-law>), en particulier en fonction de la méthode mixte, ainsi qu'à la valeur probante des rapports médicaux (<ref-ruling> consid. 5.1 p. 232; <ref-ruling> consid. 3 p. 352) et d'enquêtes économiques sur le ménage (<ref-ruling> consid. 6.1 p. 61 s.; <ref-ruling>), et à la libre appréciation des preuves (art. 61 let. c LPGA). Il suffit d'y renvoyer.
3.
Devant la juridiction cantonale, l'assurée intimée avait critiqué le calcul du revenu d'invalide effectué par l'office recourant. Elle avait soutenu que son revenu comportait une part de salaire social qui ne devait pas être prise en compte comme salaire déterminant pour l'évaluation de l'invalidité.
Dans la mesure où l'intimée n'épuisait pas sa capacité résiduelle de gain, les premiers juges en ont déduit qu'il convenait de se référer, nonobstant l'activité exercée "à 50 % de son 73 %" auprès de la société B._, aux données statistiques résultant de l'Enquête suisse sur la structure des salaires (ESS) pour déterminer le revenu d'invalide (consid. 9b p. 22 du jugement attaqué). Ils ont ainsi pris en compte les revenus ressortant des tables TA1 pour des femmes exerçant des tâches physiques ou manuelles simples dans le secteur privé, qu'ils ont adaptés à l'horaire usuel de travail dans les entreprises et indexés à l'évolution des salaires. Comparant les revenus d'invalide ainsi obtenus avec le revenu sans invalidité (voir les calculs détaillés figurant aux consid. 9c-h, pp. 22-24 du jugement), le tribunal cantonal, appliquant la méthode mixte (<ref-law>), a fixé les taux d'invalidité globaux comme suit: 43 % pour la période de mai au 17 juin 2011, 28 % du 18 juin 2011 au 30 avril 2012, 44 % du 24 juillet 2013 au 31 décembre 2017, puis 51 % à compter du 1er janvier 2018, ce qui ouvrait droit aux rentes correspondantes (cf. <ref-law>).
4.
4.1. L'office recourant reproche à la juridiction cantonale de n'avoir pas respecté les réquisits légaux et jurisprudentiels en matière d'évaluation du gain de personne invalide, et d'avoir procédé à une comparaison des revenus contraire au droit. Il ajoute que les faits pertinents ont été constatés non seulement en violation du droit, mais également de façon arbitraire. A cet égard, le recourant rappelle que le revenu d'invalide doit être évalué avant tout en fonction de la situation professionnelle concrète de la personne assurée. Lorsque l'activité exercée après la survenance de l'atteinte à la santé repose sur des rapports de travail particulièrement stables, qu'elle met pleinement en valeur la capacité de travail résiduelle exigible et que le gain obtenu correspond au travail effectivement réalisé et ne contient pas d'éléments de salaire social, le salaire effectivement réalisé doit être pris en compte pour fixer le revenu d'invalide. Ce faisant, il en résultait une perte de gain inférieure à 40 %, justifiant le refus de l'octroi d'une rente.
4.2. L'intimée est d'avis que les premiers juges ont apprécié le cas en tenant compte de l'ensemble des pièces du dossier et d'autres preuves, notamment le témoignage de E._ qu'ils ont pondéré et intégré correctement au dossier. Pour l'intimée, le tribunal cantonal a admis très justement que les éléments mis en évidence par E._ conféraient un caractère peu stable aux rapports de travail actuels. Son témoignage n'est d'ailleurs pas contradictoire à l'avis du docteur D._, mais complémentaire. L'intimée en déduit que la juridiction cantonale n'a pas procédé de manière arbitraire en relevant qu'elle n'épuise pas sa capacité de gain et qu'il y a donc lieu de se référer à l'ESS.
5.
5.1. Le revenu d'invalide doit être évalué avant tout en fonction de la situation professionnelle concrète de la personne assurée. Mais c'est seulement lorsque l'activité exercée après la survenance de l'atteinte à la santé repose sur des rapports de travail particulièrement stables, qu'elle met pleinement en valeur la capacité de travail résiduelle exigible et que le gain obtenu correspond au travail effectivement fourni et ne contient pas d'éléments de salaire social, que le revenu effectivement réalisé doit être pris en compte pour fixer le revenu d'invalide. En l'absence d'un revenu effectivement réalisé - soit lorsque la personne assurée, après la survenance de l'atteinte à la santé, n'a pas repris d'activité lucrative ou alors aucune activité normalement exigible -, le revenu d'invalide peut être évalué sur la base de salaires fondés sur les données statistiques résultant de l'ESS (<ref-ruling> consid. 2.3 p. 593; <ref-ruling> consid. 5.2 p. 301 et les références).
Est réputé revenu au sens de l'<ref-law> le revenu annuel présumable sur lequel les cotisations seraient perçues en vertu de la LAVS, à l'exclusion cependant des éléments de salaire dont il est prouvé que l'assuré ne peut fournir la contrepartie, parce que sa capacité de travail limitée ne le lui permet pas (<ref-law>). Selon la jurisprudence, la preuve de l'existence d'un salaire dit "social" est toutefois soumise à des exigences sévères, car on doit partir du principe que les salaires payés équivalent normalement à une prestation de travail correspondante (<ref-ruling> consid. 4.2 p. 353; <ref-ruling> consid. 2c/aa p. 18).
5.2. En l'espèce, l'intimée a déclaré qu'elle continuait de travailler à 37,5 % dans l'office de la société B._. Cette activité est la plus adaptée à son état de santé, l'assurée ayant d'ailleurs mentionné qu'elle ne se sentait pas prête à reprendre un autre poste. L'expert D._ a toutefois indiqué que la capacité de travail résiduelle de 50 % sur 100 % tenait aussi compte de la baisse de rendement. A cet égard, il est vrai que E._ n'a pas contredit l'expert lorsqu'il a fait état d'une nette diminution des capacités de son épouse. S'il a évoqué les mesures entreprises (un réaménagement des tâches au sein de l'office de la ville C._) et précisé qu'il serait intervenu pour une prise en charge complémentaire par un tiers si le cas avait été celui d'une autre personne, E._ n'a pas pour autant indiqué que le rendement de son épouse serait inférieur de moitié à celui d'un employé valide qui accomplirait le même horaire de travail qu'elle, ce qui serait alors constitutif d'un salaire social si la rémunération n'était pas adaptée à la baisse. L'éventualité d'un salaire social n'a donc pas été établie.
L'intimée ne met certes pas pleinement en valeur sa capacité de travail résiduelle (50 % d'un 100 %), même en restant dans l'agence de la ville C._. En effet, si l'intimée a été réengagée par la société B._ à 37,5 % d'un emploi à temps complet (voir à cet égard les déclarations de l'employeur lors de l'audition du 8 janvier 2019, ainsi que celles de l'intimée recueillies dans le cadre de l'enquête économique selon le rapport du 19 janvier 2018), cela ne résulte pas de sa propre volonté mais du fait que l'employeur ne lui donne pas la possibilité d'augmenter son temps de travail jusqu'à concurrence d'un emploi à mi-temps, médicalement exigible.
Quant aux rapports de travail, ils sont suffisamment stables, à tout le moins au moment où la décision administrative a été rendue, le 14 février 2018, cette date marquant la limite temporelle du pouvoir d'examen du juge (cf. <ref-ruling> consid. 2.1.2.1 p. 412 et les références).
5.3. Bien que le salaire perçu par l'intimée auprès de la société B._ ne puisse être assimilé à un salaire social et que les rapports de travail soient suffisamment stables, on ne peut pas pour autant en déduire que l'intimée a respecté son obligation de réduire le dommage, ce qui permettrait de s'écarter des données statistiques (arrêt 8C_7/2014 du 10 juillet 2014 consid. 8.1 et 8.2). En effet, le revenu provenant de l'emploi à 37,5 % n'a pas été constaté par les juges cantonaux, de sorte qu'il n'est pas possible de savoir s'il est supérieur ou inférieur aux données statistiques.
Certes, un salaire mensuel de 1890 fr. ressort du rapport d'enquête du 19 janvier 2018, mais il découle apparemment des déclarations de l'intimée et n'est pas documenté (notamment par une attestation de l'employeur). De plus, ce revenu de 1890 fr. pour un emploi à 37,5 % paraît éloigné du gain annuel de 62'901 fr., respectivement de 63'026 fr. 75 indiqué par l'employeur pour l'activité précédemment exercée à 73 %. On ignore également s'il s'agit d'un salaire net ou brut (la précision requise au ch. 4, p. 2, du rapport, n'a pas été apportée) et s'il est payé 12 ou 13 fois l'an. Quant au montant mensuel de 1700 fr., il pourrait représenter des avances de rente consenties par la caisse de pensions; son fondement juridique est toutefois incertain en l'état, si bien qu'on ne sait pas s'il peut être compté comme revenu d'invalide.
Il n'appartient pas au Tribunal fédéral de compléter les constatations de fait (cf. art. 105 al. 1 et 2 LTF). Dès lors que l'on ne connaît pas le montant exact des revenus que l'intimée retire de son activité à 37,5 % au service de la société B._, qui serait susceptible d'entrer en ligne de compte à titre de revenu d'invalide, il n'est pas possible de savoir si ces gains sont supérieurs au revenu d'invalide que l'autorité précédente a établi sur la base des statistiques de l'ESS, ce qui exclurait l'application de ces dernières. Cette incertitude ne permet pas non plus, en l'état, de procéder à une comparaison en pour-cent, comme le recourant l'a fait dans sa décision du 14 février 2018.
5.4. Le recours doit dès lors être admis et la cause renvoyée aux premiers juges afin qu'ils déterminent concrètement les revenus que l'intimée perçoit de son employeur pour l'activité déployée à 37,5 %. S'ils devaient être inférieurs aux revenus établis selon l'ESS pour un emploi à 50 %, le revenu d'invalide sera fixé en fonction de l'ESS. Dans l'éventualité où ils seraient supérieurs aux revenus établis selon l'ESS, ils seront pris en compte comme revenu d'invalide. Une fois les faits établis, les comparaisons des revenus pourront être effectuées.
6.
Vu l'issue du procès, la requête d'attribution de l'effet suspensif au recours n'a plus d'objet.
7.
L'intimée, qui succombe, supportera les frais de la procédure fédérale (<ref-law>).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est partiellement admis. Le jugement du Tribunal cantonal du canton de Vaud, Cour des assurances sociales, du 20 février 2019, est annulé, la cause lui étant renvoyée pour instruction complémentaire au sens des considérants et nouvelle décision. Le recours est rejeté pour le surplus.
2.
Les frais judiciaires, arrêtés à 800 fr., sont mis à la charge de l'intimée.
3.
Le présent arrêt est communiqué aux parties, au Tribunal cantonal du canton de Vaud, Cour des assurances sociales, et à l'Office fédéral des assurances sociales.
Lucerne, le 22 novembre 2019
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
La Présidente : Pfiffner
Le Greffier : Berthoud